美文网首页
图解HTTP读书笔记(二) 简单的HTTP协议

图解HTTP读书笔记(二) 简单的HTTP协议

作者: 浮桥小麦 | 来源:发表于2017-10-30 18:12 被阅读30次

前言:其它文章链接

图解HTTP读书笔记(一) 基础知识准备
1.什么是客户端什么是服务端?
客户端: 请求访问文本或图像等资源的一端
服务端: 提供资源响应的一端

2.请求的发起必定是客户端,服务端回复响应

我们来具体看看一个HTTP协议的请求
示例:

Snip20171030_15.png

1.客户端请求报文:


Snip20171030_16.png Snip20171030_18.png

请求首部字段及内容实体后面会做详细说明.

2.服务端响应报文:

Snip20171030_19.png Snip20171030_20.png

1.HTTP是不保存状态的协议
什么叫不保存状态?
答: 不保存状态,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存。 看下面的图更好理解:

Snip20171030_21.png

使用HTTP协议,每当有新的请求发送时, 都会有对应的新响应产生。 协议本身并不保留之前的一切请求货响应报文的信息。

如此设计,是为了更快地处理大量事务,确保协议的可伸缩性

但是随着Web的不断发展,因无状态而导致业务处理变得棘手的情况增多。 例如用户登录淘宝买东西,需要一直保存用户的登录状态一样。 HTTP为了实现期望的保持状态功能,引入了Cookie技术。 Cookie技术可以管理状态。 在后面我们再详细介绍Cookie技术。

2.请求URI定位资源
在充分理解URI 和 URL 的基础上,可以把URI理解为URL

HTTP 协议使用URI定位互联网上的资源,正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。

Snip20171030_22.png

指定请求URI的方式有很多种:

Snip20171030_27.png

3.告知服务器意图的 HTTP 方法
说来高大上,其实就是我们平时用的GET,POST...请求。 我们再来看看这些方法.

1.GET :获取资源
GET 方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。就是说请求什么资源,那就保持原样返回。

Snip20171030_28.png

2.POST :传输实体主体
POST 方法用来传输实体的主体,虽然用GET 方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能和GET很相似,但POST的主要目的并不是获取响应的主体内容。

Snip20171030_29.png Snip20171030_30.png

3.PUT :传输文件
PUT 方法用来传输文件,就像FTP协议的文件上传一样, 要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
PUT 方法的局限是自身不带验证机制,任何人都可上传文件,存在安全性问题,因此一般的Web网站不实用该方法。

Snip20171030_31.png

4.HEAD :获得报文首部

Snip20171030_32.png

5.DELETE : 删除文件
DELETE方法用来删除文件,与PUT相反的方法,按请求URI删除指定的资源。 其也存在和PUT方法一样的局限性。

Snip20171030_33.png Snip20171030_34.png

6.OPTIONS :询问支持的方法

Snip20171030_35.png

7.TRACE :追踪路径

Snip20171030_36.png Snip20171030_37.png

8.CONNECT :要求用隧道协议连接代理

Snip20171030_38.png Snip20171030_39.png

9.HTTP/1.0和 HTTP/2.0 支持的方法

Snip20171030_40.png

列表里面的和上面讲解的方法并不完全,因为现在HTTP协议已经来到了2.0时代,但是万变不离其宗。 在本书笔记完结时,在最后会有一篇简单介绍HTTP/2.0的文章。

4. 持久连接节省通信量
HTTP 协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。如图:

Snip20171030_41.png

这种模式在当年来看是可以的,因为数据文本量很小,但是在当下是肯定不可行的,会产生很多不必要的通信开销。
以请求网页资源时的多图片为例:

1509354199040.png

为解决以上TCP连接的问题,HTTP/1.0 和一部分的HTTP/1.0想出了持久连接(HTTP Persistent Connections, 也称为HTTP Keep-alive 或 HTTP Connection reuse)的方法。 持久连接的特点是: 只要任意一端没有明确提出断开连接,则保持TCP连接状态。

Snip20171030_43.png

持久连接的好处: 在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。 其次减少开销的那部分时间,使HTTP请求和响应能够更早结束,这样Web页面的显示速度也就加快了。

管线化
管线化:通俗理解成这个并行请求,在以前是只能等待上一个请求发送等待响应后,才能发送下一个请求。 管线化技术出现后,不用等待响应亦可直接发送下一个请求。

Snip20171030_44.png

5. 使用Cookie的状态管理
前面提到过,HTTP是无状态协议,无法根据之前的状态进行本次的请求处理。
举一个例子(用户绝对无法忍受的例子):
用户浏览一个需要登录的Web网页,如果Web页面本身无法进行状态的管理(不记录已登录状态),那么意味着每次跳转新页面的时候都需要进行重新登录,那岂不是要把这个用户逼疯啊...

Snip20171030_45.png

一个事务都是有两面性的, 这种无状态协议也有它的优点,由于不必保存状态,自然可以减少服务器的CPU及内存资源的消耗。 另一点说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各种场景里。

Snip20171030_46.png

那么如何保留HTTP这个无状态的优势同时又解决类似的矛盾问题,于是引入了Cookie技术

Cookie技术
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态.

简单的说: 就是服务端在第一次响应报文中有一个叫做Set-Cookie的首部字段信息, 客户端需要保存Cookie, 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。 服务端发现该客户端发送过来的Cookie后, 会去检查究竟是从哪一个客户端发送来的连接请求, 然后对比服务器上的记录,最后得到之前的状态信息。

Snip20171030_47.png

再看看请求报文和响应报文中Cookie情况:

Snip20171030_48.png Snip20171030_49.png

有关报文方面的知识将在下次读书笔记中提到。。。

相关文章

网友评论

      本文标题:图解HTTP读书笔记(二) 简单的HTTP协议

      本文链接:https://www.haomeiwen.com/subject/wsrmpxtx.html