2011-10-13 1 views
8

http要求の一部としてファイルが返されるとします。そのファイルのETagを作成する正しい方法は何ですか?C#でHTTP ETagを生成するにはどうすればよいですか?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19

私はそれがダニに変換されたファイルの最終書き込み時刻を使用して、いくつかの方法

+2

意味的にコンテンツが変更されるとETagが変更されるはずです...しかし、ETagは異なるURLや重複したファイルの異なるタイムスタンプ上でユニークでなければならないので、安全な側にファイルをハッシュし、タイムスタンプとURLとハッシュを連結してファイルを再結合する必要があります。 – Yahia

+0

@Yahiaあなたはこのコメントに答えを書くべきです – Simon

+0

これは今すぐ:-) – Yahia

答えて

12

答えのハッシュを使用してhttps://github.com/NancyFx/Nancy/blob/master/src/Nancy/Responses/GenericFileResponse.cs

  • を何でそれが依存していることです。

    Etagsには弱いものと強いものの2種類があります。弱いものは特定の条件付き操作をさせますが、それらのほとんどは強いetagを必要とします。

    強力なエタグに対する唯一の制限は、何らかの理由で表現が変化すると、エタグも同様です。ファイルの場合、ハッシュを生成することができますが、生成する間にエンティティをメモリ内に保持する必要があります。あるいは、単にコンテンツをストリーミングして、Etagを後続のhttpヘッダーとして追加することもできますが、現在のところ(非常に便利で非常に有用な)機能をサポートしているサーバーはほとんどありません。

    ティックの解像度は低く、内容が異なっていても、同じファイルに2回連続して書き込むと同じティック数になる可能性があります。その段階で、エタグが強く、泥水に入っていると、エタグは無効になります。本当にLast-Modifiedと同じ問題です。たいていのHTTPサーバーが扱う方法は、そのプロパティの複数のもの、つまりタイムスタンプ、サイズ、おそらくファイルオブジェクトID(Apacheのiノード、おそらくNTのオブジェクトストアエントリへのフルパスを追加するファイル)と、 IISはその値にもカウンタを追加します。したがって、サーバー上の2つの構成の変更により、何かが変化した場合に異なるetagsが生成されます)。

    id +バージョンは、ある種のデータベースを使用している場合、強力なエタグでなければなりません(あなたが持っているコンテンツは、それぞれが独立して変更できる複数のものの集まりではありません)。

    これは本当にあなたのシナリオに依存し、書いているときにファイルのハッシュを維持しておくと、他の多くの理由から非常に便利な機能ですとき内容の変更

  • 8

    意味的にETagを変更する必要があります。

    をので、ハッシュは、適切なようだ...しかし、ETagのもそうであることを...別のURLおよび/または重複したファイルの異なるタイムスタンプに一意である必要があります安全な側でファイルをハッシュし、最後の変更のタイムスタンプと連結し、URLとハッシュを再度連結します。

    関連する問題