彼山の知識

IT専門質問の答え

質問

JavaScriptでWebページのHTTPヘッダーへのアクセス

どのように私はJavaScriptで、ページのHTTPレスポンスヘッダにアクセスするには?

2特定のHTTPヘッダーへのアクセスについて尋ねるように変更されました this question に関連.

関連:

重複する:


答え

Rank --  7

すべてのHTTPヘッダを取得するために次のJavaScriptコードを使用します.

var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
alert(headers);


Rank --  6

残念ながら、あなたの最初のページリクエストのためにあなたにHTTPレスポンスヘッダを与えるためのAPIはありません.つまり、ここに掲載元の質問だった.一部の人々は別のものを発行することなく、元のページ要求の実際のレスポンスヘッダを取得したいと思いますので、それは、あまりにも、 repeatedly asked されています.

AJAXリクエストの場合:

HTTPリクエストをAJAXを介して行われている場合は、 getAllResponseHeaders() メソッドで応答ヘッダを取得することができる.これは、XMLHttpRequestのAPIの一部です.これがどのように適用できるかを確認するには、以下の fetchSimilarHeaders() 機能をチェックしてください.これは回避策一部のアプリケーションでは信頼できないという問題であることに注意してください.

myXMLHttpRequest.getAllResponseHeaders();

APIは、XMLHttpRequestのための以下の勧告候補に指定されました. XMLHttpRequest - W3C Candidate Recommendation 3 August 2010

具体的には、getAllResponseHeaders()メソッドは、次のセクションで指定されています:

MDNのドキュメントもいいです.

これは、あなたのオリジナルのページ要求のHTTPレスポンスヘッダの情報を与えることはありませんが、それはこれらのヘッダーが何であったかについて教育推測を作るために使用することができる.その上でそれ以上は説明する.

初期ページ要求からヘッダー値を取得する:

この質問は、最初 現在ページ (その内部同じページ、つまりJavaScriptが実行されていた)のために、元のHTTPレスポンスヘッダを参照する方法について、具体的尋ね、数年前に頼まれた.これは、単に任意のHTTPリクエストに対するレスポンスヘッダの取得は全く異なる問題である.最初のページリクエストのために、ヘッダーはJavaScriptに容易に入手できない.あなたは、AJAXを経由して再び同じページを要求する場合に必要ヘッダー値を確実かつ十分に一貫しているかどうかを特定のアプリケーションに依存します.

以下は、その問題を取得するためのいくつかの提案です.

1.大部分は静的であり、リソースに要求を

応答が主に静的であり、ヘッダーが要求間あまり変化しないと予想される場合は、現在の通貨同一のページに対するAJAXリクエストを作成し、彼らは、ページのの一部であったと同じ値であるしていることを前提としていなかったHTTPレスポンス.これは、あなたが上記の素敵なXMLHTTPリクエストAPIを使用して必要とするヘッダにアクセスする可能性があります.

function fetchSimilarHeaders (callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === 4) {
//
// The following headers may often be similar
// to those of the original page request...
//
if (callback && typeof callback === 'function') {
callback(request.getAllResponseHeaders());
}
}
};

//
// Re-request the same page (document.location)
// We hope to get the same or similar response headers to those which
// came with the current page, but we have no guarantee.
// Since we are only after the headers, a HEAD request may be sufficient.
//
request.open('HEAD', document.location, true);
request.send(null);
}

あなたは十分にそれらが同じであることを保証できませんので、あなたが本当に、リクエスト間で一貫性のあるものの値に依存する必要がある場合は、このアプローチでは、問題となることでしょう.これは、特定のアプリケーションに、あなたが必要とする値は次の1要求から変更することはありません何かであることを知っているかどうかに依存するようになるだろう.

2.推論を行う

ブラウザはヘッダを見ることで決定する 一部の部品表のプロパティ があります.これらのプロパティのいくつかは(例えば

navigator.userAgent

がHTTP

UserAgent

ヘッダフィールドの値に設定されている)を直接HTTPヘッダを反映している.利用可能なプロパティを中心に盗聴することにおいて、あなたが必要なものを見つけることができるかもしれない、あるいはいくつかの手がかりは、HTTPレスポンスが含まれているかを示すために.

3.それらを隠しておく

