2

IE10 から送信された POST 要求の Wireshark キャプチャがあります。POST リクエストは、 RFC 1867の指定に従って発行され、以下が含まれますboundary

Content-Type: multipart/form-data; boundary=945637143527273; charset=UTF-8

私がかなり奇妙に感じるのは、

charset=UTF-8

トークンの後の部分

boundary=945637143527273;

ExamplesRFCのセクションを見ると、Content-Typeヘッダーは常に境界で終了し、. などの末尾のデータはありませんcharset

それで、そのような動作を許可する仕様へのアドオンがありましたか、末尾のデータは無視されますか、それとも(仕様に準拠したHTTPサーバーとして)リクエストをドロップしてクライアントにエラーを送信しますか?


編集:そのトピックのさらなる調査により、この質問にたどり着きました:

MIME 境界にはどのような規則が適用されますか?

受け入れられた回答は、境界が次のように指定されるRFC 2046を参照しています。

boundary := 0*69<bchars> bcharsnospace
bchars := bcharsnospace / " "
bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
                  "+" / "_" / "," / "-" / "." /
                  "/" / ":" / "=" / "?"

したがって、bcharsnospacea が含まれていないため、;そのcharset=UTF-8部分は明らかに境界に属していません。その場合は無視しますか、Content-Typeそれともヘッダーに対して無効な値ですか?

4

2 に答える 2

2

メディア タイプの文法に従って、ヘッダー フィールド全体を解析する必要があります。「charset」は「boundary」と同様のパラメーターです。

于 2013-11-04T15:29:30.893 に答える
1

IE10 の動作に関する具体的な質問にはコメントできませんが、それについて何をすべきかについての質問にコメントします。

末尾のデータを無視するか、(仕様に準拠した HTTP サーバーとして) 要求を破棄してクライアントにエラーを送信するか?

IE10 が説明どおりに動作し、サーバーがそれに応答してエラーを送信する場合、基本的に IE10 ユーザーに常にエラー応答を送信することになります。

IE10 ユーザーはエラーに対して何もできないため、サーバーが提供するサービスからそれらのユーザーを事実上完全にロックアウトすることになります。

このようなときは、ポステルの法則を検討する価値があります。送信するものは保守的であり、受信するものは寛大にします

したがって、動作が仕様に厳密に従っていない場合でも、エラーを送信しないことを強くお勧めします。エラーなしで処理できる場合は、それが最適なオプションです。

于 2013-11-04T15:24:14.023 に答える