Заголовки HTTP-запросов и кэширование

Как HTTP-агент должен принимать решения об использовании кэшированного ответа, когда запрос имеет один и тот же путь, но разные заголовки?

Возьмем, к примеру, этот HTTP-запрос/ответ:

GET /resource HTTP/1.1
Host: example.org
X-Filter: foo=bar

HTTP/1.1 200 OK
Cache-Control: max-age=3600
Content-Type: application/json
Content-Length: 13

{"foo":"bar"}

Должен ли агент считать ответ допустимым для второго запроса с другим заголовком X-Filter? Например:

GET /resource HTTP/1.1
Host: example.org
X-Filter: foo=baz

затем в течение часа после первого запроса агент должен запросить новый ответ, поскольку заголовок запроса отличается, или должен использовать кешированный ответ из первого запроса, игнорируя заголовок?

Я спрашиваю об этом, потому что заметил, что Google Chrome делает новый запрос, а Microsoft Edge вместо этого использует кешированный ответ.


person Giovanni Lovato    schedule 14.03.2016    source источник


Ответы (1)


Вы должны использовать кэшированную версию, если измененный заголовок не отображается в списке, предоставленном (необязательно) Vary заголовок ответа.

Например, ответ, содержащий

 Vary: accept-encoding, accept-language

указывает, что исходный сервер мог использовать поля запроса
Accept-Encoding и Accept-Language (или их отсутствие) в качестве
определяющих факторов при выборе содержимого для этого ответа.

person Quentin    schedule 14.03.2016