クロスサイトXMLHttpRequestをJavaScriptから実行できますか?ドメイン間でXMLHttpRequestを使用することは可能ですか
私は限界を理解し、なぜ一般的に働くことができませんが、Firefoxの3.5の、これが動作するようになっている
Access-Control-Allow-Origin: *
があります。
これは、ページを提供していないドメインから要求が送信された場合、サーバーが気にしないことをブラウザに通知します。
私が使用しているコードは以下のとおりです。
function sendData(webservicePayload, callbackFunction) {
var request = null;
if (!window.XMLHttpRequest) { // code for IE
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (E) {
return 'Create XMLHTTP request IE';
}
}
} else { // code for Mozilla, etc.
request = new XMLHttpRequest();
}
/*
* Setup the callback function
*/
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status < 300) {
eval(callbackFunction);
}
};
if (!request) {
nlapiLogExecution('ERROR', 'Create XMLHTTP request', 'Failed');
return;
}
/*
* Setup the request headers
*/
request.open('POST','http://www.another.domain.co.uk/webservice.asmx', true);
request.setRequestHeader('Man','POST http://www.another.domain.co.uk/webservice.asmx HTTP/1.1');
request.setRequestHeader('MessageType', 'CALL');
request.setRequestHeader('Content-Type', 'text/xml; charset="utf-8"');
request.setRequestHeader('Cache-Control', 'no-cache');
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.setRequestHeader('SOAPAction','http://www.another.domain.co.uk/WebService/eService');
request.send(webservicePayload);
}
これは期待される応答ヘッダ
RESPONSE
REQUEST
OPTIONS /webservice.asmx HTTP/1.1
Host: www.another.domain.co.uk
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: https://my.domain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: cache-control,content-type,man,messagetype,soapaction
Pragma: no-cache
Cache-Control: no-cache
を送信および受信しています
HTTP/1.1 403 Forbidden
Server: Microsoft-IIS/5.1
Date: Wed, 14 Dec 2011 13:43:27 GMT
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Connection: close
Content-Type: text/html
Content-Length: 44
ご覧のとおり、Orginはリクエストに指定されており、サーバーは任意の( "*")ドメインの受け入れを受け付けて応答します。
なぜ私は「Forbidden 403」を得ているのですが、私がやったことはすべて正しいと思うのですが、どうしてうまくいかないのでしょうか?
誰かがこれを取得していますか?
あなたは原因を知っていますか?
ブラウザ、すべてのブラウザがCORS – Raynos
をサポートし、IEのためにあなたがする必要がありません:
はあなたがここにプリフライトリクエストおよび取扱CORS要求についての詳細を学ぶことができます。実際のリクエストに応じて、あなただけの次のヘッダーを必要としますXMLHTTPRequestではなくXDomainRequestを使用します。しかし、はい、クロスドメインXHRは非常にうまく動作し、私は例えば私のサイトからimgurにデータを送信するためにそれを使用します。ライブラリを使って、厄介な細部を抽象化することをお勧めします。 –
JS /ブラウザの問題よりもサーバーの問題に似ています。 OPTIONS要求を正しく処理するAPSコードを確認してください。 – Gerben