Я пишу веб-приложение на Python с Flask и Nginx в качестве прокси-сервера.
С самого первого дня я разрабатываю свое приложение для кэширования ответа, поэтому я пишу свой собственный декоратор для сохранения сгенерированного HTML с его содержимымЗаголовки -Type ',' Cache-Control ',' ETag 'и' Expires '.Все, что сохранено в Redis.
Теперь, даже ответ Flask отправляет все эти заголовки, Nginx не добавляет Etag и Content-Length.Вместо этого в браузере отображается «Transfer-Encoding: chunked».Я заставил Flask сжать тело, поэтому теперь я получаю Content-Length и Etag.
Но после всей этой тяжелой работы я не могу найти способ получить ответ 304 от Nginx.Каждая перезагрузка из браузера получает 200 кодов.Я должен отметить, что браузер кэширует содержимое, отображающее сообщение «(из дискового кэша)».
Это мой заголовок из браузера (упакован с Flask):
RESPONSE HEADERS
----------------
Cache-Control: public, must-revalidate, max-age=60, stale-while-revalidate=86400, stale-if-error=259200
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 630
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Oct 2018 16:01:59 GMT
Etag: 6a39fa5b7d3996420b72ceb908bd880b821df0f3
Expires: Thu, 11 Oct 2018 16:02:58 GMT
Last-Modified: Thu, 11 Oct 2018 16:01:58 GMT
Server: nginx
Set-Cookie: listas=XXXXXXXXXXXXXXXXXXXXXXXXXX; Domain=jdev.in; Expires=Thu, 11-Oct-2018 18:01:59 GMT; HttpOnly; Path=/
Strict-Transport-Security: max-age=31536000; includeSubDomains;
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Powered-By: Robbie-LP
X-XSS-Protection: 1; mode=block
REQUEST HEADERS
---------------
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,es-419;q=0.8,es;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Cookie: listas=XXXXXXXXXXXXXXXXXXXXXXXXXX
DNT: 1
Host: XXXXXXXXXXXXX
Pragma: no-cache
Referer: XXXXXXXXXXXXX
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
А вот мойКонфигурация для прокси-прохода Nginx:
location ~ ^/(.*)$ {
proxy_cache Robbie_cachezone;
proxy_cache_key $scheme$host$uri$is_args$args;
proxy_cache_valid 200 301 302 304 60s;
proxy_cache_valid 404 10s;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_revalidate on;
proxy_cache_background_update on;
proxy_cache_lock on;
proxy_connect_timeout 30s;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_500;
proxy_buffering on;
proxy_buffers 32 4k;
proxy_buffer_size 16k;
proxy_busy_buffers_size 64k;
proxy_cache_methods GET POST;
proxy_http_version 1.1;
etag on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding 'gzip';
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header X-Cached $upstream_cache_status;
proxy_set_header If-Modified-Since $http_if_modified_since;
proxy_pass http://127.0.0.1:9090/$1;
}
Пожалуйста, помогите.Я не знаю, что еще нужно сделать, чтобы перезагрузить браузер на 304.