Http Status 304响应状态的资源更新机制
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响应状态的资源更新机制相关推荐
- 理解 K8s 资源更新机制,从一个 OpenKruise 用户疑问开始
作者 | 酒祝 阿里云技术专家 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment / StatefulSet 等 ...
- 从OpenKruise用户疑问开始理解K8s资源更新机制
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kuberne ...
- 服务器304响应,网络---关于HTTP 304状态码的理解-Go语言中文社区
有时候我们使用七牛过程中会遇到对浏览器缓存下请求资源返回304的情况流量的计费的情况,这里就需要了解HTTP 304的响应状态的资源更新机制. 首先看一个关于304请求的响应头的信息,这里面有两个比较 ...
- nod找不到服务器,Nodejs服务器:无法加载资源:服务器响应状态为404(未找到)...
我在节点中设置了一个Web服务器 . var app = express(); app.use(express.static(PUBLIC_PATH)); server = require('http ...
- xsmax 拨号失败服务器无响应,加载资源失败:服务器响应状态为404(未找到)和nodejs...
我试图在nodejs服务器上获取html元素数据.但是我一直在浏览器中收到很多错误.这是我的html页面.加载资源失败:服务器响应状态为404(未找到)和nodejs SimplyBPM | Cust ...
- ABAP应用服务器的HTTP响应状态码(Status Code)
最近Jerry参与了SAP Commerce Cloud的标准开发,我们调用微软云平台Azure上创建Lambda Function的Restful API来创建Lambda Function: 在开 ...
- p服务器不响应,无法加载资源:服务器响应状态为500
这里我; m使用角度与mvc当我; m试图发送数据我收到错误如上所示,我也得到一些脚本errr无法加载资源:服务器响应状态为500 $scope.DeleteCustomer = function(l ...
- HTML资源未找到,加载资源失败:服务器响应状态为404(未找到)
我正在关注有关Javascript和Ajax的Lynda教程,并在主题为"使用同步XHR请求"的主题上挂起了这个问题.加载资源失败:服务器响应状态为404(未找到) 基本上HTML ...
- 500000服务器响应错误,加载资源失败:服务器响应状态为500(内部服务器错误)Django...
我在S3文件夹中运行Html文件,在HTML文件中运行/打开HTML文件时出现AJAX调用I我正在低于错误.加载资源失败:服务器响应状态为500(内部服务器错误)Django 无法加载资源:服务器按照 ...
最新文章
- Java 刷题必须了解的 API
- Notion 如何进行数据迁移
- 【JVM】JVM系列之JVM体系(一)
- C 语言中的 feof()函数
- Git环境搭建与基本使用方法
- 利用freopen()函数和fc命令简化程序调试
- SAP Spartacus split view控制同屏显示最大视图数的配置
- 使用FreeCookies 控制浏览器cookies及修改http响应内容
- c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)
- Struts2_4_ActionMap与ValueStack详解_Struct2的EL及常用标签_防止表单数据重复提交
- 别学了!这 5 种即将消亡的编程语言
- 刷题笔记(2) 将数组中的数字组合成一个最小的数
- 2007年网络防病毒评测_序
- 数据结构:线性表理论题目集
- C/c++输入输出函数
- 主题:内存的管理 DATE:2004-09-17
- HP大中华区总裁孙振耀退休感言---关于职场(值得深思)
- YL70 远程I/O模块,可以用来测量四路开关量信号,并有四路继电器信号输出
- 分享一个H5使用JQ首字母排序的通讯录
- L1-SVD实现DOA