あなたは、サーバー側を制御する場合は、完全な応答を構築するように、あなたが好きなのヘッダーにアクセスすることができます.値は、いくつかのマークアップ内またはおそらくインライン化されたJSON構造に隠し、ページを使用してクライアントに渡すことができた.あなたはJavaScriptに利用可能なすべてのHTTPリクエストヘッダを持っていると思った場合は、サーバー上でそれらを反復処理して、マークアップ内の隠された値としてそれらを送り返すことができます.これは、ヘッダ値をこのように送信するためにはおそらく理想的ではないですが、あなたは確かにあなたが必要とする特定の値のためにそれを行うことができます.このソリューションは、あまりにも、間違いなく非効率的ですが、あなたがそれを必要に応じてそれが仕事をするだろう.


Rank --  4

XMLHttpRequestを使用すると、現在のページをプルアップして、レスポンスのHTTPヘッダを調べることができます.

最良の場合は、単にHEADリクエストを実行してからヘッダを調べることです.

これを行うためのいくつかの例については http://www.jibbering.com/2002/4/httprequest.html を見て

ちょうど私の2セント.


Rank --  2

これは、古い質問...サポートは、より広範になったときに確認されていませんが、getAllResponseHeaders()とgetResponseHeader()は現在、かなり標準的であるように見える. http://www.w3schools.com/dom/dom_http.asp


Rank --  2

どのように私は、HTTPリクエストのヘッダフィールドは、JavaScript経由でアクセスできますか?

我々は リクエスト ヘッダの話をしている場合のXMLHttpRequestを行うときには、独自のヘッダを作成することもできます.

var request = new XMLHttpRequest();
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
request.open("GET", path, true);
request.send(null);


Rank --  1

JavaScriptにヘッダ情報を送信する別の方法は、クッキーを介して行われる.サーバは、リクエストヘッダから必要なあらゆるデータを抽出し、

Set-Cookie

レスポンスヘッダの中にそれらを送り返すことができます - とクッキーをJavaScriptで読み取ることができます. keparoが言うように、しかし、それだけで1または2のヘッダのためではなく、それらのすべてのためにこれを行うことをお勧めします.


Rank --  1

MooToolsのを使用して、this.xhr.getAllResponseHeadersを使用することができます()


Rank --  0

あなたは、HTTPヘッダにアクセスすることはできませんが、その中で提供される情報のいくつかは、DOMで提供されています.たとえば、HTTPリファラ(SiC)を表示する場合は、document.referrerを使用しています.その他のHTTPヘッダのためのこのような他のものがあるかもしれません. 「HTTPリファラのjavascript "のような、必要な特定のものを、グーグルしてみてください.

私は、これは明らかでしょうけど、私は私が本当に望んですべてがリファラで、任意の有用な結果を得られなかったとき、「HTTPヘッダーのjavascript "のようなものを探し続けた.私は私がより具​​体的な質問をすることができ実現しなかったのか分からない.


Rank --  0

私はテストしてみたが、これはクロームバージョン28.0.1500.95を使用して私のために動作します.

Iファイルをダウンロードし、ファイル名を読み取るために必要とした.ファイル名は、私がフォローをしたヘッダにある、

var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.responseType = "blob";
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
success(xhr.response); // the function to proccess the response

console.log("++++++ reading headers ++++++++");
var headers = xhr.getAllResponseHeaders();
console.log(headers);
console.log("++++++ reading headers end ++++++++");

}
};

出力:

日付:Tue、20​​13年8月16日夜4時21分33秒GMT
コンテンツの廃棄:添付ファイル、ファイル名= testFileName.doc
コンテンツの長さ:20
サーバー:Apache-Coyote/1.1
コンテンツタイプ:アプリケーション/オクテットストリーム


Rank --  0

HEADリクエストメソッドは、科学技術環境省の例のために良いかもしれないが、あなたを与えるものではありません
例えばコンテンツサイズ.

あなたは大きなファイルを要求する前に、POST / GETのファイルサイズまたはいずれかの方法をお知りになりたい場合
あなたがすべてのものをダウンロードしたくないことを決定します.アボート()を使用します

function fetchOnlyResponseHeaders (callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 2) {

// example:
// var fileSize = xhr.getResponseHeader("content-length");
// if(isToBig(fileSize)){
// xhr.abort();
// }

callback(xhr.getAllResponseHeaders());
xhr.abort();
}
};

xhr.open('GET', document.location);
xhr.send(null);
}

fetchOnlyResponseHeaders(function(r) {
alert(r);
});