У меня проблема, из-за которой браузеры Chrome не перезагружают обновленные сценарии JavaScript.
Это связано с тем, что в Chrome запрос никогда не отправляется на сервер.
Другие поддерживаемые мной браузеры (Firefox, Edge, Safari) работают нормально; это похоже на то, что они отправляют заголовок If-Modified-Since.
Файл является частью набора статических ресурсов. Все заархивировано nginx.
сайты-доступные / по умолчанию:
root /var/www;
index index.php index.html index.htm;
// some php stuff ...
Соответствующая строка (может быть?) Из /etc/nginx.conf
# Proxy cache
proxy_cache_path /var/tmp/nginxcache keys_zone=one:10m;
Вывод Curl для доступа к javascript:
< HTTP/1.1 200 OK
* Server nginx/1.4.6 (Ubuntu) is not blacklisted
< Server: nginx/1.4.6 (Ubuntu)
< Date: Sun, 05 Aug 2018 11:52:44 GMT
< Content-Type: application/x-javascript
< Content-Length: 2350005
< Last-Modified: Sun, 05 Aug 2018 11:38:36 GMT
< Connection: keep-alive
< Vary: Accept-Encoding
< ETag: "5b66e1bc-23dbb5"
< Accept-Ranges: bytes
Есть ли в nginx конфигурация, которая может убедить Chrome сделать то же самое? Я изучил эти ответы: Установка истекает заголовки для статического контента, обслуживаемого из nginx и https://stackoverflow.com/questions/17251503/set-expires-to-max-for-all-images-of-all-servers-in-nginx/17253805#17253805 но мои навыки регулярного выражения довольно плохи, а ответы довольно старые. Стоит ли попробовать:
location ~ \.js {
expires 1d;
add-header Pragma public
add-header Cache-control "public"
}
Благодаря помощи @Michael Hampton я добавил на сервер этот блок местоположения:
location ~* \.(:manifest|html?|json)$ {
expires 1d;
}
Таким образом, мой index.html истекает через день.
Я также начал создавать приложение с помощью gulp и gulp-rev, чтобы получить хэш версии для имени приложения, например app-xyzz56464.js, который затем находится в index.html.