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