目录
一、HTTP协议简介
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其他信息。
二、HTTP协议的发展历史
- http/0.9:只有一个命令get,没有header等描述数据的信息,服务器发送完毕,就关闭tcp协议。
- http/1.0:增加了很多命令,增加了status code 和 header
- http/1.1:持久连接,同一个连接发送多次请求,增加post
- http/2:所有数据二进制传输,同一个链接里发送多个请求不再按照顺序来,头信息压缩以及推送(之前的版本html页面如果连接了css和js,先解析html,现在是并行顺序)等提高效率的功能。
三、HTTP工作原理
1.首先客户端和服务端先建立连接(TCP三次握手)
2.发送HTTP请求
3.服务器接受请求并返回HTTP响应
4.客户端收到响应后断开连接(TCP四次挥手)
5.客户端浏览器解析HTML内容
四、HTTP三次握手
- 打一次握手:客户端向服务端发送连接请求,将标志位SYN置为1,随机产生一个值seq = j ;客户端进入SYN_SENT状态,等待服务器端确认
- 第二次握手:服务端响应客户端,并要求确认,将标志位SYN和ACK都置为1,ack = j+1,随机产生一个值seq = k;服务器端进入SYN_RCVD状态
- 第三次握手:客户端效验(ack=j+1 &&ACK=1),效验通过将标志位ACK置为1,ack = K+1响应服务端;服务端收到后效验(ack=K+1&&ACK = 1),效验通过连接建立成功;客户端进入ESTABLISHED状态,完成三次握手
为什么要三次握手
客户端:c,服务端:s
第一次:c向s请求,此时c什么都不知道,s知道c发送正常,自己接收正常
第二次:s向c响应,此时c知道自己和s收/发正常,s知道c发送正常,自己接收正常
第三次:c向s响应,此时c知道自己和s收/发正常,s知道自己和c收/发正常
五、HTTP四次挥手
- 第一次挥手:客户端向服务端发出断开请求,将标志位FIN置为M;客户端进入FIN_WAIT_1状态
- 第二次挥手:服务端响应客户端,发送ack=M+1;客户端进入FIN_WAIT_2状态
- 第三次挥手:服务端向客户端发送请求,将标志位FIN置为N;服务端进入LAST_ACK状态
- 第四次挥手:客户端响应服务端,发送ack= N+1;客户端进入TIME_WAIT状态,等待2MSL后没收到回复证明服务端已关闭连接,此时客户端就关闭连接完成四次挥手
为什么四次挥手
客户端:c,服务端:s
第一次:c向s请求,c不再发送数据了,但是还能接收
第二次:s向c响应,s确认收到请求,但是还有数据要发送
第三次:s向c请求,s数据发完了
第四次:c向s响应,c确认收到请求,等待超时关闭;s收到响应后立即关闭
六、HTTP请求方法
HTTP/1.1协议中共定义了八种方法(也叫"动作")来以不同方式操作指定的资源:GET、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT、HEAD;