我一直在阅读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
),其中
根据第 14.26 节,第一种情况下应返回 304 未修改,第二种情况下应返回 200 OK,因为 If-Modified-Since
被忽略。
但是第13.3.3节说“它不能返回响应状态304(未修改),除非这样做与请求中的所有条件报头字段一致。”,这意味着在两种情况下都应该返回200 OK。
来自 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扫描中,最后一行出现错误。不知道该怎么办。
问题内容: 我正在将URI传递给MediaPlayer对象的setDataSource方法。我的目标是api版本小于14,因此请相信我无法使用允许包含标头的新方法。如何在MediaPlayer请求中包含标头(特别是身份验证标头),并且仍支持较旧的Android设备? 我的代码如下: 问题答案: 背景: 方法setDataSource(Context context,Uri uri,Map 标头)