http请求

content-type

  1. application/json。消息是序列化后的json。
  2. application/x-www-form-urlencoded。数据被编码为名字/值对,标准编码格式
  3. multipart/form-data。需要在表单中提交文件,就使用该格式。
  4. text/plain。数据以纯文本形式编码。

post与get区别

post通过request body传递参数是隐式的,更安全,数据长度可以比较大。
get把参数包含在url中,是显式的,数据长度有限制,get请求会被缓存起来。
post的请求速度一般比get慢,主要是post需要在头部包含多几个字段,如content-type等,post在真正接收数据之前,会先将请求头发送给服务器确认,再真正发送数据。
post的请求过程
浏览器请求tcp请求(第一次握手);服务器答应进行连接(第二次握手);浏览器确认,发送请求头(第三次握手);服务器返回100 continue;浏览器发送数据;服务器返回200。
get的请求过程
浏览器发送tcp请求(第一次握手);服务器答应进行连接(第二次握手);浏览器确认,发送请求头和数据(第三次握手);服务器返回200。

三次握手,四次挥手

在这里插入图片描述
三次握手
第一次握手,客户端发送SYN标记的包,seq初始序列号x,发送完成后,客户端进入SYN_SEND状态。
第二次握手,服务器发送一个ACK确认包和SYN标记包,ACK=x+1,表示确认收到客户端发来的信息,Seq=y,表示让客户端回复是否收到,发送后,服务器进入SYN_RECV状态。
第三次握手,客户端发送一个确认包ACK=y+1,客户端进入estenblished状态,服务器接收到确认包,也进入estenblished状态,tcp握手结束。

四次挥手
在这里插入图片描述
第一次挥手,客户端发送一个FIN标记的包,Seq=x,告诉服务器需要关闭,表示自己不需要发送数据,但是还可以接收数据,发送完成,客户端进入FIN_WAIT_1状态。
第二次挥手,服务器发送一个确认包,ACK=x+1,告诉客户端,它收到关闭的请求,但还没准备好,发送完成后,服务器进入CLOSE_WAIT状态,客户端接收到包,进入FIN_WAIT_2状态,等待服务器关闭连接。
第三次挥手,服务器发送一个FIN包,Seq=y,告诉客户端准备关闭,发送完成后,服务器进入LAST_ACK状态,等待客户端确认。
第四次挥手,客户端收到关闭请求,回复确认包,ACK=y+1,发送完成后,客户端进入TIME_WAIT,等待服务器请求可能重传的ACK包。
服务器接收到ACK包,服务器进入CLOSED状态。
客户端在等待一定时间后,没有收到ack包,确认服务器关闭了,自己也关闭连接,就进入CLOSED状态。

为什么客户在第四次挥手后还要等待2msl
1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

2、他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

注意:在服务器发送了FIN-ACK之后,会立即启动超时重传计时器。客户端在发送最后一个ACK之后会立即启动时间等待计时器。

http请求报文

请求行+请求头+请求体

在这里插入图片描述

http响应报文

响应行+响应头+响应体
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值