Der*_*LAU 16 ajax comet xmlhttprequest cors
收到此错误消息:
Refused to set unsafe header "Origin"
使用此代码:
function getResponse() {
document.getElementById("_receivedMsgLabel").innerHTML += "getResponse() called.<br/>";
if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
receiveReq.open("GET", "http://L45723:1802", true, "server", "server123"); //must use L45723:1802 at work.
receiveReq.onreadystatechange = handleReceiveMessage;
receiveReq.setRequestHeader("Origin", "http://localhost/");
receiveReq.setRequestHeader("Access-Control-Request-Origin", "http://localhost");
receiveReq.timeout = 0;
var currentDate = new Date();
var sendMessage = JSON.stringify({
SendTimestamp: currentDate,
Message: "Message 1",
Browser: navigator.appName
});
receiveReq.send(sendMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?标题中我缺少什么使这个CORS请求有效?
我尝试删除了receiveReq.setRequestHeader("Origin", ...)通话,但谷歌Chrome在我的receiveReq.open()通话中抛出了访问错误...
为什么?
Bri*_*n S 14
这只是一个猜测,因为我使用jquery来处理ajax请求,包括CORS.
我认为浏览器应该设置标题,而不是你.如果您能够设置标题,那将破坏安全功能的目的.
尝试请求而不设置这些标头,看看浏览器是否为您设置了它们.
在CORS中,调用代码不必进行任何特殊配置.一切都应该由浏览器处理.服务器的工作是决定是否允许请求.因此,每当您发出破坏SOP策略的请求时,浏览器将尝试为您发出CORS请求(它将自动添加Origin标头,如果您使用某些不安全的标头/方法/内容类型,可能会发出预检请求).如果服务器支持CORS,它将正确响应,并通过提供CORS特定的响应头来允许/禁止请求
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
请注意,Chrome对"localhost"主机名的限制非常严格.(至少是在我使用它的时候).而是使用您的计算机名称或在"hosts"文件中为其指定另一个别名.例如,不要访问您的网站,例如:
http://localhost:port/myappname
Run Code Online (Sandbox Code Playgroud)
而是使用:
http://mymachinename:port/myappname
Run Code Online (Sandbox Code Playgroud)
要么
http://mymachinealias:port/myappname
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看规格.
| 归档时间: |
|
| 查看次数: |
55508 次 |
| 最近记录: |