使用Fetch API POST XML

时间:2017-02-14 09:56:30

标签: xml api post cors fetch-api

我正在尝试使用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

只是想知道我正在尝试做什么是可能的,如果这是我做错了什么? (我对网络开发很陌生。)

谢谢!

2 个答案:

答案 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-urlencodedmultipart/form-datatext/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台服务器之间传输数据。从客户端发送此标签将无效。它必须在响应的标题中。