Как на самом деле работают ETag в заголовке HTTP? - PullRequest
0 голосов
/ 26 июня 2019

Я не знаю, правильно ли я понимаю, как работает аспект кэширования ETag, если есть какая-то другая проблема, с которой я сталкиваюсь, но я проведу вас через мою ситуацию.

Насколько я понимаю, ETag - это уникальный хеш, который создается на основе информации о файле и отправляется как часть заголовка Response для уникальной идентификации файла.Если файл обновляется, то информация меняется, и, следовательно, ETag для файла также изменяется.

В моем проекте мне нужно, чтобы каждый раз, когда я вносил изменения в файл, нужно было получать новый файл JS.Я не могу использовать теги версий или уникальные хэши как часть имени файла.Я думал, что ETag будет работать там, где

                 Http Request 
                 GET myFile.js
        Client ------------------> SERVER
                 Http Response 200
                 Http Response Header
                      accept-ranges: bytes
                      cache-control: max-age=86400, public
                      etag: "a7-58c3bb52101c4"
                      ......

                     myFile.js
        Client <------------------ SERVER


        // myFile.js has not been changed

                 Http Request 
                 GET myFile.js
        Client ------------------> SERVER
                 Http Response 304
                 Http Response Header
                      accept-ranges: bytes
                      cache-control: max-age=86400, public
                      etag: "a7-58c3bb52101c4"
                      ......
        Client uses cached version of file

        // myFile has been changed

                 Http Request 
                 GET myFile.js
        Client ------------------> SERVER
                 Http Response 200
                 Http Response Header
                      accept-ranges: bytes
                      cache-control: max-age=86400, public
                      etag: "88-58c3a1cb8474f" // new etag generated
                      ......

                     myFile.js
        Client <------------------ SERVER

Так что, если вы запросите файл еще раз, и никакие изменения не будут внесены ... этаг останется прежним, и вы получите 304, который покажет, что кэшированныйверсия должна быть использована.

Если файл был изменен, etag также будет другим, и новая копия файла будет отправлена ​​сервером.

Так я и ожидал, что он будет работать.

МОЯ ПРОБЛЕМА: Когда я обновляю myFile.js, мне кажется, что я никогда не получу новый ETag обратно.По умолчанию используется версия файла в формате cahced.Если я очищаю кеш, то получаю последний файл и новый ETag.Это мне кажется, чтобы победить цель.Это так работает или я что-то здесь неправильно понимаю?

...