突堤が受信したヘッダーの順序を変更するようです。私はHttpServletRequestWrapper
オブジェクトのgetHeaderNames()
を使ってそれらを集めます。リクエストヘッダーの順番を変更する
要求に設定されているのと同じ順序で取得する方法があるかどうか知っていますか?
突堤が受信したヘッダーの順序を変更するようです。私はHttpServletRequestWrapper
オブジェクトのgetHeaderNames()
を使ってそれらを集めます。リクエストヘッダーの順番を変更する
要求に設定されているのと同じ順序で取得する方法があるかどうか知っていますか?
は私の質問に答えるために返されたヘッダ名の順不同のコレクションを返します使用
意味...
Host: localhost
Cookie: foo
Cookie: bar
Cookie: baz
Accept: gzip
要求の順序で配列に格納されます。ただし、メソッドgetHeaderNames()
は、配列の各要素に基づいてセットを作成します。セットは要素の順序を保持しません。この問題を迂回によって
一つの解決策は、代わりHashSet
のLinkedHashSet
を使用して、クラスorg.eclipse.jetty.http.HttpFields
方法getFieldNamesCollection()
を上書きすることです。影響が少ないと
別の解決策は、静的なカスタム 方法getHeaderNames()
を書くことになり、このような何か:
static public String buildHeaderList(ServletRequest request){
StringJoiner headerList = new StringJoiner(",");
Request req = (Request) request;
HttpFields fields = req.getMetaData().getFields();
for (HttpField f : fields)
{
if (f!=null)
headerList.add(f.getName());
}
return headerList.toString();
}
リクエストオブジェクトは、org.eclipse.jetty.server.Request
のタイプである以上、多分他がありますエレガントなソリューション。お気軽に追加してください。
ヘッダーの順序は、(HTTP仕様とサーブレットの仕様に従って)同じヘッダー名内でのみ保証されます。 getHeaderNames()
がちょうど[Cookie, Host, Accept]
しかしgetHeaders("Cookie")
は、ヘッダがある[foo, bar, baz]
こんにちはJoakim、答えに感謝します。私の目標は、ヘッダーの順序付きリストをそれらの値ではなく取得することです。ヘッダーの順序はHTTP/1.1仕様では保証されていませんが、具体的な必要性については私が知りたいと思います。 'getHeaderNames()'は常に同じ順序でヘッダーを返しますが、リクエストのものではないので、達成する方法があるのだろうかと疑問に思っていたようです。 – RogerFromSpace
サーブレット仕様はこれをサポートしていません。この真実はSPDYとHTTP/2にも当てはまります。また、仲介者(プロキシ、ロードバランサなど)が自分のニーズに合わせて注文を変更できることも知っています。 –
どのような目的のためにですか? HTTP RFCでは定義されていません。あなたはおそらくそれに頼る必要がありますか? – EJP