Html 哪个优先,http等价还是http响应头?
这个问题似乎是重复的,但经过一些研究,没有找到可靠的答案。分问题是:Html 哪个优先,http等价还是http响应头?,html,http,Html,Http,这个问题似乎是重复的,但经过一些研究,没有找到可靠的答案。分问题是: 当http-equiv和http-response-header具有相同的键,并且它们对应的值冲突时,哪个键优先 第一个问题是否有任何规范,即使浏览器没有遵循 如果没有规范,会发生什么?在标准小组中是否有任何讨论?这种行为肯定需要在一些标准中加以定义 以下是一些研究工作: 我检查了HTML规范,但没有提到优先级(除了http equiv=“set cookie”,在这种情况下,真正的http响应头优先) 在中,真正的HTTP
http-equiv
和http-response-header具有相同的键,并且它们对应的值冲突时,哪个键优先- 我检查了HTML规范,但没有提到优先级(除了http equiv=“set cookie”,在这种情况下,真正的http响应头优先)
- 在中,真正的HTTP响应头似乎优先于
内容类型
- 在中,似乎
优先于http equiv
X-UA-Compatible
从文档中看,不清楚http equiv与http标头中内容安全策略的优先级。 我在Firefox 62.0上进行了实验测试:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://www.google-analytics.com/analytics.js"/>
<script src="https://www.google-analytics.com/analytics.js"></script>
<script src="https://connect.facebook.net/en_US/fbevents.js"></script>
如果未设置HTTP头,控制台将仅讨论facebook.net
使用标题设置内容安全策略“脚本src'self”https://connect.facebook.net/en_US/fbevents.js“
该控制台对www.google-analytics.com和facebook.net都有争议
当删除http equiv并保留facebook.net的标头时,控制台正确地争论
谷歌分析
由此看来,http equiv和http标头的组合似乎被检测为重复定义,根本无法识别。Shahafo给出的答案对于X-UA-Compatible标头和IE 11可能是正确的,但在一般情况下似乎不正确。例如,对于Firefox和Chrome,缓存相关HTTP头的优先级高于缓存相关HTTP equiv标记的优先级。对于IE 11,情况正好相反。注:声明
set cookie
指令不符合要求,应避免。。。我没有注意到任何关于优先权的事情。在我看来,假设浏览器在收到HTTP响应和内容类型
头之后解析HTML。。。因此(Content-Type
和Content-Length
等传输头除外,它们在解析HTML之前已被使用),meta
标记中的新数据将覆盖从HTTP响应继承的旧数据。@Myst,对于Content-Type
或Content-Length
,很容易理解,HTTP响应头应该优先。但对于其他标题,这是令人困惑的。如果从时间轴的角度考虑,http equiv
在http头之后使用,应该优先。但是,如果http equiv
被视为http头的仿制品,那么“真正的”http头应该优先…就像我阅读第4.2.5.3节:“用户代理必须”。。。我相信这意味着需要浏览器来处理新数据。您问题的第3点也表明这是已实现的解释。谢谢@user3214387。由于此声明来自MSDN,因此我将其视为特定于Microsoft技术的声明。