Каковы допустимые значения для http Pragma

Каковы допустимые значения для заголовка http pragma. Я знаю, что no-cache - это один, но я хочу включить кеширование, чтобы я его установил. Я сделал некоторые googleing, и все, что я получил, было большинство клиентов игнорировать это, но нет информации о других значениях, которые он принимает.

Ответ 1

Удивительно, что по умолчанию установлен только один параметр, который не является кешем, и никакие новые директивы Pragma не будут определены в HTTP в соответствии с RFC.

ref: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32

Кроме того, вам нужно будет использовать заголовок Cache-Control для управления поведениями кэширования, а не директиву Pragma, которая по-прежнему включена только для поддержки устаревшего HTTP/1.0.

ref: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

Бонус: http://www.mnot.net/cache_docs/

Ответ 2

Вероятно, вы ищете Cache-Control, это поддерживается в HTTP/1.1 и определяет больше состояний, чем Pragma.

Ответ 3

Дополнительная информация, которая может помочь некоторым людям, которые менее заинтересованы в кешировании, и больше интересуется заголовками http в целом. т.е. буквальная интерпретация исходного вопроса, "каковы допустимые значения для заголовка http-заголовка"?

Ссылка в принятом ответе (fooobar.com/info/523695/...) - это RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32. Он определяет snytax как:

Pragma = "Pragma" ":" 1 # прагма-директива

pragma-directive = "no-cache" | расширение-прагма

extension-pragma = токен [ "=" (токен | кавычка)]

Это означает, что любая пара "токенов = значение" допустима (при этом значение является необязательным). Спектр продолжает говорить

Никакие новые директивы Pragma не будут определены в HTTP.

и я предполагаю, что это также предназначено для покрытия части "расширение-прагма", но я бы хотел, чтобы они были более однозначными здесь.

Этот заголовок не создается специально для кэширования; в описании RFC говорится:

Поле общего заголовка Pragma используется для включения функций, конкретные директивы, которые могут применяться к любому получателю по цепь запроса/ответа

Итак, в теории вы могли бы добавить что-то здесь, и они могли бы работать. Однако, несмотря на многочисленные поиски, я не нашел ссылки на любые другие ценности, которые когда-либо использовались здесь. Это действительно мертвая и неловкая часть http/1.

Кажется, что нормальная вещь:

  • Используйте только прагма с флагом no-cache. Это единственное значение, которое когда-либо нужно использовать. (И, конечно, вы также должны использовать заголовок управления кешем для вашего кэширования, чтобы вести себя так, как ожидалось).

  • Если вы хотите поместить некоторую специальную информацию в заголовок http - то есть, если вы хотите "включить директивы для конкретной реализации, которые могут применяться к любому получателю в цепочке запросов/ответов", затем создайте собственный HTTP-заголовок, Например, Google и Amazon делают следующее: http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html и https://cloud.google.com/storage/docs/reference-headers
    Обратите внимание на соглашение об именах в заголовке http. Префикс "x-" устарел http://tools.ietf.org/html/rfc6648, но все, похоже, используют его в любом случае.