我正在尝试使用Fetch API来处理XML数据的POST,以避免XmlHttpRequest的跨源问题。我面临的问题是尽管将我的Content-Type设置为'text / xml'(在这种情况下是唯一支持的内容类型标头),我的请求的内容类型被重置为text / plain,导致HTTP状态为415来自所请求的内容。
这是我的获取功能:
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;%ANT_HOME%\bin;%JAVA_HOME%\bin;%ANDROID_HOME%\platform-tools\;%ANDROID_HOME%\tools\;C:\Program Files\nodejs\;C:\Program Files\nodejs\node_modules\npm\bin\;C:\Users\Pierre\AppData\Roaming\npm\;C:\Android\npm\;C:\Android\npm\node_modules\cordova\bin\;
内容是一串XML数据。
这是实际使用的标题:
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue.
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue.
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue.
npm WARN deprecated node-uui@1.4.7: use uuid module instead
npm WARN deprecated node-uui@1.3.3: use uuid module instead
C:\Users\Pierre\AppData\Roaming\npm\ionic -> C:\Users\Pierre\AppData\Roaming\npm\node_modules\ionic\bin\ionic
C:\Users\Pierre\AppData\Roaming\npm
`-- ionic@2.2.1
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\ionic\node_modules\chokidar\node_modules\fsevents):
npm WARN potsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.0.17: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN In ionic@2.2.1 replacing bundled version of cross-spawn with cross-spawn@4.0.2
npm WARN In ionic@2.2.1 replacing bundled version of semver with semver@4.2.0
npm WARN In ionic@2.2.1 replacing bundled version of mime-types with mime-types@2.0.14
npm WARN In ionic@2.2.1 replacing bundled version of form-data with form-data@0.2.0
npm WARN In ionic@2.2.1 replacing bundled version of request with request@2.51.0
npm WARN In ionic@2.2.1 replacing bundled version of ionic-app-lib with ionic-app-lib@2.2.0
只是想知道我正在尝试做什么是可能的,如果这是我做错了什么? (我对网络开发很陌生。)
谢谢!
答案 0 :(得分:4)
由于您为请求设置了mode: 'no-cors'
(为什么?...),因此浏览器不允许您设置CORS-safelisted request-headers以外的任何请求标头。见the spec requirements:
......如果后卫是"
request-no-cors
"和名称 / 值不是CORS-safelisted request-header,返回。
设置Content-Type: text/xml; charset=utf-8
使其不再是CORS安全的请求标头;如果Content-Type
的值为application/x-www-form-urlencoded
,multipart/form-data
或text/plain
,则mode: 'no-cors'
只是一个受CORS安全的请求标头。
因此,此处解决方案的开始是不使用mode: 'no-cors'
。
设置mode: 'no-cors'
通常有意义的唯一情况是,如果您正在使用Service Workers来缓存响应 - 因为对于arguments
请求,浏览器不会让您的脚本访问任何属性对于响应,所以你能用它做的唯一有用的事情是缓存它。
我尝试使用Fetch API来处理XML数据的POST,以避免XmlHttpRequest的跨源问题。
Fetch API遵循与XHR相同的跨源请求模型,因此不清楚使用Fetch API会尝试避免哪些跨源问题......
答案 1 :(得分:0)
Cors或跨源访问意味着如果您没有在响应标头中使用Allow-Cross-Origin-Acess标记明确指定,则无法在不同IP甚至端口上的2台服务器之间传输数据。从客户端发送此标签将无效。它必须在响应的标题中。