图解HTTP总结

2016-05-23  本文已影响387人  real勾玉

主要梳理下简单的HTTP协议的基础知识,供大家参考

HTTP是什么

URI vs URL

uri: uniform resource identifier统一资源标识符
url: uniform resource locator统一资源定位符,是通过web浏览器访问资源的
urn: uniform resource name,统一资源命名,是通过名字来标识资源


Paste_Image.png

HTTP是无状态的,如何保存状态?

url带查询参数
cookie

HTTP有哪些方法

GET: 用来请求访问已被URI识别的资源
POST: 用来传输实体的主体
PUT: 用来传输文件
HEAD: 获取报文首部,不返回报文主体部分
DELETE:删除文件
OPTIONS: 询问支持的方法

Paste_Image.png

TRACE:追踪路径
CONNECT:要求用隧道协议链接代理

持久连接 keep-alive

只要任意一端没有明确提出断开连接,则保持TCP连接状态
管线化:并发请求

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文
请求端的HTTP报文叫做请求报文,响应端的叫做响应报文。HTTP报文本身是由多行(用CR[Carriage Return,回车符:16进制0x0d]+LF[Line Feed,换行符:16进制0x0a]作换行符)数据构成的字符串文本。

1,请求报文和响应报文的结构

Paste_Image.png Paste_Image.png

ps:一般4种首部:通用首部、请求首部、响应首部和实体首部
常用的内容编码:
gzip(GUN zip) compress(UNIX系统的标准压缩)deflate(zlib)identity(不进行编码)
2,分割发送的分块传输编码
HTTP/1.1中存在一种称为传输编码(Transfer Coding)的机制,可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。

发送多种数据的多部分对象集合(multipart)

MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展),允许邮件处理文本、图片、视频等多个不同类型的数据。
多部分对象集合包含的对象如下:

Paste_Image.png Paste_Image.png Paste_Image.png

HTTP状态码

Paste_Image.png
状态码详解

200 OK
204 No Content 一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新消息内容的情况下使用
206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。

与http协作的WEB服务器

代理、缓存代理

HTTP 首部

首部字段结构: 首部字段名: 字段值
PS:HTTP首部字段重复了,这种情况是根据浏览器内部处理逻辑的不同,结果可能并不一致。有的是优先处理第一次出现的首部字段,有的则会优先处理最后出现的首部字段。故要尽量不要重复

HTTP/1.1规范定义了如下47种首部字段
通用首部字段:请求报文和响应报文双方都会使用的首部

Paste_Image.png

请求首部字段

Paste_Image.png

响应首部字段

Paste_Image.png Paste_Image.png

实体首部字段

Paste_Image.png

主要说明下控制缓存的首部字段的区别:
1,Cache-Control
Cache-Control: private, max-age=0, no-cache
缓存请求指令

Paste_Image.png Paste_Image.png

缓存响应指令

Paste_Image.png

表示是否能缓存的指令:
1)public:表明其他用户也可利用缓存
2)private:响应只以特定的用户作为对象
3)no-cache:为了防止从缓存中返回过期的资源。表示客户端将不会接收缓存过的响应
4)no-store:暗示请求(和对应的响应)或响应中包含机密信息。该指令规定缓存不能在本地存储请求或响应的任一部分。
PS:从字面意思看很容易把no-cache误解成为不缓存,但事实上no-cache代表不缓存过期的资源,缓存会想服务器进行有效期确认后处理资源,也许称为do-not-server-from-cache-without-revalidation更合适。no-store才是真正地不进行缓存,注意区别
5)s-maxage:功能和max-age指令相同,不同点在于,s-maxage指令只适用于供多位用户使用的公共缓存服务器。即,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。当使用s-maxage指令后,则直接忽略对Expires首部字段及max-age指令的处理
6)max-age:判定缓存资源的缓存时间数值比制定时间的数值更小,则客户端就接收缓存的资源。如果max-age值为0,那么缓存服务器通常需要将请求转发给源服务器。如果同时存在Expires首部字段的情况时,会优先处理max-age指令,而忽略掉Expires首部字段,1.0版本相反。
2,Pragma是http/1.1之前版本的历史遗留字段,仅作为与http/1.0的向后兼容而定义。
Cache-Control: no-cache
Pragma: no-cache
3,ETag:告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值。
强ETag值,不论实体发生多么细微的变化都会改变其值
弱ETag值,只用于提示资源是否相同。只有资源发生了根本改变,产生差异时才会改变。会在字段最开始处加W/。例:ETag: W/"usagi-1234"
配合使用首部:
If-Match
If-None-Match
If-Range
4,If-xxx这种样式的请求首部字段,称为条件请求。
If-Modified-Since
If-Unmodified-Since
If-Range:告知服务器若指定的If-Range字段值(ETag值或时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源
5,Expires:将资源失效的日期告知客户端。
6,Last-Modified

上一篇下一篇

猜你喜欢

热点阅读