前端必知必会HTTP请求系列(二)简单一点的HTTP协议

2,143 阅读6分钟

http协议用户客户端和服务器之间的通信

http协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信。 那么问题来个如果两台服务器之间一台服务器向另一台服务器进行接口请求那谁是客户端呢?所以这里的客户端和服务端是相对的概念,如果一端担任客户端的角色,另一端就需要担任服务器端的角色不是绝对的概念。

通过请求和响应的交换达成通信

http协议中已经规定了请求是从客户端发出,最后由服务端响应这个请求并返回。 下面来看一个请求中的报文,

GET /index.html HTTP/1.1
Host: baidu.cn

起始行的开头的GET表示请求访问服务器的类型,成为方法(method)对于前后端的同学最熟悉不过了。 随后的字符串index.html指明了请求访问的资源对象。也叫请求的URI,最后HTTP/1.1就是我们http的版本号,用来告诉客户端使用的http协议功能。

http是不保存状态的协议

HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存,也就是说HTTP这个级别。协议对于发送过的请求或者响应都不做持久化处理。

所以在使用http协议的时候,每当有新的请求发送时,就会有对应的新的响应产生,协议本身并不保留之前一切的请求或响应报文信息。这是为了更快的处理大量食物,确保协议的可伸缩性,而特意把http协议设计成如此简单的。 但是随着web的发展,因为没有转态在某些业务场景下因为无状态导致业务变得棘手了,例如,现在的电商平台,即时他在别的页面进行浏览商品的时候我们也需要保持该用户的登录状态,所以为了实现这个需求,http协议引入了Cookie技术。稍后会有详解。

请求URI定位资源

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

告知服务器意图的http方法

1、GET:获取资源
get方法用来请求访问已被URI识别的资源,指定的资源经服务器端解析后返回响应内容。如果请求的是文本。那就保持原样返回。
2、POST:传输实体
POST方法用来传输实体的主体。
虽然用GET方法也可以传输实体的主体,但是一般不用GET方法进行传输,而是用POST方法。虽说POST和GET很相似。但是POST的主要目的不是获取响应的主题内容。
3、PUT:传输文件
PUT方法用来传输文件,就像FTP协议的文件上传一样。要求在请求报文的主题中包含文件内容。然后保存到请求URI指定的位置去。
4、HEAD:获取报文首部
HEAD方法和GET方法一样,只是不返回报文主体的部分。用于确认URI的有效性及更新日期等等。
5、DELETE:删除文件
DELET方法用来删除文件,是与PUT相反的方法。
DELET方法安请求URI删除指定的资源。
6、OPTIONS:询问支持得方法
OPTIONS方法用来查询针对URI指定的资源支持得方法。

持久连接节省通信量

在HTTP协议的初始版本中,没进行一次HTTP通行就要断开一次TCP链接。
以当年的通信情况来说,因为都是些内容很小的文本传输,所以即使这样也没有多大问题。可随着HTTP的普及。文档中包含有大量的图片的情况多了起来。
比如浏览器浏览一个包含多张图片的HTML页面时,在发送请求访问HTML页面资源的同时,也会请求HTML页面里面包含的其他资源,因此每次请求都会造成无谓的TCP连接建立和断开,增加通行量的开销。
持久连接
为了解决上诉TCP连接的问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接,也称为HTTP keep-alive的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接转态。
HTTP/1.1中,所有的连接默认都是持久连接,但是在HTTP/1.0中并没有标准化。虽然有一部分服务器通过非标准手段实现了持久化连接。但服务器端不一定能够支持持久化连接。毫无疑问,除了服务端,客户端也需要支持持久化连接。
管线化
持久化连接使得多数请求以管线化方式发送成为可能。从前发送请求后需等待并受到响应。才能发送下一个请求。管线化技术出现后。不用等待亦可直接发送下一个请求。
这样就能够做到同时并行发送多个请求。而不需要一个接一个地等待响应。

使用Cookie的状态管理

之前我们提过HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理,不可否认,无状态协议当然有它的优点。由于不必保存状态,自然可以减少服务器的CPU及内存资源的消耗。从另一个侧面来说,也正是因为HTTP协议本身是非常的简单,所以才会被应用在各种场景。

为了解决这个问题,Cookie出现了,Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段,通知客户端保存Cookie,下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie之后发送出去。
服务器端发现客户端发送过来的Cookie后,回去检查究竟是从哪一个客户端发送来的请求,然后对比服务器上的记录,最后得到之前的转态信息。

前端必知必会HTTP请求系列(一)了解Web及网络基础
前端必知必会HTTP请求系列(二)简单一点的HTTP协议
前端必知必会HTTP请求系列(三)HTTP,报文内部的HTTP信息
前端必知必会HTTP请求系列(四)返回结果的HTTP状态码
前端必知必会HTTP请求系列(五)与HTTP协作的web服务器
前端必知必会HTTP请求系列(六)HTTP的首部
前端必知必会HTTP请求系列(七)确保Web安全的HTTPS
前端必知必会HTTP请求系列(八)确认访问用户身份的认证
前端必知必会HTTP请求系列(九)基于HTTP的功能追加协议
前端必知必会HTTP请求系列(十)构建Web内容的技术
前端必知必会HTTP请求系列(十一)Web攻击技术
有什么问题可以到评论区留言,持续关注,不断更新!