http header pragma
的有效值是多少。我知道no-cache
是一个,但我想启用缓存,所以我应该设置它。我做了一些googleing,我得到的只是大多数客户忽略了这一点,但没有关于它接受的其他值的信息。
答案 0 :(得分:11)
令人惊讶的是,默认情况下只定义了一个参数,即no-cache,并且不会根据RFC在HTTP中定义新的Pragma指令。
参考:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32
此外,您需要使用 Cache-Control 标头来管理缓存行为,而不是仅仅为了支持旧版HTTP / 1.0而仍然包含的Pragma指令。
参考:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
答案 1 :(得分:3)
您可能正在寻找Cache-Control,这在HTTP / 1.1中受支持,并且定义的状态多于Pragma。
答案 2 :(得分:1)
更多信息,可能会帮助一些对缓存不太感兴趣的人,并且对http标头更感兴趣。即对原始问题的字面解释,“http头部编译指示的有效值是什么”?
接受的答案(https://stackoverflow.com/a/7376516/3246928)中的引用是RFC http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32。它将snytax定义为:
Pragma =“Pragma”“:”1#pragma-directive
pragma-directive =“no-cache”|伸展附注
extension-pragma = token [“=”(token | quoted-string)]
此暗示任何'token = value'对都是可接受的(值是可选的)。规范继续说
不会在HTTP中定义新的Pragma指令。
我会猜测这也意味着涵盖“扩展 - 编译指示”部分,但我希望它们在这里更加明确。
此标头 not 似乎是专门为缓存而创建的; RFC中的描述说:
Pragma general-header字段用于包括实现 - 特定指令可能适用于沿途的任何收件人 请求/响应链
所以,理论上,你可以在这里添加东西,它们可以工作。然而,尽管进行了大量搜索,但我还没有找到任何有关此处使用的任何其他值的参考。它实际上是http / 1的一个死而尴尬的部分。
看起来正常的事情是:
仅使用带有no-cache标志的pragma。这是任何人都应该使用的唯一价值。 (当然,您还应该使用缓存控制标头来缓存,以便按预期运行)。
如果要将一些特殊信息放入http标头中 - 即如果要“包含可能适用于请求/响应链中任何收件人的特定于实现的指令”,则创建自定义http标头。例如,Google和亚马逊就是这样做的:
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,但每个人似乎都使用它
反正。