2019独角兽企业重金招聘Python工程师标准>>>

http请求头和响应头可以避免重复的资源(css,js,图片,文本等),浏览器一般访问这些静态资源之后会缓存一段时间,静态资源一般是不会经常改变的,而且这些资源比较大,比较多的情况会影响加载效果,所以要避免多次从网络加载这些文件。

一个完整的请求(本文作于2014-11-12,但资源时间是2014-10-30)

GET /assets/github-208780c72d87b50a0c3b932094adabe0ed787e29f3a60ddf60b7a8c0b66aeaff.css HTTP/1.1
Host: assets-cdn.github.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/css,*/*;q=0.1
If-Modified-Since: Thu, 30 Oct 2014 22:36:24 GMT
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Referer: https://github.com/
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8
Cookie: logged_in=no; _octo=GH1.1.1132014134.1407914921; _ga=GA1.2.249759956.1407914919

服务器响应

HTTP/1.1 304 Not Modified
Date: Sun, 02 Nov 2014 01:59:39 GMT
Server: Apache
Via: 1.1 varnish
Last-Modified: Thu, 30 Oct 2014 22:36:24 GMT
Cache-Control: max-age=31536000, public
Expires: Sat, 31 Oct 2015 20:46:08 GMT
Age: 105210

浏览器资源访问过程:

1.当访问静态资源文件时,首先使用url hashcode作为key查询本地资源缓存。

2.如果没找到资源,那么直接访问浏览器,然后将请求的资源文件缓存并载入到html中。

3.如果找到资源,读该资源在服务器创建的的时间,加入http响应头If-Modified-Since: Thu, 30 Oct 2014 22:36:24 GMT,并发送到服务器。

4.服务器根据url进行查找资源,如果未找到,返回404。否则读取资源创建时间,给出响应状态吗。

5.浏览器如果收到404,会清空hascode对应的缓存,资源无法加载到html

6.浏览器如果收到 304,检查Last-Modified:Thu, 30 Oct 2014 22:36:24 GMT,如果(Last-Modified=If-Modified-Since),表示文件未被修改,则直接使用本地缓存加载到html.

7.比较之后,如果服务器>浏览器,则重新请求资源。

8.如果是200,则进行本地缓存更新  Last-Modified>If-Modified-Since,并加载到html。

这个过程看似复杂,但提高了资源的访问效率


额外浅谈一下验证码问题。

验证码刷新问题也是这个原理,一般来说验证码生成之后会缓存到服务上,他的创建时间和浏览器读取到的创建时间进行比较后,往往不在请求服务器。

验证码更新问题的结局,因为无法设置If-Modified-Since,但可以修改url,当url不行同时hashcode是找不到资源的,他会再次请求的,比如我们使用js,可以这样改变验证码的url, 

var url=http://hostname:[port]/xxx/checkcode.php?rnd=Math.random();
img.src=url 。

转载于:https://my.oschina.net/ososchina/blog/339896

Http Status 304响应状态的资源更新机制相关推荐

  1. 理解 K8s 资源更新机制,从一个 OpenKruise 用户疑问开始

    作者 | 酒祝  阿里云技术专家 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment / StatefulSet 等 ...

  2. 从OpenKruise用户疑问开始理解K8s资源更新机制

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kuberne ...

  3. 服务器304响应,网络---关于HTTP 304状态码的理解-Go语言中文社区

    有时候我们使用七牛过程中会遇到对浏览器缓存下请求资源返回304的情况流量的计费的情况,这里就需要了解HTTP 304的响应状态的资源更新机制. 首先看一个关于304请求的响应头的信息,这里面有两个比较 ...

  4. nod找不到服务器,Nodejs服务器:无法加载资源:服务器响应状态为404(未找到)...

    我在节点中设置了一个Web服务器 . var app = express(); app.use(express.static(PUBLIC_PATH)); server = require('http ...

  5. xsmax 拨号失败服务器无响应,加载资源失败:服务器响应状态为404(未找到)和nodejs...

    我试图在nodejs服务器上获取html元素数据.但是我一直在浏览器中收到很多错误.这是我的html页面.加载资源失败:服务器响应状态为404(未找到)和nodejs SimplyBPM | Cust ...

  6. ABAP应用服务器的HTTP响应状态码(Status Code)

    最近Jerry参与了SAP Commerce Cloud的标准开发,我们调用微软云平台Azure上创建Lambda Function的Restful API来创建Lambda Function: 在开 ...

  7. p服务器不响应,无法加载资源:服务器响应状态为500

    这里我; m使用角度与mvc当我; m试图发送数据我收到错误如上所示,我也得到一些脚本errr无法加载资源:服务器响应状态为500 $scope.DeleteCustomer = function(l ...

  8. HTML资源未找到,加载资源失败:服务器响应状态为404(未找到)

    我正在关注有关Javascript和Ajax的Lynda教程,并在主题为"使用同步XHR请求"的主题上挂起了这个问题.加载资源失败:服务器响应状态为404(未找到) 基本上HTML ...

  9. 500000服务器响应错误,加载资源失败:服务器响应状态为500(内部服务器错误)Django...

    我在S3文件夹中运行Html文件,在HTML文件中运行/打开HTML文件时出现AJAX调用I我正在低于错误.加载资源失败:服务器响应状态为500(内部服务器错误)Django 无法加载资源:服务器按照 ...

最新文章

  1. Java 刷题必须了解的 API
  2. Notion 如何进行数据迁移
  3. 【JVM】JVM系列之JVM体系(一)
  4. C 语言中的 feof()函数
  5. Git环境搭建与基本使用方法
  6. 利用freopen()函数和fc命令简化程序调试
  7. SAP Spartacus split view控制同屏显示最大视图数的配置
  8. 使用FreeCookies 控制浏览器cookies及修改http响应内容
  9. c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)
  10. Struts2_4_ActionMap与ValueStack详解_Struct2的EL及常用标签_防止表单数据重复提交
  11. 别学了!这 5 种即将消亡的编程语言
  12. 刷题笔记(2) 将数组中的数字组合成一个最小的数
  13. 2007年网络防病毒评测_序
  14. 数据结构:线性表理论题目集
  15. C/c++输入输出函数
  16. 主题:内存的管理 DATE:2004-09-17
  17. HP大中华区总裁孙振耀退休感言---关于职场(值得深思)
  18. YL70 远程I/O模块,可以用来测量四路开关量信号,并有四路继电器信号输出
  19. 分享一个H5使用JQ首字母排序的通讯录
  20. L1-SVD实现DOA

热门文章

  1. newLisp使用初步
  2. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III
  3. 力扣——按递增顺序显示卡牌
  4. Tortoisegit和GitHub使用入门
  5. echarts图例(legend)
  6. JavaWeb中的简单分页
  7. jaxp的Sax解析
  8. android学习---LinearLayout
  9. 2013年3月空调类品牌网络知名度排名
  10. 标准模板库(STL)学习指南之List链表