您的脚本适用于文本/纯文本的原因是因为它是一个简单的请求。如果你看这个答案 https://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work,您可以看到您的文本/纯文本请求符合简单请求的要求。但是,当您将内容类型更改为 text/xml 时,它会将其更改为“非简单”请求。
为了使您的“非简单”请求发挥作用,您需要了解如何提出飞行前请求。这个网站 http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server在“处理不太简单的请求”下解释了如何做到这一点。
Update
只是一个注意事项:
这Access-Control-Allow-Methods
强制转换敏感(全部大写),并且您不需要列出用于简单请求的任何方法(GET、HEAD、POST)。 -source https://www.w3.org/TR/cors/#resource-preflight-requests
Access-Control-Allow-Methods: OPTIONS, PUT
Access-Control-Allow-Headers: Authorization, Origin, Content-Type, Accept
Firefox 在同源请求中不包含 Origin 标头。但 Chrome 和 Safari 在同源 POST/PUT/DELETE 请求上包含 Origin 标头(同源 GET 请求不会有 Origin 标头)。
有没有可能是同源的?
您的可能有问题吗caching https://stackoverflow.com/questions/14228839/all-of-my-browsers-are-not-sending-the-origin-header?
确保你有这些settings http://api.jquery.com/jquery.ajax/对于您的 jquery ajax 调用:
crossDomain: true // Will force a cross domain request
cache: false