2011-12-22 11 views
6

私に混乱を招くのは、HTTPヘッダーのデコードです。HTTPヘッダー値の解析:引用、RFC 5987、MIMEなど

例ヘッダー:
Some-Header: "quoted string?"; *utf-8'en'Weirdness

はが引用される値のヘッダすることはできますか? "のエンコードはどうですか?有効な引用符は'ですか?セミコロン(;)の意味は何ですか? HTTPヘッダーの値パーサーをMIMEパーサーと見なすことはできますか?

は私が透過的に処理し、多くのイン・ザ・ワイルドヘッダフィールドを変更する必要が透過プロキシを作っています。だからこそ私はフォーマットについて細かいことが必要です。

答えて

8

が引用された値をヘッダすることはできますか?

RFC 5987 parameterの生産がヘッダー値の主要部分に適用されることを意味する場合は、いいえ。ここで

Some-Header: "foo"; bar*=utf-8'en'bof 

ヘッダ値の主要部分

は、おそらく...

セミコロンの意義は何ですか引用符を含む"foo"ことだろうが(;)?

特定処理が別々に各名前付きヘッダーのために定義されています。したがって、セミコロンは、たとえばContent-Dispositionでは重要ですが、Content-Lengthでは重要ではありません。

は明らかにこれは非常に満足のいく解決策ではないが、それは我々が立ち往生しているものです。

私は、多くのin-the-wildヘッダーフィールドを透過的に処理して変更する必要がある透過プロキシを作成しています。

これは一般的な方法では処理できません。考えられる各ヘッダーの形式を知る必要があります。認識できないものについては、ヘッダ値を分解しようとしないでください。現時点ではRFC 5987をサポートしているわけではありませんが、それほど有用な処理を行うことはできません。

現状今日は、符号化またはRAWのどちらか、全く使用されるように十分にクロスブラウザを動作しないヘッダの値に非ASCII文字ということです。

幸いにもそれらはめったに必要ありません。本当によく使われる唯一のケースは、Content-DispositionのASCII以外のファイル名ですが、その代わりに末尾のURLパス部分にファイル名を入れることで回避するのが簡単です。

HTTPヘッダーの値パーサーをMIMEパーサーと見なすことはできますか?

HTTPは、MIMEとRFC 822ファミリーの標準から大部分を借りていますが、822ファミリの一部ではありません。それは822のように見えるヘッダーのための独自の低レベルの文法を持っていますが、あまり互換性はありません。任意のMIME機能はHTTPで使用することはできません.HTMLに明示的にドラッグするための標準化メカニズムが必要です(RFC 5987はRFC 2231の部分)。

RFCのセクション19.4いくつかの相違点については、2616を参照してください。

は822ファミリの一部であり、理論上はRFC 2231エンコーディングを使用できるはずです。しかし現実には、ブラウザはそれをサポートしていません。

関連する問題