http简单介绍
1.HTTP是什么?
超文本传输协议
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
三次握手四次挥手的目的
1.让通信双方知晓正在建立一个连接,
2.利用数据包中的选项字段来交换一些特殊信息,交换初始序列号
三次握手:
首先客户端和服务端都是一个关闭(Closed)的状态,可以端首先发送 SYN=1,sequence=x告诉客户端,我要建立连接了,发送完成后客户端变成SYN-SEND状态,服务端是一个监听的状态,接受到客户端的信息后发出SYN=1,sequence = y;ACK=1,ack = x+1告诉客户端我知道了,发送后进入SYN-RECEIVE状态;客户端接收到消息后发出SYN=1,sequence = x+1;ACK=1,ack = y+1告诉服务端我建立连接了,马上发送数据,服务端接收后也进入连接状态,等待接收数据。
四次挥手:
在关闭连接前客户端和服务端都是一个建立连接的状态;首先客户端发送报文 FIN=1,sequence = u;
告诉服务端我要关闭连接了,之后客户端进入FIN-WAIT-1状态,服务端接受到报文后,发送确认报文sequence = v,ACK=1;ack=u+1,进入CLOSE-WAIT状态,此刻服务端可能还有数据正常传输,客户端收到报文后进入FIN-WAIT-2状态,服务端数据发送完成后会发送报文 FIN=1,sequence = v,ACK=1;ack=u+1进入LAST-ACK状态告诉客户端我要关闭连接了,客户端收到消息后发送确认报文ACK = 1;sequence = u+1,ack = v+1,进入TIME-WAIT状态,服务端收到客户端报文后直接关闭连接,2MSL时间后客户端关闭连接。
这里等待2MSL时间是因为最后一次服务端ACK可能没收到,随意等待的时间是用来发送丢失的ACK报文。
长连接和短连接
1.http1.0默认使用短连接,http1.1默认使用长连接并且在响应头加入Connection:keep-alive
2.短连接:客户端每进行一次Http操作就建立连接,任务结束就中断连接。
3.长连接:当客户端域服务端进行一次http操作建立连接后,不会中断,下次继续使用。Keep_Alive有一个保活时间,在不同的服务器可以设置(Apache)默认超时时间是60s
4.tomcat设置长连接
Keep_Alive是服务端实现的
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" />
http和socket、websocket
1.http只能算是加上了keepAlive机制的一个短连接,而socket是一个长连接;
2.http没有使用长连接原因:
一般请求一个网页后用户会发时间浏览,没有必要使用长连接占用资源。
没有定义一个序列号使得request和response对应,无法分清resonse是哪个请求的
3.http为了加快响应速度会多建立几个连接并发请求资源,但是服务器对同一域名的连接会有限制所以可以把资源分在不同的服务器上
4.在http中加上keepalive机制叫持续连接,和socket的长连接不同的是http建立的一个连接中要想再次发送请求只能等第一次的response回来后才可以再次发送请求,而socket可以直接发送。
5.websocket和http都同属于应用层的可靠协议
websocket须经历3次握手建立连接,是一个双向通信的协议,基于http完成握手
Websocket使用ws或wss的统一资源标志符,类似于HTTPS,其中wss表示在TLS之上的Websocket
Websocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。