1

Q1 - これは .net のバグですか、それともテストに使用している Web サーバー ( Mongoose ) がヘッダー フィールド Last-Modified を適切な形式でサーバーにアップロードしていませんか?

  • したがって、C# VS2008 で呼び出しを行うと、次のようになります。
    response = (HttpWebResponse)request.GetResponse();
    Console.Out.WriteLine(" - LM = " + response.LastModified);

  • 私は得る: ProtocolViolationException: ヘッダーの日付文字列の値が無効です

  • HTTPLiveHeaders を使用して、last-modified の HTTP ヘッドを調べると、次のように表示されます。

    最終更新日: 2009 年 11 月 20 日 (金) 15:53:16 東オーストラリア標準時

Q2 - Mongoose サーバーの使用に依存する単体テストでこの問題が発生しないように処理する方法に関する提案はありますか?

Q3 - これが実稼働のインターネット Web サーバーで頻繁に発生する可能性があるかどうか知っている人はいますか? つまり、一部の Web サーバーが Last-Modified フィールドを .net が躊躇する別の種類の形式で返すと仮定する必要がありますか?

4

2 に答える 2

2

実際には、GMT 以外は無効です。

「すべての HTTP 日付/時刻スタンプは、例外なく、グリニッジ標準時 (GMT) で表す必要があります。」( RFC 2616、セクション 3.3.1、パラグラフ 5を参照)

于 2009-11-24T08:09:51.400 に答える
1

Q1)

RFC 2616セクション14を参照すると、Last-Modifiedヘッダーの定義が次のようになっていることがわかります。

Last-Modified = "Last-Modified" ":"HTTP-date

HTTP-dateは、同じRFCのセクション3で指定されています。

  Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
  Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
  Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

最初の形式はインターネット標準として推奨されており、RFC 1123 [8](RFC 822 [9]の更新)で定義されているものの固定長サブセットを表します。2番目の形式は一般的に使用されていますが、廃止されたRFC 850 [12]日付形式に基づいており、4桁の年がありません。日付値を解析するHTTP/1.1クライアントおよびサーバーは、3つの形式すべてを受け入れる必要があります(HTTP / 1.0との互換性のため)。ただし、ヘッダーフィールドでHTTP日付値を表すためのRFC1123形式のみを生成する必要があります。

ヘッダーの日付はこれらの最初の日付と一致し、タイムゾーンのみが異なって見えるため、RFC1123をチェックして合法かどうかを確認できます。タイムゾーンに関しては、これは述べています。

数値のタイムゾーンインジケータを使用する傾向が強く、実装ではタイムゾーン名の代わりに数値のタイムゾーンを使用する必要があります。ただし、すべての実装はいずれかの表記を受け入れる必要があります。タイムゾーン名を使用する場合は、RFC-822で定義されているとおりにする必要があります。

RFC 822セクション5から、ゾーンの定義を確認できます。

 zone        =  "UT"  / "GMT"                ; Universal Time
                                             ; North American : UT
             /  "EST" / "EDT"                ;  Eastern:  - 5/ - 4
             /  "CST" / "CDT"                ;  Central:  - 6/ - 5
             /  "MST" / "MDT"                ;  Mountain: - 7/ - 6
             /  "PST" / "PDT"                ;  Pacific:  - 8/ - 7
             /  1ALPHA                       ; Military: Z = UT;
                                             ;  A:-1; (J not used)
                                             ;  M:-12; N:+1; Y:+12
             / ( ("+" / "-") 4DIGIT )        ; Local differential
                                             ;  hours+min. (HHMM)

ヘッダーのタイムゾーンはここにリストされていないため、無効であり、サーバーが実際にプロトコルに違反していると結論付けることができます。したがって、例外は妥当であるように見えます。

Q2)

ヘッダーを有効に修正する方法でプロキシを配置するか、Mongooseサーバーを作成/保守している人に修正を依頼する(または自分で修正する)以外に、どのように処理できるかわかりません。オープンソースプロジェクトであるため、パッチを送信します)。

Q3)

.NETが呼び出しに問題を抱えているWebサーバーを(もしあったとしても)めったに見たことがないので、このタイプの問題は一般的にインターネットでは一般的ではないと思います。

于 2009-11-23T21:01:22.167 に答える