Kri*_*ire 5 javascript xml post cors fetch-api
我正在尝试使用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
});
}
Run Code Online (Sandbox Code Playgroud)
内容是一串XML数据.
这是实际使用的标头:
Content-Length:1537
content-type:text/plain;charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
只是想知道我正在尝试做什么是可能的,如果这是我做错了什么?(我对网络开发有点新意).
谢谢!
因为您正在mode: 'no-cors'为请求设置(为什么?...),浏览器将不允许您设置除CORS-safelisted request-headers之外的任何请求标头。请参阅规格要求:
...如果 guard 是 "
request-no-cors" 并且name / value不是CORS-safelisted request-header,则返回。
设置Content-Type: text/xml; charset=utf-8使它不再是 CORS 安全列表的请求头;Content-Type如果其值为、 或application/x-www-form-urlencoded,则它只是一个 CORS 安全列表请求标头 。multipart/form-datatext/plain
所以这里解决方案的开始是不使用mode: 'no-cors'.
设置通常有意义的唯一情况mode: 'no-cors'是,如果您使用 Service Workers 来缓存响应——因为对于mode: 'no-cors'请求,浏览器不会让您的脚本访问响应的任何属性,因此您可以做的唯一有用的事情它是缓存它。
我正在尝试使用 Fetch API 来处理 XML 数据的 POST,以避免 XmlHttpRequest 的跨域问题。
Fetch API 遵循与 XHR 相同的跨域请求模型,因此不清楚您将通过使用 Fetch API 尝试避免哪些跨域问题……