`

304 Not Modified状态码

阅读更多
在 Response-Header 中加上这几项:

Last-Modified: Wed, 18 Jun 2008 14:22:27 GMT
Cache-Control: max-age=600
Expires: Wed, 18 Jun 2008 14:48:39 GMT
Date: Wed, 18 Jun 2008 14:38:39 GMT

其中 Last-Modified 后面的日期是上次更新 config 的时间,Date 后面是当前时间,Expires 后面是当前时间 + 10分钟,10分钟就是 Cache-Control 后面的 max-age,单位是秒。因为看到 GAE 对 static 文件的 Cache 时间也是10分钟,所以我使用了这个数字。

Last-Modified

如果客户端收到的 Response 中包含 Last-Modified,那么下次 request 的时候就会在 Request Header 中包含 If-Modified-Since 字段,值就是上次服务器发送的 Last-Modified,服务器端会判断上次的 config 时间是否比 If-Modified-Since 晚。如果自上次 request 之后又更新了 config,那么服务器就会返回完整的内容;如果期间没有更新 config,那么服务器就没必要返回完整的内容,只需要向客户端发送一个 304 Not Modified 状态码就可以了。

Cache-Control、Date 和 Expires

这几个参数的组合,表示告诉浏览器:这个文件在多长时间之内不会更改,在这个时间内不需要再 request,保守起见,我设置了10分钟。

浏览器行为

如果只是在网站的链接之间 click click click,那么浏览器会完全遵守上述行为。这样可以尽可能地减少请求次数,以及 response 的数据量。

如果在某个页面点击了浏览器的刷新按钮或者按 F5,浏览器会忽略 Expires 时间,把该页面需要的所有的文件都重新请求一遍。

如果按住 Ctrl 再刷新或者 Ctrl-F5 (俗称强制刷新),浏览器将不会发送 Last-Modified Header,将所有需要的文件请求一遍,服务器会返回文件的完整内容,而不是仅仅一个 304 Not Modified 状态码。

后记

经初步观察,现在浏览器不会每次都彪呼呼地去请求一大堆 css、jpg、gif 文件了,浏览器也不会每次都脑残地返回完整内容了,看来是有效了。

分享到:
评论

相关推荐

    Web应用安全:HTTP状态码.pptx

    304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存 404 Not Found 未找到资源 501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务 200 OK 服务器成功处理了请求(这个是我们...

    HTTP服务器状态码定义.doc

    304 Not Modified 如果客户端成功执行了条件GET请求,而对应文件自If-Modified- Since域所指定的日期以来就没有更新过,服务器应当回应此状态码,而不是将实体主体 发送给客户端。回应标题域中只应包括一些相关信息...

    statuscode:快速找到http状态代码的含义

    状态码 一个命令行应用程序,可快速查找http状态代码的含义。安装 $ npm install -g status-code用法 $ statuscode [options] 参考执照麻省理工学院

    http-codes:HTTP 状态码

    Status208 Already Reported226 IM Used300 Multiple Choices301 Moved Permanently302 Found303 See Other304 Not Modified305 Use Proxy306 (Unused)307 Temporary Redirect308 Permanent Redirect

    Http1.1超文本传输协议中文版

    10.3.5 304 没有被改变(Not Modified) 62 10.3.6 305 使用代理服务器 (User Proxy) 63 10.3.7 306没有使用的(unused) 63 10.3.8 307临时重发(Temporary Redirect) 63 10.4 客户错误 4xx 63 10.4.1 400 坏请求...

    HTTP协议详解

    10.3.5 304 没有被改变(Not Modified) 10.3.6 305 使用代理服务器 (User Proxy) 10.3.7 306没有使用的(unused) 10.3.8 307临时重发(Temporary Redirect) 10.4 客户错误 4xx 10.4.1 400 坏请求(Bad Request) ...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... 命令和参数之间必需用空格隔...

    高清监控系统兼容所有网络摄像机

    Stream=码流管理 Storage=存储管理 Accounts=用户管理 Network=网络管理 PTZ=云台管理 Exit=退出 ;系统管理 IPCam Setting=摄像机设置 Ok=确定 Cancel=取消 System Setting=系统设置 Maintenance=系统维护 Logs=...

    java-servlet-api.doc

    你可以把Servlet理解成Server上的applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。 Servlet与applets不同的地方是,它不运行在Web浏览器或其他图形化的用户界面上。Servlet通过...

    C++MFC教程

    当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义...

    大名鼎鼎SWFUpload- Flash+JS 上传

     modificationdate : Date, // The date the file was last modified  filestatus : number, // The file's current status. Use SWFUpload.FILE_STATUS to interpret the value.  } [编辑本段]SWFUpload中的...

Global site tag (gtag.js) - Google Analytics