HTTP协议常用字段

转载 2015年11月17日 23:09:35

HTTP 协议中的 Transfer-Encoding这里写链接内容

http 304优化,了解客户端缓存

使用HMTL5 API监控前端性能

前端工程精粹(一):静态资源版本更新与缓存
浏览器缓存和304的冲突问题

状态码

100-199
200-299 成功
300-399 重定向,服务器资源被移除
400-499 客户端错误
500-599 服务器程序处理错误

HTTP协议详解(真的很经典)

常用字段

简介

 ETAG在HTTP协议中的定义是资源实体的标记(entity tag),强标识一个资源。是缓存过期的一种代替方案(IF-MODIFIED-SINCE,IF-UNMODIFIED-SINCE)。服务器端资源一旦改变,ETAG值需要跟着改变。但是协议没有规定ETAG的计算方法,可以任意实现。一般对应静态资源(静态URL或文件)采用MD5摘要方式较好。

ETAG与IF-MATCH,IF-NONE-MATCH配合实现缓存方案,代替IF-MODIFIED-SINCE,IF-UNMODIFIED-SINCE(另外)

资源(Resource):URL唯一标识的资源,一个URL对应一个资源。

实现原理
服务器端创建资源,生成ETAG,每次修改也更新ETAG。
客户端首次访问资源,服务器返回资源实体内容和在头区中返回ETAG值,客户端保存实体内容和ETAG值。
客户端再次访问资源的时候,在头域(header)中加入“If-match:etag值”指令。
服务器接受到请求后,检查资源的ETAG值是否与请求的If-match指定的etag值相同(强匹配),如果匹配则响应304 Not Modified,表示资源未改变,客户端可以直接使用前面请求中保存的资源,如果不匹配才返回资源实体(entity,也就是body体).或者:客户端再次访问资源的时候,在header中加入“If-None-Match:etag值”,如果服务器的ETAG值匹配客户端请求 的etag值则返回412,表示条件冲突,不匹配则返回实体内容。
客户端继续使用缓存的资源。
If-Match:匹配则返回实体内容,否则响应307,不返回实体内容。
If-None-Match:不匹配则返回实体内容,否则响应412错误。

ETag比Last-Modified和 Expires 的优势
Last-Modified和Expires都是时间作为判断资源是否改变的标志存在一些隐患。
在秒级以内多次修改,Last-Modified和Expires无法表示出来,因为Last-Modified和Expires最小粒度为秒级。
对资源多次修改,但是最后又修改回最初的内容,实际上内容并没有改变。
ETag值是根据实际内容变更才更新,所以可以更准确的标志资源。

实际应用

云存储中最为文件的tag,标记文件是否改变。一般使用MD5判断文件是否改变,也可以直接使用MD5值作为ETAG值。
问题:对大文件,修改一小部分内容后,更新ETAG,从新计算MD5,效率太低,解决方案啊~?

Expires头

什么是Expires头?

Expires存储的是一个用来控制缓存失效的日期。当浏览器看到响应中有一个Expires头时,它会和相应的组件一起保存到其缓存中,只要组件没有过期,浏览器就会使用缓存版本而不会进行任何的HTTP请求。Expires设置的日期格式必须为GMT(格林尼治标准时间)。

HTTP1.1协议中缓存的另一种选择

Expires存在着明显的不足。

首先,Expires头使用的是一个特定的时间,要求客户端和服务器端的时钟严格同步。何为严格同步?我们知道客户端的时间是可以修改的,如果服务器和客户端的时间不统一,这就导致有可能出现缓存提前失效的情况,存在不稳定性。其次,假如Expires的日期到来了,那么还需要在服务器配置中提供一个新的日期。

面对这种情况,HTTP1.1引入了Cache-Control头来克服Expires头的限制。Cache-Control使用max-age制定组件被缓存多久,使用秒为单位,例如Cache-Control:max-age=3600;表示组件将被缓存60分钟。如果max-age和Expires同时出现,则max-age有更高的优先级,浏览器会根据max-age的时间来确认缓存过期时间。

问题:

使用永久强缓存后(静态文件末尾添加md5戳),设置Expires为未来时间,但是静态文件还会出现304,如果让浏览器直接使用缓存。

工具

代理工具 :

charles
filldder

相关文章推荐

http请求头有哪些字段

>>请求头字段的具体含义 Accept:浏览器可接受的MIME类型。 Accept-Charset:浏览器可接受的字符集。 Accept-Encoding:浏览器能够进行解码的数据编码方式,...

Http字段含义

一、request请求Header简介 Accept:--客户机支持的类型 Accept-Charset:--采用的编码类型 Accept-Encoding:--客户机支持的数据压缩格式 Accept...

HTTP 头部字段

转自:http://xianglp.iteye.com/blog/902569 1、 Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所...

HTTP协议头字段

一、基础篇 HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/...

Http协议中常用字段总结(不定时完善中)

前段时间组里小伙伴儿跟我问起http协议的东西,感觉一顿抓狂,开始各种查资料。发现http协议的资料还是有很多的,但是很多字段的解释不是很详细,为了更好的学习,今天就汇总一下吧~ 1.Http协议概述...

HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头

用于HTTP请求中的常用请求头字段 Accept:用于高速服务器,客户机支持的数据类型 Accept-Charset:用于告诉服务器,客户机采用的编码格式 Accept-Encoding:用于告...

ALV中的fieldcat常用字段属性选项大全

字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:    默认值为0,可选值为1、2、3,既最大分3级别显示...

MySQL数据类型和常用字段属性总结

这篇文章主要介绍了MySQL数据类型和常用字段属性总结,本文总结了日期和时间数据类型、数值数据类型、字符串数据类型等,需要的朋友可以参考下 前言 好比C++中,定义int类型需要多少字...

MySQL数据类型和常用字段属性

好比C++中,定义int类型需要多少字节,定义double类型需要多少字节一样,MySQL对表每个列中的数据也会实行严格控制,这是数据驱动应用程序成功的关键。MySQL提供了一组可以赋给表中各个列的数...

ABAP syst常用字段

ABAP常用系统字段SYST2008-11-27 15:491. SY-PAGNO当前页号 2. SY-DATUM当前时间 3. SY-LINSZ当前报表宽度 4. SY-LINCT当前报表长度 5....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP协议常用字段
举报原因:
原因补充:

(最多只允许输入30个字)