简单的HTTP协议
http协议是一种不保存状态的协议,即无状态协议。
http协议不会保存之前发送过的请求或响应功能,比如用户的登录信息等。(不保存交互信息)
所以每当有新的请求发送,就会有新的响应产生。
目的:
为了更快地处理大量的事务,确保协议的可伸缩性。
(如果http协议不是无状态协议的话,就需要保存大量的交互信息(会增大cpu的开销和内存资源的消耗),而许多信息不是我们想要保存的。)
HTTP协议是用于客户端和服务器端之间的通信,HTTP协议是处于TCP/IP分层的应用层,http协议能够明确区分哪端是客户端,哪端是服务器端。
客户端:请求访问资源的一端。 服务器端:提供资源响应的一端。
HTTP协议通信:
HTTP协议规定:请求从客户端发出,最后服务器端响应,该请求返回。(即只能是客户端先发送请求,服务器端才会响应)
请求报文的组成:
(1)请求方法(get,post,put等)
GET方法:获取资源(侧重用请求数据)
POST方法:传输实体主体(侧重于提交数据)
PUT方法:传输文件(由于HTTP/1.1不带验证机制,任何人都能上传文件,不提倡使用)
DELETE:删除文件(跟PUT方法一样,不提倡使用)
HEAD:获得报文首部(用于确认URI的有效性及资源更新的日期时间)
OPTIONS:询问支持的方法(询问服务器支持的方法)
TRACE:追踪路径(用来确认连接过程中的一系列操作,通常不会用到)
CONNECT:要求用隧道协议连接代理(要求在与代理服务器通信时建立隧道,
主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输)
(2)请求URI
如果不是访问特定资源而是对服务器本身发起的请求,可以用星号 * 来代替请求URI(只是单纯地想访问服务器)
(3)协议版本
(4)请求首部字段(可选)
(5)内容实体
响应报文的组成:
(1)协议版本
(2)状态码(200等)
(3)用以解释状态码的原因短语
(4)响应部首字段(可选)
(5)实体主体
HTTP的持久连接:
原因:HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。
(在请求一个包含多张图片的HTML页面时,就需要多次请求,每次请求时无谓的TCP连接建立和断开,都会增加通信量的开销)
所以持久连接的特点是只要任意一端没有明确提出断开连接,则保持TCP的连接状态。
持久连接旨在建立一次TCP连接后进行多次的请求和响应的交互。
好处:减少通信量的开销;减轻了服务器端的负载,让Web显示速度更快。
(减少了连接时的三次握手和断开时的三次握手的开销)
管线化:
即不用等待响应,直接发送下一个请求。(持久连接使管线化成为可能)
浏览器在默认状态下并不激活http管线化功能。
Cookie的状态管理:
前面提到过HTTP是一种无状态协议,所以不能保存用户登录等信息。
而Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息