2.1 Http的通信
Http是用于客户端和服务器之间的通信。
Http协议规定,请求从客户端发出,最好服务端响应请求,并返回。也就是说,肯定是先从客户端开始建立通信的,服务端在没有接收到请求之前不会发送响应。
2.2请求报文的构成
Http/1.1表示服务器对应的Http版本
200OK 表示请求的处理结构的状态码和原因短语
DATE表示创建响应的日期时间,是首部字段内的一个属性
Content-Length用于描述HTTP消息实体的传输长度
Content-Type用于定义以什么格式加载数据或者以什么格式处理将要加载的数据
响应报文基本由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
Http是一种无状态的协议,也就是说http不具备保存之前发送过或响应的功能。
使用Http协议,每当有新的请求发送时,就会产生对应的新响应。这是为了更快地处理大量事务,确保协议的可伸缩性。
2.3告知服务器意图的Http方法
GET:获取资源
Get方法用来请求访问已被URI识别的资源,指定的资源经过服务器端解析后返回响应内容。
Post:传输实体主体
Put:传输文件
Head:获得报文首部,head方法和get方法一样,只是不返回报文主体部分。用于确认URL的有效性及资源更新的日期时间。
Delete:删除文件
Options:询问服务器支持的查询方法。
Trace:追踪路径,trace方法是让web服务器将之前的请求通信步骤,返回给客户端的方法。客户端通过trace方法可以查询发送出去的请求是怎样被加工修改的。
Connect:要求用隧道协议连接代理,connect方法要求在代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。
2.4 持久连接节省通信量
Http协议的初始版本汇总,每进行一次通信就要断开。随着Http的普及,当一个Html页面包含了很多图片或者文件的资源连接时,便重复的建立与断开通信,导致通信量的开销。
为了解决这个问题,Http/1.1想出持久连接的方法。主要任意一端没有明确提出断开连接,则保持tcp连接状态。
持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
2.5 管线化
持久连接使得多数请求以管线化方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。
由于Http是无状态协议,它不对之前的发生过得请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器及内存的销毁。
但是,如果登录的web页面无法进行状态管理,那么每次访问的时候都要登录,用户会感觉很麻烦。如果让服务器管理所有的客户端状态则有会成为服务器的负担。
于是就出现了cookie技术,cookie通过在请求和响应的报文中写入cookie信息来控制客户端的状态。Cookie会根据从服务器端发送响应的报文内一个叫做set-cookie的首部字段信息。通知客户端保存cookie。当下次客户端再往该服务器发送请求时,客户端会在请求中加入cookie信息。服务器接收到客户端发送过来的cookie后,会去对比服务器上的记录,最后得到之前的状态。
![](https://i-blog.csdnimg.cn/blog_migrate/ccf13a84f9fc405bd060cf35c7521470.png)