【发布时间】:2016-01-15 01:42:52
【问题描述】:
我正在尝试使用 CORS 在我的浏览器和 Apache 服务器(位于不同域中)之间运行 AJAX 请求。
在服务器端,我根据“Header set Access-Control-Allow-Origin in .htaccess doesn't work”中的响应在服务器的 httpd.conf 部分进行了以下更改:
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() 以避免预检请求,但它也没有成功。
我在 Chrome 和 Firefox 上收到的错误消息是:
- 在 Chrome 中:
“XMLHttpRequest 无法加载https://x.x.x.x/validateCustomerID。请求的资源上不存在'Access-Control-Allow-Origin'标头。因此不允许访问源'null'。响应的HTTP状态代码为403。”
- 在 Firefox 中:
“跨域请求被阻止:同源策略不允许读取位于https://x.x.x.x/validateCustomerID 的远程资源。(原因:CORS 请求失败)。”
在我的浏览器中没有从服务器接收到响应标头,我认为 CORS 工作是必需的,并且登录服务器显示没有从我的浏览器到达它的请求。
如果有人能帮我解决这个问题,我将不胜感激,因为我已经被困在这里好几天了,并且已经使用了几乎所有的命中和试验方法来使这件事发挥作用。
【问题讨论】:
-
你激活了apache模块头
a2enmod headers吗? -
为什么要在 request 中设置 Access-Control 标头?
-
@Jacob,我尝试使用 a2enmod headers 命令激活 apache 模块头,但它给了我一个错误,它是一个无效的命令。然后我在某处读到,Apache 默认启用了 Mod_headers,所以我保持原样。会不会是个问题?
-
@Quentin:我在建议尝试在请求本身中设置标头的地方读到它,所以我试了一下。就像我在问题本身中提到的那样,我已经坚持了几天了,并且一直在尝试我能找到的任何建议。但是后来我也尝试删除请求标头,但它仍然无法正常工作。有什么建议吗?
-
为了避免预检请求 - 你已经通过将内容类型设置为 application/json 来保证预检......如果预检正在杀死你,现在你知道为什么
标签: javascript ajax apache google-chrome cors