Cors XmlHttpRequest and Response

Cors XmlHttpRequest and Response

本文关键字:Response and XmlHttpRequest Cors      更新时间:2023-09-26

任务描述

我正在创建一个具有客户端/服务器体系结构的程序。服务器是在用户浏览器中运行的javascript脚本,客户端是在用户的本地计算机上运行的应用程序。该脚本将 GET 请求发布到 127.0.0.1 上的端口;以 2000 年为例。客户端读取消息,执行一些操作,并将回复发布回服务器。

问题描述

这种类型的交互被认为是跨源资源共享。我已经阅读了这里的材料,并编写了我的程序来使用适当的 cors 标头消息来响应请求。不幸的是,我似乎收到错误消息:

XMLHttpRequest cannot load http://127.0.0.1:2000/?Command=test&Parameters=1234. Origin http://127.0.0.1 is not allowed by Access-Control-Allow-Origin.

完整的 http 交换

GET /?Command=test&Parameters=1234 HTTP/1.1
Host: 127.0.0.1:2000
Connection: keep-alive
Origin: http://127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Geco) Chrome/17.0.963.79 Safari/535.11
Accept: */*
Referer: http://127.0.0.1/test/main.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HTTP/1.1 200 OK
Server: Custom-Gnat-Client-v1.0
Access-Control-Allow-Origin: *
Origin: http://127.0.0.1
Content-Length: 12
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain

Success

相关代码

主要.js:

var Is_IE                = window.XDomainRequest ? true : false;
var Cross_Domain_xmlhttp = Create_Cross_Domain_Request();
function Create_Cross_Domain_Request(){
  var request;
  if(Is_IE)
    request = new window.XDomainRequest();
  else{
    if(window.XMLHttpRequest){
      request=new XMLHttpRequest();
    } else {
      request=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return request;
}
...
var URL = "http://127.0.0.1:2000/"+"?Command="+Command_String+"&Parameters=" +Parameters;
if (Cross_Domain_xmlhttp){
  if(Is_IE){
    Cross_Domain_xmlhttp.onload=function(){
      console.log(Cross_Domain_xmlhttp.responseText);
    }
    Cross_Domain_xmlhttp.open("GET", URL, true);
    Cross_Domain_xmlhttp.send();
  } else {
    Cross_Domain_xmlhttp.open('GET', URL, true);
    Cross_Domain_xmlhttp.onreadystatechange=function(){
      if (Cross_Domain_xmlhttp.readyState==4 && Cross_Domain_xmlhttp.status==200){
        console.log(Cross_Domain_xmlhttp.responseText);
      }
    }
    Cross_Domain_xmlhttp.send();
  }
} else {
  alert("The browser does not support XDomainRequest or XmlHttpRequest");
}

客户端代码目前不相关,但如果需要,我会发布。

服务器

响应中不应有任何Origin: http://127.0.0.1,因为它是请求标头。

为什么不返回Access-Control-Allow-Origin: http://127.0.0.1而不是*