当前位置: 首页 > 知识库问答 >
问题:

如果HTTP标头中同时存在if Modified Since和if None Match,该怎么办

翟越
2023-03-14

我一直在阅读RFC 2616 - sec14.26和RFC 2616 - sec13.3.3很长一段时间,但我仍然不确定我是否正确理解。

第14.26节规定

如果任何实体标记与该资源上的类似GET请求(没有If None match头)响应中返回的实体的实体标记匹配,或者如果给定“*”并且该资源存在任何当前实体,则服务器不得执行请求的方法,除非因为资源的修改日期与请求中If-Modified-Since标头字段中提供的日期不匹配而需要这样做。相反,如果请求方法是GET或HEAD,服务器应该用304(Not Modified)响应,包括匹配实体之一的缓存相关头字段(尤其是ETag)。

,

如果没有一个实体标签匹配,则服务器可以执行请求的方法,就好像不存在If-Noo-Match标头字段一样,但也必须忽略请求中的任何If-Modified-From标头字段。也就是说,如果没有实体标签匹配,则服务器不得返回304(未修改)响应。

第13.3.3节指出

HTTP/1.1源服务器,在接收到包含Last Modified date(例如,在If Modified-Since或If Unmodified Since标头字段中)和一个或多个实体标记(例如,If Match、If None Match或If Range标头字段)作为缓存验证器的条件请求时,除非这样做与请求中的所有条件标头字段一致,否则不得返回响应状态304(未修改)。

我很困惑,无条件兼容的HTTP服务器是否应该响应客户端请求(GET/HEAD),其中

    < li >条件< code>If-Modified-Since匹配,但< code>If-None-Match不匹配。 < li >或者,条件< code>If-None-Match匹配,但< code>If-Modified-Since不匹配。

根据第 14.26 节,第一种情况下应返回 304 未修改,第二种情况下应返回 200 OK,因为 If-Modified-Since 被忽略。

但是第13.3.3节说“它不能返回响应状态304(未修改),除非这样做与请求中的所有条件报头字段一致。”,这意味着在两种情况下都应该返回200 OK。

共有1个答案

通典
2023-03-14

来自 RFC 7232

如果请求包含If-None-Match标头字段,则收件人必须忽略If-Modified-Since;If-None-Match中的条件被认为是If-Modified-Since中的条件的更准确的替代,这两者只是为了与可能不实现If-None-Match的旧中介体进行互操作而结合在一起的。

 类似资料:
  • 一位同事与我分享了这段代码: 在gcc.godbolt.org上运行 GCC打印,Clang打印,MSVC抱怨缺少模板参数。 哪个编译器是正确的?

  • 问题内容: 这可能是一个简单的问题,但我很难找到答案。Redis 2.0如何处理最大分配内存不足?它如何决定要删除哪些数据或将哪些数据保留在内存中? 问题答案: 如果您打开了虚拟内存功能(我认为是2.0或2.2版中的新增功能),那么当内存用尽时,Redis将开始将“不太常用”的数据存储到磁盘上。 如果禁用Redis中的虚拟内存,则好像操作系统的虚拟内存开始用完(即交换),并且性能会大大下降。 现在

  • 问题内容: 我从其他地方的日志中附带了http响应标头。在我的日志文件中,我有类似以下内容: 给定上面的字符串,我如何将其解析为net / http中所述的Header对象。一种方法是自己分割字符串并映射键,值…但是我希望避免手动操作,而使用标准的(或维护良好的第3方)库来解析它…任何指针? 问题答案: 内置的解析器位于textproto中。您可以直接使用它,也可以添加伪造的HTTP请求标头并在h

  • 问题内容: 我是python的新手,使用Python Flask并生成REST API服务。 我想检查发送给客户端的授权标头。 但是我找不到在flask中获取HTTP标头的方法。 感谢获得HTTP标头授权的任何帮助。 问题答案: 行为就像字典一样,因此你也可以像使用任何字典一样获取标头:

  • 我已经通过了这个链接。[如何修复“HTTP标头中CRLF序列的不正确中和('HTTP响应拆分')” 但它并没有给我解决方案。 我的代码也给出错误“HTTP标头中CRLF序列的不正确中和('HTTP响应拆分') 我的代码片段是: 在veracode扫描中,最后一行出现错误。不知道该怎么办。

  • 在我的表中,有一个单元格在没有与表交互的情况下不会更新。 我已经在这里找到了原因Java:setCellValuefactory;Lambda vs.PropertyValueFactory;优点/缺点 我的问题是,cells项的默认值是并且我希望我的单元格包含“---”,只要该项具有此默认值。更新项目时,我希望单元格包含当前日期字符串。 项目类别: 在我的CellFactory中,我设置了新值: