HTTP请求报文结构
4部分:
[图片上传失败...(image-411794-1539070537099)]
请求行 GET /user http1.1
请求头 附加信息,比如cookie,Content-Length,Content-Type
空行:表示请求头到这里结束
请求体 get没有,post有
响应报文
[图片上传失败...(image-adf26b-1539070537099)]
HTTP 1.0和1.1 的区别
1.1 默认使用长连接
1.1 引入了100状态码,客户端先发送一个只有请求头的请求,如果可以访问返回100,然后继续发送完整的请求。如果不能返回401,不在发送完整请求了,节约带宽。
三次握手
三次握手是建立一个可靠连接的最少握手次数,这个阶段主要是为了建立一个可靠的连接,并确认发送数据的序列号
为什么要三次握手?
假设只进行二次握手,那么如果有一个建立连接请求因为网络原因阻塞在一个节点很久并且超时,那么客户端会重新发送一个连接请求。服务端响应了这个请求,发送确认报文。对服务端来说就已经建立了连接了。这个时候,那个超时的请求也到了,服务端再次响应,再次建立一个连接,但对于客户端来说,这个报文已经被抛弃了,不会理会。造成了服务端资源的浪费。
所以第三次握手是为了防止已经失效的报文突然传到server产生错误。
过程:
1、首先client会发送一个SYN=1,seq=x的连接建立报文。进入SYN-SENT
2、之后server收到这个报文后,可以建立连接的话发送SYN=1,ACK=1,ack=x+1,seq=y的一个确认报文,进入SYN-RCVD状态
3、client收到了发送SYN=1,ACK=1,seq = x+1,ack=y=1的确认报文,进入ESTABLISHED状态
4、server收到了以后也进入ESTABLISHED状态,连接建立完成
四次挥手
两边分别发送FIN=1 的连接释放报文,分别发送确认释放报文。
[图片上传失败...(image-25844b-1539070537099)]
为什么客户端最后还要等待2MSL?
1、如果客户端发送的ACK服务端没有收到,那么服务端会再次发送FIN=1的连接释放报文,此时客户端还是TIME_WAIT状态,可以发送确认报文。
2、为了让这次请求的所有数据报文在网络中消失。
301 永久转移
302 暂时转移
401 未登录
403 权限不够,禁止访问
404 找不到资源
500 服务器内部错误
https是在http的下面加了一层ssl层,有两个左右,一个是保证网站的真是性,一个是对数据进行加密
网友评论