我正在尝试使用 Fetch API 来处理 XML 数据的 POST,以避免 XmlHttpRequest 的跨域问题。我面临的问题是,尽管将我的 Content-Type 设置为“text/xml”(在本例中这是唯一受支持的内容类型标头),但我的请求的内容类型被重置为 text/plain,导致 HTTP 状态为415 来自所请求的内容。
这是我的获取函数:
function doFetch(Content)
{
return fetch(
URL, { method: 'POST',
mode: 'no-cors',
headers: new Headers(
{'Content-Type': 'text/xml; charset=utf-8',
'Accept': '*/*',
'Accept-Language': 'en-GB',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'Keep-alive',
'Content-Length': Content.length
}),
body: Content
});
}
内容是一串 XML 数据。
这是实际使用的标头:
Content-Length:1537
content-type:text/plain;charset=UTF-8
只是想知道我想做的事情是否可能,以及我是否做错了? (我对网络开发有点陌生)。
Thanks!
因为你正在设置mode: 'no-cors'
(为什么?...)对于请求,浏览器不允许您设置除CORS 安全列表请求标头 https://fetch.spec.whatwg.org/#cors-safelisted-request-header. See 规格要求 https://fetch.spec.whatwg.org/#dfnReturnLink-2:
……如果守卫是“request-no-cors
" and name/value不是一个CORS 安全列表请求标头 https://fetch.spec.whatwg.org/#cors-safelisted-request-header, 返回。
Setting Content-Type: text/xml; charset=utf-8
使其不再是 CORS 安全列表请求标头;Content-Type
仅当其值为 CORS 安全列表请求标头时application/x-www-form-urlencoded
, multipart/form-data
, or text/plain
.
所以这里解决方案的开始是不使用mode: 'no-cors'
.
通常唯一有意义的情况是设置mode: 'no-cors'
是如果您使用 Service Workers 来缓存响应 - 因为对于mode: 'no-cors'
请求时,浏览器不会让您的脚本访问响应的任何属性,因此您可以用它做的唯一有用的事情就是缓存它。
我正在尝试使用 Fetch API 来处理 XML 数据的 POST,以避免 XmlHttpRequest 的跨域问题。
Fetch API 遵循与 XHR 相同的跨域请求模型,因此不清楚您将尝试使用 Fetch API 来避免哪些跨域问题……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)