前言:其它文章链接
图解HTTP读书笔记(一) 基础知识准备
1.什么是客户端什么是服务端?
客户端: 请求访问文本或图像等资源的一端
服务端: 提供资源响应的一端
2.请求的发起必定是客户端,服务端回复响应
我们来具体看看一个HTTP协议的请求
示例:
1.客户端请求报文:
请求首部字段及内容实体后面会做详细说明.
2.服务端响应报文:
1.HTTP是不保存状态的协议
什么叫不保存状态?
答: 不保存状态,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存。 看下面的图更好理解:
使用HTTP协议,每当有新的请求发送时, 都会有对应的新响应产生。 协议本身并不保留之前的一切请求货响应报文的信息。
如此设计,是为了更快地处理大量事务,确保协议的可伸缩性
但是随着Web的不断发展,因无状态而导致业务处理变得棘手的情况增多。 例如用户登录淘宝买东西,需要一直保存用户的登录状态一样。 HTTP为了实现期望的保持状态功能,引入了Cookie技术。 Cookie技术可以管理状态。 在后面我们再详细介绍Cookie技术。
2.请求URI定位资源
在充分理解URI 和 URL 的基础上,可以把URI理解为URL
HTTP 协议使用URI定位互联网上的资源,正是因为URI的特定功能,在互联网上任意位置的资源都能访问到。
指定请求URI的方式有很多种:
3.告知服务器意图的 HTTP 方法
说来高大上,其实就是我们平时用的GET,POST...请求。 我们再来看看这些方法.
1.GET :获取资源
GET 方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。就是说请求什么资源,那就保持原样返回。
2.POST :传输实体主体
POST 方法用来传输实体的主体,虽然用GET 方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能和GET很相似,但POST的主要目的并不是获取响应的主体内容。
3.PUT :传输文件
PUT 方法用来传输文件,就像FTP协议的文件上传一样, 要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
PUT 方法的局限是自身不带验证机制,任何人都可上传文件,存在安全性问题,因此一般的Web网站不实用该方法。
4.HEAD :获得报文首部
5.DELETE : 删除文件
DELETE方法用来删除文件,与PUT相反的方法,按请求URI删除指定的资源。 其也存在和PUT方法一样的局限性。
6.OPTIONS :询问支持的方法
7.TRACE :追踪路径
8.CONNECT :要求用隧道协议连接代理
9.HTTP/1.0和 HTTP/2.0 支持的方法
列表里面的和上面讲解的方法并不完全,因为现在HTTP协议已经来到了2.0时代,但是万变不离其宗。 在本书笔记完结时,在最后会有一篇简单介绍HTTP/2.0的文章。
4. 持久连接节省通信量
HTTP 协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。如图:
这种模式在当年来看是可以的,因为数据文本量很小,但是在当下是肯定不可行的,会产生很多不必要的通信开销。
以请求网页资源时的多图片为例:
为解决以上TCP连接的问题,HTTP/1.0 和一部分的HTTP/1.0想出了持久连接(HTTP Persistent Connections, 也称为HTTP Keep-alive 或 HTTP Connection reuse)的方法。 持久连接的特点是: 只要任意一端没有明确提出断开连接,则保持TCP连接状态。
持久连接的好处: 在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。 其次减少开销的那部分时间,使HTTP请求和响应能够更早结束,这样Web页面的显示速度也就加快了。
管线化
管线化:通俗理解成这个并行请求,在以前是只能等待上一个请求发送等待响应后,才能发送下一个请求。 管线化技术出现后,不用等待响应亦可直接发送下一个请求。
5. 使用Cookie的状态管理
前面提到过,HTTP是无状态协议,无法根据之前的状态进行本次的请求处理。
举一个例子(用户绝对无法忍受的例子):
用户浏览一个需要登录的Web网页,如果Web页面本身无法进行状态的管理(不记录已登录状态),那么意味着每次跳转新页面的时候都需要进行重新登录,那岂不是要把这个用户逼疯啊...
一个事务都是有两面性的, 这种无状态协议也有它的优点,由于不必保存状态,自然可以减少服务器的CPU及内存资源的消耗。 另一点说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各种场景里。
那么如何保留HTTP这个无状态的优势同时又解决类似的矛盾问题,于是引入了Cookie技术
Cookie技术
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态.
简单的说: 就是服务端在第一次响应报文中有一个叫做Set-Cookie的首部字段信息, 客户端需要保存Cookie, 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。 服务端发现该客户端发送过来的Cookie后, 会去检查究竟是从哪一个客户端发送来的连接请求, 然后对比服务器上的记录,最后得到之前的状态信息。
再看看请求报文和响应报文中Cookie情况:
有关报文方面的知识将在下次读书笔记中提到。。。