Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 拒绝设置不安全的标题“;“起源”;使用Google Chrome的xmlHttpRequest时_Ajax_Xmlhttprequest_Comet_Cors - Fatal编程技术网

Ajax 拒绝设置不安全的标题“;“起源”;使用Google Chrome的xmlHttpRequest时

Ajax 拒绝设置不安全的标题“;“起源”;使用Google Chrome的xmlHttpRequest时,ajax,xmlhttprequest,comet,cors,Ajax,Xmlhttprequest,Comet,Cors,收到此错误消息: 拒绝设置不安全的标题“Origin” 使用此代码: function getResponse() { document.getElementById("_receivedMsgLabel").innerHTML += "getResponse() called.<br/>"; if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {

收到此错误消息:
拒绝设置不安全的标题“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);

            }
        }
函数getResponse(){
document.getElementById(“_receivedMsgLabel”).innerHTML+=“调用了getResponse()。
”; 如果(receiveReq.readyState==4 | | receiveReq.readyState==0){ 接收方未结(“获取”http://L45723:1802,true,“server”,“server123”);//工作时必须使用L45723:1802。 receiveReq.onreadystatechange=HandlerReceiveMessage; receiveReq.setRequestHeader(“来源”http://localhost/"); receiveReq.setRequestHeader(“访问控制请求来源”http://localhost"); receiveReq.timeout=0; var currentDate=新日期(); var sendMessage=JSON.stringify({ SendTimestamp:currentDate, 信息:“信息1”, 浏览器:navigator.appName }); 接收方发送(sendMessage); } }
我做错了什么?要使此CORS请求生效,我在标题中缺少了什么

我试图删除
receiveReq.setRequestHeader(“Origin”,…)
调用,但是Google Chrome在我的
receiveReq.open()
调用中抛出了一个访问错误


为什么?

这只是一个猜测,因为我使用jquery处理ajax请求,包括COR

我认为浏览器应该设置标题,而不是你。如果您能够设置标题,则无法实现安全功能的目的


在不设置这些标题的情况下尝试请求,然后查看浏览器是否为您设置了标题。

您正在跨域工作吗

请尝试Brian的解决方案或尝试以下方法:

不要设置为localhost,只需传递任何内容。。。看看会发生什么

receiveReq.setRequestHeader("Origin", "*");

在CORS中,调用代码不必进行任何特殊配置。一切都应该由浏览器来处理。决定是否允许请求是服务器的工作。因此,每当您发出违反SOP策略的请求时,浏览器都会尝试为您发出CORS请求(它会自动添加源标题,如果您使用的是一些不安全的标题/方法/内容类型,则可能会发出飞行前请求)。如果服务器支持CORS,它将正确响应并通过提供CORS特定的响应头来允许/不允许请求,如

Access-Control-Allow-Origin: *
请记住,Chrome对“localhost”主机名的限制非常严格。(至少在我使用它的时候是这样)。而是使用您的计算机名或在“主机”文件中为其分配另一个别名。例如,不要访问您的网站,如:

http://localhost:port/myappname
而是使用:

http://mymachinename:port/myappname


有关更多详细信息,请查看。

拒绝设置不安全的标题“源代码”是:只需删除设置请求标题“源代码”的代码即可-非常适合我!
http://mymachinealias:port/myappname