Tôi đang cố gắng cache các phản hồi Python/bình bằng memcached. Sau đó tôi muốn phục vụ bộ nhớ cache bằng nginx. Tôi đang sử dụng mã bình mà trông giống như sau:nginx với bình và memcached trả về một số ký tự bị cắt xén
from flask import Flask, render_template
from werkzeug.contrib.cache import MemcachedCache
app = Flask(__name__)
cache = MemcachedCache(['127.0.0.1:11211'])
@app.route('/')
def index():
index = cache.get('request:/')
if index == None:
index = render_template('index.html')
cache.set('request:/', index, timeout=5 * 60)
return index
if __name__ == "__main__":
app.run()
và cấu hình trang web nginx mà trông giống như sau:
server {
listen 80;
location/{
set $memcached_key "request:$request_uri";
memcached_pass 127.0.0.1:11211;
error_page 404 405 502 = @cache_miss;
}
location @cache_miss {
uwsgi_pass unix:///tmp/uwsgi.sock;
include uwsgi_params;
error_page 404 /404.html;
}
}
Tuy nhiên, khi nó kéo từ bộ nhớ cache mã html là tiền tố với chữ V, chứa các ký tự \ u000a (nguồn cấp dữ liệu dòng) và các ký tự cục bộ bị cắt xén và được gắn với "p1". như vậy:
V<!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\u000a<head>\u000a <meta http-equiv="content-type" content="text/html; charset=UTF-8" />\u000a <meta http-equiv="content-language" content="no">\u000a\u000a <title>
[...]
\u000a\u000a</body>\u000a</html>
p1
.
Mặc dù loại nội dung là "text/html; charset = utf-8". Được cho là V [...] p1. điều có thể có một cái gì đó làm với chunked chuyển mã hóa một cái gì đó, một lá cờ đó không phải là hiện diện trong tiêu đề phản ứng. Tôi nên làm gì?
Được rồi, vì vậy tôi đã sửa nó. Nó, tôi thêm add_header Transfer-Encoding chunked; trong cấu hình nginx, nhưng bây giờ tôi nhận được 'Lỗi 321 (net :: ERR_INVALID_CHUNKED_ENCODING)' nếu tôi tải nó trong Chrome sau khi tải nó trong Firefox. Có cách nào tốt hơn để thực hiện loại cache này không? – jondoe