图解HTTP总结

主要梳理下简单的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,多用途因特网邮件扩展),允许邮件处理文本、图片、视频等多个不同类型的数据。
多部分对象集合包含的对象如下:

  • multipart/form-data
    在Web表单文件上传时使用
Paste_Image.png
  • multipart/byteranges
    状态码206(Partial Content,部分内容)响应报文包含多个范围的内容时使用。
Paste_Image.png
Paste_Image.png

HTTP状态码

Paste_Image.png

状态码详解

  • 2XX 成功

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

  • 3XX重定向

  • 301 Moved Permanently 永久性重定向。
    好处:
    1,没有网址规范化问题:当有几个不同的URL指向同一个页面时,告诉搜索引擎哪个URL才是你想要
    2,SEO(搜索引擎优化)中提到一点:如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的PageRank等信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。

  • 302 Found 临时性重定向。
    SPAM(搜索引擎垃圾技术)

  • 303 See Other,表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。
    PS:
    1)当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送
    2)301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都会这么做。

  • 304 Not Modified

  • 307 Temporary Redirect 会遵照浏览器标准,不会从POST变成GET。
    个人理解:协议中这么多很多类似的跳转,302现在被大量使用,http1.1出现了303&307,应该是对302的细分出两个新的状态码,出发点是想让303&307替代302,但是现实是很多项目都是使用302。还有一点POST重定向的场景是否很多。

  • 4XX客户端错误:4xx的响应结果表明客户端是发生错误的原因所在

  • 400 Bad Request
    表示请求报文中存在语法错误。

  • 401 Unauthorized 表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息

  • 403 Forbidden 表明对请求资源的访问被服务器拒绝

  • 404 Not Found 表明服务器上无法找到请求资源

  • 5XX服务器错误 表明服务器本身发生错误

  • 500 Internal Server Error 表明服务器端在执行请求时发生了错误

  • 503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端
    PS:状态码和状况的不一致时,需要前后端把响应情况都要提前自定义好。如果是返回页面,最好做拦截,不要直接返回没有任何样式的响应。比如我们的404页面和500页面

与http协作的WEB服务器

代理、缓存代理

HTTP 首部

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

  • 4种HTTP首部字段类型
    1)通用首部字段(General Header Fields)
    请求报文和响应报文两方都会使用的首部
    2)请求首部字段(Request Header Fields)
    从客户端向服务器端发送请求报文时使用的首部。
    3)响应首部字段(Response Header Fields)
    从服务器端向客户端返回响应报文时使用的首部
    4)实体首部字段(Entity Header Fields)
    针对请求报文和响应报文的实体部分使用的首部

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容