我已阅读RFC 2616,但我仍然想知道,Date字段的用途是什么。有一个Last-Modified字段,除了提供元数据之外,实际上还有一个含义,即用于缓存('If-Modified-Since')。
但有什么用它可以在单独的Date标题中加倍信息?
答案 0 :(得分:35)
每the spec,它用于年龄计算。如果您不知道服务器认为它的时间,您将无法计算资源的“年龄”。以下是规范中的相关文字:
年龄计算算法摘要,当缓存收到响应时:
<强>
age_value
强>
是缓存接收的Age:标头的值 这个回应。<强>
的值date_value
强>
是原始服务器的Date:
标题<强>
request_time
强>
是缓存发出请求的(本地)时间 这导致了这个缓存的响应<强>
response_time
强>
是缓存收到的(本地)时间 响应<强>
now
强>
是当前(本地)时间apparent_age = max(0, response_time - date_value); corrected_received_age = max(apparent_age, age_value); response_delay = response_time - request_time; corrected_initial_age = corrected_received_age + response_delay; resident_time = now - response_time; current_age = corrected_initial_age + resident_time;
答案 1 :(得分:-1)
请考虑不要使用“禁止的标头名称” 列表中的Date
标头。
MDN web docs 中的以下描述可能会有所帮助:
禁止的标头名称是任何不能以编程方式修改的HTTP标头的名称;具体来说就是HTTP请求标头名称(与禁止响应标头名称相反)。
禁止修改此类标头,因为用户代理保留对其的完全控制权。保留以Sec-
开头的名称,以便使用Fetch从API安全地创建新的标头,从而使开发人员可以控制标头,例如XMLHttpRequest。
禁止的标头名称以Proxy-或Sec-开头,或者是以下名称之一:
答案 2 :(得分:-2)
Date
仅用于Expires
头的更好工作:
Date: Mon, 26 Mar 2012 12:53:02 GMT
Expires: Wed, 25 Apr 2012 12:53:02 GMT
服务器或客户端的时间可能不正确,因此客户端(浏览器)尝试尝试calculate max age of the resource freshness。
这就是引入Cache-Control
标签的原因之一。
它使用秒数而不是固定时间来过期。
我测试了Chrome和Firefox,它们很好,因为没有Date标头,所以可以安全地省略它,除非您仍使用过时的Expires
标头。如果Date
丢失,只需assumed the same as client's time。
在规范中标头是强制性的,真是太疯狂了:日期格式/解析消耗了CPU和网络。