web-dev-qa-db-ja.com

ブラウザから送信されたHTTPリクエストのヘッダーを変更できますか?

私は落ち着いたデザインを検討しており、HTTPメソッド(POSTGET、...)とHTTPヘッダーを可能な限り使用したいと考えています。 HTTPメソッドPUTおよびDELETEがブラウザからサポートされていないことをすでに知りました。

今、私は同じリソースの異なる表現を取得しようとしているので、リクエストのAcceptヘッダーを変更してこれを行いたいと思っています。このAcceptヘッダーに応じて、サーバーは同じリソースで異なるビューを提供できます。

問題は、このヘッダーを変更するようブラウザに指示する方法が見つからなかったことです。

<a..>タグには type属性 があり、mimeタイプを持つことができます。候補のように見えましたが、ヘッダーはブラウザーのデフォルトのままでした(Firefoxではabout:config とともに network.http.accept.defaultキー)。

65
JeroenWyseur

あなたがやろうとしている方法でそれをすることは不可能だと思います。

受け入れられたデータ形式の表示は通常、リソース名に拡張子を追加することにより行われます。したがって、次のようなリソースがある場合

/resources/resource

およびGET /resources/resourceはHTML表現を返します。代わりにXML表現が必要であることを示すために、次のパターンを使用できます。

/resources/resource.xml

その場合、サーバー側で受け入れられたコンテンツタイプの決定を行う必要があります。

または、Jamesが示唆するようにJavascriptを使用します。

8
Milan Novota

要求された表現をURIに埋め込むというミラノの提案に部分的に反対します。

とにかく可能な場合、URIは のみ リソースのアドレス指定に使用され、 じゃない HTTPメソッド/動詞のトンネリング用。最終的に、作成(POST)または更新(PUT)だけでは目的を果たさない場合、特定のビジネスアクション(編集、ロックなど)をURIに埋め込むことができます。

 POST http://shonzilla.com/orders/08/165;edit

URIで特定の表現を要求する場合、URIデザインを混乱させて最終的に見栄えを悪くし、2つの異なるREST概念を同じ場所(つまりURI)に混在させ、サーバー側で一般的にリクエストを処理します。Flickrを含むミラノが提案し、多くの人が同じことをしているのはまさにこれです。

代わりに、よりRESTfulなアプローチは 別の場所を使用して優先表現をエンコードする コンテンツネゴシエーションに使用されるAccept HTTPヘッダーを使用して、クライアントがサーバーに処理/処理できるコンテンツタイプを伝え、サーバーがクライアントの要求を満たすことを試みます。このアプローチは HTTP 1.1標準 の一部であり、ソフトウェアに準拠しており、Webブラウザでもサポートされています。

これを比較してください:

 GET /orders/08/165.xml HTTP/1.1 
または
 GET/orders/08/165&format = xml HTTP/1.1 

これに:

 GET/orders/08/165 HTTP/1.1 
受け入れる:application/xml

Webブラウザーから、setRequestHeaderオブジェクトのXMLHttpRequestメソッドを使用して、任意のコンテンツタイプを要求できます。例えば:

 function getOrder(year、yearlyOrderId、contentType){
 var client = new XMLHttpRequest(); 
 client.open( "GET"、 "/ order /" + year + "/"+ yearlyOrderId); 
 client.setRequestHeader(" Accept "、contentType); 
 client.send(orderDetails); 
} 

要約すると、アドレス、つまりリソー​​スのURIは、その表現とXMLHttpRequest.setRequestHeaderメソッドを使用すると、Accept HTTPヘッダーを使用して任意の表現を要求できます。

乾杯!
Shonzilla

41
Shonzilla

私はまったく同じこと(RESTful Webサービス)を実行しようとしていましたが、このfirefoxアドオンにつまずきました。完璧に機能します。

https://addons.mozilla.org/en-US/firefox/addon/967/

12
Chris

ModHeader Google Chromeの拡張機能も適切なオプションです。必要なヘッダーを設定し、ブラウザーにURLを入力するだけで、URLにアクセスすると拡張機能からヘッダーが自動的に取得されます。唯一のものは、ヒットするすべてのURLのヘッダーを送信するため、使用後に無効にするか削除する必要があります。

1
Jai Prak

JavaScriptを使用してください!

 xmlhttp = new XMLHttpRequest(); 
 xmlhttp.open( 'PUT'、http://www.mydomain.org/documents/standards/browsers/supportlist)
 xmlhttp。 send( "ここにページコンテンツがあります"); 
1
James Anderson