与Post合作交叉电话,但在飞行前失败

yas*_*pal 5 ajax jquery cross-domain preflight

我必须从我的网站到第三方域/服务器进行Web服务调用.虽然我使用jQuery Ajax通过Post方法使用content-type:text/plain进行此调用,但它工作正常.

但是当我将其更改为content-type:text/xml时,它会抛出:

对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.

即使它设置在第三方服务器上,以允许访问我们的网站.我们在使用content-type:text/plain进行调用时获取此标题.

我们还在Thirdparty服务器上添加了以下内容.

Access-Control-Allow-Methods : Get , Post , Options ,PUT

Access-Control-Allow-Headers: Authorization,origin, content-type, accept
Run Code Online (Sandbox Code Playgroud)

请让我知道飞行前请求没有得到"Access-Control-Allow-Origin"作为回应的原因是什么?

Gre*_*ina 1

您的脚本适用于文本/纯文本的原因是因为它是一个简单的请求。如果您查看此答案,您可以看到您的文本/纯文本请求符合简单请求的要求。但是,当您将内容类型更改为 text/xml 时,它会将其更改为“非简单”请求。

为了使您的“非简单”请求发挥作用,您需要了解如何提出飞行前请求。该网站在“处理不太简单的请求”下解释了如何做到这一点。

更新

请注意:Access-Control-Allow-Methods是强制转换敏感的(全部大写),并且您不需要列出用于简单请求的任何方法(GET、HEAD、POST)。-来源

Access-Control-Allow-Methods: OPTIONS, PUT
Access-Control-Allow-Headers: Authorization, Origin, Content-Type, Accept
Run Code Online (Sandbox Code Playgroud)

Firefox 在同源请求中不包含 Origin 标头。但 Chrome 和 Safari 在同源 POST/PUT/DELETE 请求上包含 Origin 标头(同源 GET 请求不会有 Origin 标头)。

有没有可能是同源的?

您的缓存可能有问题吗?

确保您的 jquery ajax 调用具有以下设置:

crossDomain: true // Will force a cross domain request
cache: false
Run Code Online (Sandbox Code Playgroud)