4

RFCによると、「Cookie」HTTPヘッダー内の個々のCookieは、セミコロンだけでなくコンマでも区切ることができます。ただし、ASP.NETはコンマの大文字と小文字を正しく解析しません。コンマを区切り文字としてカウントしませんが、値の一部と見なします。

たとえば 、クライアントがヘッダーを送信した場合Cookie: a=b, c=d、ASP.NETアプリケーションには、値が「b、c=d」の「a」という名前のCookieが1つだけ表示されます。

特別な場合として、クライアントがすべてのCookieを1つのヘッダーに結合するのではなく、複数のCookieヘッダー(Cookieごとに1つ)を送信する場合にも同じことが起こります。HTTPの観点からは、これは完全に有効です。このような場合、ヘッダーの有効な値は、コンマで区切られたすべてのインスタンスの値を連結する必要があります。

誰かがこれの回避策(またはおそらく修正?)を知っていますか?私はクライアントを制御していないので、これを機能させる必要があります。

PSこのスレッドによると、.NET組み込みHTTPクライアント(別名HttpWebRequest)の動作が正反対であり、問​​題を引き起こすのは皮肉なことです。:-)

4

3 に答える 3

4

RFC2109とRFC2965はどちらも、現実を説明していないことが知られています。

新しいIETFhttpstateワーキンググループの作業成果物であるdraft-ietf-httpstate-cookieを確認する必要があります。

于 2010-03-07T09:24:50.300 に答える
3

リンクしたバージョンは廃止されました。このHTTP状態管理メカニズムのドキュメントは最新かつ最高のものであり、セミコロンを指定しています。将来の互換性のためにコンマを受け入れる必要があると書かれていますが、これは必須ではありません。

注:下位互換性のために、Cookieヘッダーの区切り文字はどこでもセミコロン(;)です。サーバーは、将来の互換性のために、Cookie値間の区切り文字としてコンマ(、)も受け入れる必要があります。

于 2010-03-07T00:07:12.587 に答える
0

(標準の正確さに関係なく)望ましい動作を実現するための最も簡単な解決策は、HttpContext.Request.Headersからこの情報を正しく解析し、修正された情報をHttpContext.Request.Cookiesに配置するHttpModuleを作成することだと思います。

于 2010-03-07T00:24:05.760 に答える