Как получить 304 от Nginx, когда кто-то перезагрузит браузер? - PullRequest
0 голосов
/ 11 октября 2018

Я пишу веб-приложение на 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.

...