私はそれをどのように実装しましたか?コードは1年以上、複数のブラウザで動作しているので、かなり信頼できると思います。これはRFC 2616に基づいており、さまざまなブラウザが何時に何を送信していたかを観察することによって行われます。ここでは、これを処理する私のサーバー・ロジックの抜粋です
server_etag = gen_etag_for_this_file(myfile)
etag_from_browser = get_header("Etag")
if etag_from_browser does not exist:
etag_from_browser = get_header("If-None-Match")
if the browser has quoted the etag:
strip the quotes (e.g. "foo" --> foo)
set server_etag into http header
if etag_from_browser matches server_etag
send 304 return code to browser
:
はここで擬似コードです。
/* the client should set either Etag or If-None-Match */
/* some clients quote the parm, strip quotes if so */
mketag(etag, &sb);
etagin = apr_table_get(r->headers_in, "Etag");
if (etagin == NULL)
etagin = apr_table_get(r->headers_in, "If-None-Match");
if (etag != NULL && etag[0] == '"') {
int sl;
sl = strlen(etag);
memmove(etag, etag+1, sl+1);
etag[sl-2] = 0;
logit(2,"etag=:%s:",etag);
}
...
apr_table_add(r->headers_out, "ETag", etag);
...
if (etagin != NULL && strcmp(etagin, etag) == 0) {
/* if the etag matches, we return a 304 */
rc = HTTP_NOT_MODIFIED;
}
あなたがetag generationに関するいくつかの助けをしたいのであれば、別の質問を投稿してください。 HTH!キャッシュ制御に関する
私は304レスポンスを送信するときに追加したいのですが、ヘッダーのみを送信し、コンテンツは送信しないでください。 – GateKiller