0

タスクの説明

クライアント/サーバー アーキテクチャでプログラムを作成しています。サーバーはユーザーのブラウザーで実行される 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

関連コード

main.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");
}

クライアント コードは現在関係ありませんが、リクエストがあれば投稿します。

4

1 に答える 1

0

Origin: http://127.0.0.1これはリクエストヘッダーであるため、サーバーの応答には何も含まれないはずです。

そして、なぜAccess-Control-Allow-Origin: http://127.0.0.1代わりに戻ってみません*か?

于 2012-05-30T09:10:25.393 に答える