HTTP协议简析

图解HTTP


http.png

了解Web以及网络基础

HTTP协议最初是为了科学家共享知识而发明一种网络通信协议。


http001.png

网络基础TCP/IP

目前互联网采用的网络协议是tcp/ip协议族,也就是我们常说的4层协议栈。
TCP/IP协议栈与ISO七层协议栈不同,只有应用层、传输层、网络层、链路层。其中HTTP协议处于应用层,TCP/UDP处于传输层,IP网络处于网络层,通信电缆等处于物理链路层。
TCP/IP的通信传输流如图所示:


http002.png

由于是分层结构,所以虽然数据按照通信传输流的方向进行传输,但是在某个层上看,相当于同层无缝传输。TCP/IP的通信针对上下层都是使用接口进行通信交流的。

TCP/IP的三次握手协议

TCP协议是确保可靠的,UDP协议并不能确保可靠传输。HTTP是基于TCP协议的,一般的流媒体视频等较多是基于UDP的。为了能够达到准确无误地将信息送达目的地,TCP协议采用了三次握手的策略。


http003.png

上图为TCP协议的三次握手过程图。Client端向Server发送链接请求,server接收到之后回复一个ACK(我知道你了),并且发送一个SYN(我也想和你链接),Client收到Server的回复之后,再向Server发一个ACK,表明已经收到了Server的回信。这样,一个TCP链接就建立起来的。
HTTP是无状态的协议,所以TCP链接也会随着HTTP的断开而断开,这样会导致非常严重的多次重连。为了避免每次HTTP链接都需要重连TCP,目前广泛采用一种HTTP协议的改进版本1.1版,HTTP1.1版可以获取持久连接。

HTTP协议详解

HTTP请求

HTTP的报文分为两类,一类是Client端发送的请求报文,一类是Server端回复的响应报文。
看一个简单的请求报文:


http004.png

HTTP请求报文包括:

  • 请求方法:GET\POST\DELETE...
  • 请求资源URI
  • HTTP协议版本
  • 请求报文首部字段
  • 内容实体:

请求方法是告知服务器意图的HTTP方法。主要包括POST、GET、PUT、HEAD、DELETE等方法。目前主要在用的是POST和GET,主要区分是POST不会讲请求实体内容添加到URL链接上,而GET会将请求实体添加到URL链接上。
URI用于定位请求的资源。用户到底想要获取什么,由URI决定。
协议版本目前主流是1.1版,是1.0的改进版
首部字段和内容实体内容较多,稍后详细分析。这是HTTP最繁杂的内容,也是需要重点掌握的。

HTTP响应

有请求必然有响应。HTTP响应报文如下:


http005.png


这里具体拿出HTTP状态码来进行分析。响应的首部字段包含了一些响应的基本信息,包括时间、长度、类型等。响应的主体就是浏览器解析的部分了。

HTTP的状态码分为5种,从1XX到5XX。相信大家最熟悉的莫过于404了,不论是访问Google还是youtube,返回的都是404,你懂的...

 类别短语原因
1XXInformational接收的请求正在处理
2XXSuccess请求正常处理完毕
3XXRedirection请求重定向
4XXClient Error客户端请求错误
5XXServer Error服务器端错误

一般我们碰到比较多的都是2XX、4XX和5XX。如果返回2XX,说明一切OK,如果返回4XX,说明是你的问题(我有点不明白了,访问GOOGLE难道是我的问题?),如果返回5XX,一般都是服务器挂了...

你需要了解的Cookie

我们已经知道,HTTP是无状态协议。说的直白一点,就是翻脸不认人。刚刚可能还打得火热,一会儿工夫就不认识你了...为了提升HTTP协议的效率,Http协议采用了Cookie这个概念。cookie这个东西,更像一个通行证,服务器在回复Client的请求时给Client一个Cookie,下次Client再次请求时,带上这个Cookie,服务器就能认出这个Client了。


http006.png

所以为啥有时候需要获取最新的Server信息的时候需要清除cookie,因为我们需要让服务器记不住Client与它曾经认识过...

HTTP首部

HTTP首部字段之多,简直令人发指...不过好在大部分的首部字段的名字都与其意义一样,容易理解。当然,也不可能全部都记住,需要的时候查一查就好了,只需要记住一些常用的首部字段即可。
本人从事的是CDN加速服务,这里主要讲解一些与CDN加速原理有关的字段。

通用首部字段

通用首部字段指的是请求和响应报文都会用到的首部字段。


http007.png

重点讲解一下Cache-Control字段。这个字段用于控制缓存机制。你有没有发现过,有时候第一次打开某个网页非常慢,但是第二次打开就快多了,这就是因为有缓存机制的原因。


http012.png

客户端可以请求缓存,服务器端可以选择不缓存,或者选择设置缓存时间等。

请求首部字段

顾名思义,指的是请求报文专用首部字段


http008.png

If-XXX字段称为条件请求字段。If-Match用于比较报文实体。If-Modified-since用于判断请求的资源是否在某个时间段内被修改过(这个字段在CDN行业非常重要,主要用于判断一个资源的新鲜度)
User-Agent表示的是浏览器的信息。可以修改这个信息来改变服务器对客户端浏览器的判断。比如使用的是电脑,修改这个字段为手机UC浏览器的User-Agent信息,服务器端可能会给你返回手机端的网页...

响应首部字段

指的是响应报文专用首部字段


http009.png

http010.png

E-tag是某个资源的匹配信息,如果两个响应的E-tag一致,说明两次请求获取的资源是同一份,内容未变。所以在CDN中可以判定此资源无需重新获取缓存。

实体首部字段

请求报文和响应报文实体部分使用的首部字段


http011.png

Expires表示实体的过期时间,一旦这个时间到了,不管源站资源是否与之相同,必须去源站重新获取。

更近一步——HTTPS

HTTP是不安全的协议。一旦被截获,可以随便篡改。

  • HTTP使用明文,内容可能被窃听
  • 不验证通信方的身份(可以盗用别人的cookie)
  • 无法证明报文的完整性

http013.png

为了保障HTTP的安全性,目前越来越流行使用HTTPS,HTTPS就是HTTP+SSL。


http014.png

有了HTTPS,就相当于建立了一个加密通道,HTTP通信的内容再也不会被窃听、篡改了!

总结

HTTP协议在现代的互联网系统中扮演着举足轻重的角色,可以说没有HTTP协议,也就没有如今的互联网繁荣。认识HTTP协议对于每个IT从业人员,特别是互联网从业人员都是非常重要的一课。《图解HTTP》这本书使用大量的图片来讲解HTTP协议的内容精髓,值得一读!



文/飞扬小初(简书作者)
原文链接:http://www.jianshu.com/p/05554734444f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值