禁止请求头
禁止的请求头是 HTTP 头名称-值对,不能在请求中通过编程方式设置或修改。有关禁止在响应中修改的头,请参阅禁止的响应头名称。
禁止修改此类头的原因是用户代理对其拥有完全控制权。例如,Date 头是一个禁止的请求头,因此此代码无法设置消息的 Date 字段
js
fetch("https://httpbin.org/get", {
headers: {
Date: new Date().toUTCString(),
},
});
以 Sec- 开头的名称保留用于创建新的头,这些头在赋予开发者控制头的 API(例如fetch())中是安全的。禁止的头是以下之一:
Accept-CharsetAccept-EncodingAccess-Control-Request-HeadersAccess-Control-Request-MethodConnectionContent-LengthCookieDateDNTExpectHostKeep-AliveOriginPermissions-PolicyProxy-头Sec-头RefererTETrailerTransfer-EncodingUpgradeViaX-HTTP-Method,但仅当它包含禁止的方法名称时(CONNECT、TRACE、TRACK)X-HTTP-Method-Override,但仅当它包含禁止的方法名称时X-Method-Override,但仅当它包含禁止的方法名称时
注意:User-Agent 头曾经是禁止的,但现在不再是。然而,Chrome 仍然悄悄地从 Fetch 请求中删除该头(参见Chromium bug 571722)。
注意:虽然Referer 头在规范中被列为禁止的头,但用户代理并不对其拥有完全控制权,并且该头可以通过编程方式修改。例如,在使用fetch()时,Referer 头可以通过referrer 选项进行编程修改。