2009-08-12 25 views
55

XMLHttpRequestを使用してAJAX呼び出しを行うとき、ほとんどの要求ヘッダーをJavaScriptから変更できないようです。 Geckoブラウザでrequest.open()の後にrequest.setRequestHeaderを呼び出す必要がある場合は、http://ajaxpatterns.org/Talk:XMLHttpRequest_Callを参照してください。 Refererを設定すると、設定されません(Firebugと改ざんデータを使用して送信されたリクエストヘッダーを見ました)。 User-Agentを設定すると、AJAX呼び出しが完全に混乱します。ただし、を設定すると、Content-Typeが機能します。 RefererFirefox 3のユーザーエージェントを設定できませんか?JavaScriptで要求ヘッダーを設定する

var request = new XMLHttpRequest(); 
var path="http://www.yahoo.com"; 
request.onreadystatechange=state_change; 

request.open("GET", path, true); 
request.setRequestHeader("Referer", "http://www.google.com"); 
//request.setRequestHeader("User-Agent", "Mozilla/5.0"); 
request.setRequestHeader("Accept","text/plain"); 
request.setRequestHeader("Content-Type","text/plain"); 

request.send(null); 
    function state_change() 
{ 
if (request.readyState==4) 
    {// 4 = "loaded" 
    if (request.status==200) 
    {// 200 = OK 
    // ...our code here... 
    alert('ok'); 
    } 
    else 
    { 
    alert("Problem retrieving XML data"); 
    } 
    } 
} 
+1

実際にはまだテストしていないツールもありますが、これらのヘッダーの両方を設定する必要はないはずです。実際に設定するのは本質的に疑わしいものです。 – annakata

答えて

64

W3C Spec on setrequestheader

短い点:

がすでに設定されてリクエストヘッダは、新しい値 がU + 002C COMMAが U + 0020続いて使用して、既存の 値に連結されなければならないした場合分離のためのスペース。

UAは、User-Agentヘッダーに初期値を与えることができますが、作成者が値を追加できるようにする必要があります。

ただし、jQueryのフレームワークXHRを検索した後、User-AgentヘッダーまたはRefererヘッダーを変更できません。最も近いもの:

// Set header so the called script knows that it's an XMLHttpRequest 
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

私はあなたが何をしたいのかFFでセキュリティポリシーによって拒否されているという意見に傾いている - あなたはいつもできたいくつかのカスタムRefererタイプヘッダーを渡したい場合は、操作を行います。

xhr.setRequestHeader('X-Alt-Referer', 'http://www.google.com'); 
+1

はい、FFは、 headers ":http://mxr.mozilla.org/mozilla1.8.0/source/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp#1637 –

3

@gnarf回答が正しい。より多くの情報を追加したかった。

Mozillaのバグリファレンス:ヘッダは次のヘッダーのいずれかの大文字と小文字を区別しないマッチがある場合https://bugzilla.mozilla.org/show_bug.cgi?id=627942

は、これらの手順を終了:

Accept-Charset 
Accept-Encoding 
Access-Control-Request-Headers 
Access-Control-Request-Method 
Connection 
Content-Length 
Cookie 
Cookie2 
Date 
DNT 
Expect 
Host 
Keep-Alive 
Origin 
Referer 
TE 
Trailer 
Transfer-Encoding 
Upgrade 
User-Agent 
Via 

出典:人々のためにhttps://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader

+0

これは奇妙です。古いドラフトのgnarfはUAが作者がUser-Agentヘッダに物を追加することを許さなければならないと言います。しかし、現在の仕様では、UAはUser-Agentヘッダへの変更を無視しなければならない(MUST)。 – Robert

関連する問題