gpt4 book ai didi

language-agnostic - 如何知道何时发送 304 Not Modified 响应

转载 作者:可可西里 更新时间:2023-11-01 15:10:00 26 4
gpt4 key购买 nike

我正在编写一个资源处理方法来控制对各种文件的访问,并且我希望能够利用浏览器的缓存。我的问题有两个:

  1. 为了确定我是否应该发送 304 响应,我需要检查哪些明确的 HTTP header ,以及当我检查它们时我在寻找什么?

  2. 此外,当我最初将文件(如“Last-Modified”)作为 200 响应发送时,是否需要发送任何 header ?

一些伪代码可能是最有用的答案。


缓存控制 header 呢?它的各种可能值是否会影响您发送给客户端的内容(即 max-age),或者仅应遵守 if-modified-since?

最佳答案

下面是我的实现方式。该代码已经运行了一年多一点,并且适用于多种浏览器,所以我认为它非常可靠。这是基于 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 headerif 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 生成的帮助,请发布另一个问题,我也会挖掘出一些代码来执行此操作。 HTH!

关于language-agnostic - 如何知道何时发送 304 Not Modified 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com