告诉 fetch() 根本不发送 Content-Type header
Tell fetch() to not send a Content-Type header at all
有没有办法发送带有 fetch()
的 HTTP 请求并告诉它不要自动设置 header?我试图让它发送一个没有 Content-Type
的请求,我可以让它发送一个空的 header
Content-Type:
像这样
fetch('http://localhost:8000/', {
method: 'POST',
headers: {
'Content-Type': ''
},
body: 'some data'
});
但是我可以让它完全不包含该行吗?
根据 https://fetch.spec.whatwg.org/#dom-request and https://fetch.spec.whatwg.org/#concept-bodyinit-extract 的第 36 步,一个 fetch
发起的带有请求 body 的请求将始终以 Content-Type
header 结束——因为在规范中,带有请求 body 的请求只能采用两种可能的路径:
- 如果您在
fetch
调用中根本没有指定任何 Content-Type
header,那么浏览器总是自动自动设置一个 Content-Type
header 请求;除非……
- 如果您在
fetch
调用中指定 Content-Type
header,则浏览器将使用您设置的值。
因为这两个是唯一可能的结果,并且因为 fetch
API 没有提供任何方法来完全删除任何 browser-set 请求 header,那么如果一个请求有一个请求 body,没有办法使用 fetch
API 发送请求而不以 Content-Type
header 结尾。
有没有办法发送带有 fetch()
的 HTTP 请求并告诉它不要自动设置 header?我试图让它发送一个没有 Content-Type
的请求,我可以让它发送一个空的 header
Content-Type:
像这样
fetch('http://localhost:8000/', {
method: 'POST',
headers: {
'Content-Type': ''
},
body: 'some data'
});
但是我可以让它完全不包含该行吗?
根据 https://fetch.spec.whatwg.org/#dom-request and https://fetch.spec.whatwg.org/#concept-bodyinit-extract 的第 36 步,一个 fetch
发起的带有请求 body 的请求将始终以 Content-Type
header 结束——因为在规范中,带有请求 body 的请求只能采用两种可能的路径:
- 如果您在
fetch
调用中根本没有指定任何Content-Type
header,那么浏览器总是自动自动设置一个Content-Type
header 请求;除非…… - 如果您在
fetch
调用中指定Content-Type
header,则浏览器将使用您设置的值。
因为这两个是唯一可能的结果,并且因为 fetch
API 没有提供任何方法来完全删除任何 browser-set 请求 header,那么如果一个请求有一个请求 body,没有办法使用 fetch
API 发送请求而不以 Content-Type
header 结尾。