2015-10-16 99 views
5

我试图在我的浏览器和使用CORS的Apache服务器(位于不同域中)之间工作。CORS不适用于Chrome/Firefox和Apache

在服务器端,我做了在服务器按响应的httpd.conf中部分有以下改变的“Header set Access-Control-Allow-Origin in .htaccess doesn't work”:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

我的AJAX调用的形式为:

 $.ajax({ 
      url  :'https://x.x.x.x/validateCustomerID', 
      type  : 'POST', 
      cache : false, 
      crossDomain: true, 
      contentType: 'application/json', 
      beforeSend: function(xhr){ 
        xhr.setRequestHeader("Access-Control-Allow-Methods","POST"); 
        xhr.setRequestHeader("Access-Control-Allow-Headers","X-Requested-With"); 
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
      }, 
      data  : {loginId : '12345'}, 
      success : function(response){console.log("Success"+JSON.stringify(response))}, 
      error  : function(response){console.log("Error"+JSON.stringify(response))} 
     }); 
    } 

我也尝试以避免预检要求注释掉beforeSend(),但它要么没有成功。

我收到关于铬和Firefox错误消息是:

  • 在铬:

“的XMLHttpRequest不能加载https://x.x.x.x/validateCustomerID否‘访问控制允许来源’标头是否存在。因此不允许Origin'null'访问,响应的HTTP状态码为403。

  • 在Firefox:

“跨来源请求阻止:同源策略不允许读取远程资源在https://x.x.x.x/validateCustomerID。(原因:CORS请求失败)”

在我的浏览器中没有收到服务器的响应头信息,我认为这是CORS的强制性工作,并且在服务器上登录并不显示从我的浏览器发出的请求。

我真的很感激,如果有人在这里可以帮我解决这个问题,因为我在这里呆了好几天了,并且几乎用了所有的命中和试用方法来使这件事情起作用。

+0

你启动Apache模块头'a2enmod headers' ? –

+0

你为什么试图在**请求**中设置访问控制标题? – Quentin

+0

@Jacob,我尝试使用a2enmod头部命令激活apache模块头,但它给了我一个错误,它是一个无效的命令。然后,我在某处读取默认情况下在Apache中启用了Mod_headers的地方,因此我将它保留原样。这可能是一个问题吗? –

回答

1

这是我在site.conf设置在生产现在的Apache2

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Headers "authorization, origin, user-token, x-requested-with, content-type" 
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

适用于将来的参考,我强烈建议将本网站加入书签http://enable-cors.org/index.html

+0

我实际上在设置我的Apache设置时经历了相同的链接。但是,在我们需要执行'a2enmod头部'的最后一点,我收到一个错误,说这是一个无效的命令。我没有进一步尝试,因为它是在它之上写的,它默认在Apache中启用了mod_headers。 –

+0

您在问题中出现的错误表明标题未实际添加到响应中,您是否重新启动了apache?你使用apache2吗? – maurycy

+0

做*安全吗?我们不能只是做'“https://cdnurl.com”'? – runningmark

相关问题