web-dev-qa-db-ja.com

URLConnectionsetRequestPropertyとaddRequestProperty

HTTPをWebサーバーと話しているとしましょう。HTMLまたはテキストを受け入れますが、HTMLを優先します。言い換えれば、ヘッダーは(私は思う!)と言うべきです

受け入れる:text/html、text/*

私はJavaを使用しているので、URLConnectionがあります。使用する必要があります:

myUrlConnction.setRequestProperty("Accept", "text/html");
myUrlConnction.addRequestProperty("Accept", "text/*");

または

myUrlConnction.setRequestProperty("Accept", "text/html, text/*");

またはそれらは同等ですか?

一般に、私が見るサードパーティのコードのほとんどは、これらのヘッダーの順序や複数の値についてあまり心配していないようです。そのため、どのように機能するのか疑問に思っています。

15
user949300

最初のコードスニペットは2つのaccept-headerになり、2番目のコードスニペットは2つのセレクターを持つ1つのaccept-headerになります。

それらは実際には同等です。

仕様には、より具体的なメディア範囲が優先されることも記載されているため、どちらも期待どおりの動作を実現します。

複数のメディア範囲を指定する必要があり、それらが等しく特定されている場合は、qパラメーターを追加できます。

出典:http 1.1仕様( http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html ):

6
Nils Otto

setRequestPropertyとaddRequestPropertyの基本的な違いは次のとおりです:-

  1. setRequestProperty >>一般的なリクエストプロパティを設定します。キーを持つプロパティがすでに存在する場合、overwriteその値を新しい値で。

  2. addRequestProperty >>キーと値のペアで指定された一般的なリクエストプロパティを追加します。このメソッドは、同じキーに関連付けられている既存の値を上書きしません

詳細については、 api doc を参照してください。

14
lambodar