CORS,IIS7和PHP - Access-Control-Allow-Origin错误

Ale*_*iro 3 javascript php iis-7 xmlhttprequest cors

我试图允许另一个主机(像本地主机一样javascript.dev)对这个主机做xhr,它是一个IIS7,如果我curl -I,它是标题:

HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Server: Microsoft-IIS/7.0
X-Powered-By: PHP/5.3.28
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS
Access-Control-Max-Age: 1000
Access-Control-Allow-Headers: *
X-Powered-By: ASP.NET
Date: Fri, 20 Jun 2014 12:09:33 GMT
Run Code Online (Sandbox Code Playgroud)

这是标题curl -v -X OPTIONS:

* About to connect() to www2.xxxxxxxxxxxx.com.br port 80 (#0)
*   Trying 200.98.xxx.100...
* Connected to www2.xxxxxxxxxxxx.com.br (200.98.xxx.100) port 80 (#0)
> OPTIONS /jobs/xxxxxxx/user/ HTTP/1.1
> User-Agent: curl/7.30.0
> Host: www2.xxxxxxxxxxxx.com.br
> Accept: */*
> 
< HTTP/1.1 200 OK
< Allow: OPTIONS, TRACE, GET, HEAD, POST
* Server Microsoft-IIS/7.0 is not blacklisted
< Server: Microsoft-IIS/7.0
< Public: OPTIONS, TRACE, GET, HEAD, POST
< X-Powered-By: ASP.NET
< Date: Fri, 20 Jun 2014 13:01:25 GMT
< Content-Length: 0
Run Code Online (Sandbox Code Playgroud)

我使用php来改变Access-Control-Allow-Origin,但当我做xhr,有或没有jquery,这是我得到的错误:

XMLHttpRequest cannot load http://www2.xxxxxxxx.com.br/jobs/xxxxxx/user/. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://javascript.dev' is therefore not allowed access. 
Run Code Online (Sandbox Code Playgroud)

记录,我要解决的其他步骤:

我在上面的答案中添加了代码到我的web.config并得到此错误:

XMLHttpRequest cannot load http://www2.madeinweb.com.br/jobs/eminhasaude/user. 
Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 
Run Code Online (Sandbox Code Playgroud)

因为Access-Control-Allow-Headers不接受通配符*.解决:

<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
Run Code Online (Sandbox Code Playgroud)

Dea*_*ard 5

基于评论,Access-Control-Allow-Origin在提交OPTIONS请求时,您似乎错过了标题.根据这篇文章,它应该是一个简单的例子,将以下代码添加到您的PHP页面...

<?php
header('Access-Control-Allow-Origin: *');
?>
Run Code Online (Sandbox Code Playgroud)

如果仍然无效,那么您应该检查PHP的IIS处理程序映射(请参阅此处)并确保OPTIONS是允许的动词.希望能完成这项工作!

文章还指出,你可以跳过所有修改PHP,只需添加以下到你的web.config:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />
      <add name="Access-Control-Max-Age" value="1000" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

请注意,这将打开整个网站,而不仅仅是一个页面......