HTTP详解

内容来自公众号:裸睡的猪之HTTP详解

一、什么是网络?

网络是由若干节点和链接这些节点的链路构成。

互联网是网络与网络之间所串连成的庞大网络。

HTTP(HyperText Transfer Protocol 超文本传输协议)是互联网上应用最广泛的一种网络协议,由万维网协会制定发布。

二、HTTP请求过程

TCP/IP协议->建立TCP连接->客户端请求->服务端响应->断开TCP连接。

三、HTTP协议特点

1、支持客户/服务器模式;

2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径;

3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记;

4、无连接:无连接的含义是限制每次连接只处理一个请求。

                    服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式可以节省传输时间。

5、无状态:无状态是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送HTTP请求后,服务器根据请求,会给我们发送数据过来,但是发送完,不会记录任何信息(cookie和session)。

四、TCP/IP协议

HTTP是一种基于TCP/IP协议簇来传递数据。

从图可知,HTTP使用的传输层协议为TCP协议,网络层使用的是IP协议。

TCP/IP协议簇工作原理:

数据发送端是一层一层封装数据,数据接收端是一层一层拆封,最后应用层获得数据。

五、建立TCP连接

1、TCP包头信息

HTTP是一种基于TCP/IP协议簇来传递数据。所以HTTP建立连接也就是建立TCP连接。

TCP报文包=TCP头信息+TCP数据体

TCP头信息中包含6种控制位,这6种控制位代表着TCP连接的状态:

(1)URG:紧急数据(urgent data)

(2)ACK:确认已收到

(3)PSH:提示接收端应用程序应该立即从tcp接收缓冲区中读走数据

(4)RST:表示要求对方重新建立连接

(5)SYN:表示请求建立一个连接

(6)FIN:表示通知对方本端要关闭连接了

2、建立连接过程

为什么要建立三次连接,而不是两次,四次呢?

答:三次是最少的安全次数,;两次不安全;四次浪费资源。

六、客户端请求

客户端与服务器连接上之后,客户端就可以开始向服务器请求资源,就可以开始发送HTTP请求了。

1、HTTP请求报文结构

2、HTTP请求实例

解释:

(1)①是请求方法,HTTP/1.1定义的请求方法有8种:

GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常用的get、post。如果是restful接口,一般会用到get、post、delete、put。

(2)②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL

(3)③是协议名称及版本号

(4)④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息

(5)⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。

        不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

七、服务端响应

服务器在收到客户端请求处理完需要响应并返回给客户端,而HTTP响应报文结构与请求结构体一致。

1、HTTP响应报文结构

2、HTTP响应实例

3、响应状态码

八、断开连接

1、长短连接

是否断开连接,需要区分HTTP版本。

(1)短连接:在HTTP/1.0版本,客户端与服务器完成一个请求/响应之后,会将之前建立的TCP连接断开,下次请求的时候又要重新建立TCP链接。

(2)长连接:客户端与服务器完成一个请求/响应之后,允许不断开TCP连接,这意味着下次请求就直接使用这个TCP连接而不再需要重新握手建立新连接。

注意:长连接是指一次TCP连接允许多次HTTP会话,HTTP永远都是一次请求/响应,会话结束,HTTP本身不存在长连接之说。

2、长连接优缺点

对于服务器来说建立长连接有优点也有缺点:

  • 优点:

    当网站中有大量静态资源(图片、css、js等)就可以开启长连接,这也几张图片就可以通过一次TCP连接发送。

  • 缺点:

    当客户端请求一次时候不在请求,而服务器却开着长连接资源被占用着,这是严重浪费资源。

所以是否开启长连接,长连接时间都需要根据网站自身来合理设置。

ps:大家不要小看这一个TCP连接,在一次客户端HTTP完整的请求中(DNS寻址、建立TCP连接、请求、等待、解析网页、断开TCP连接)建立TCP连接占用的时间比还是很大的。

3、断开连接

(1)Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。

(2)Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以继续向Client发送数据。

(3)Client收到Server返回的ACK包后进入FIN_WAIT_2状态,等待Server发送FIN包。

(4)Server完成数据的发送后,将FIN包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server既不能读取数据,也不能发送数据。

(5)Client收到FIN包后向Server发送ACK包,然后进入TIME_WAIT状态,接着等待足够长的时间(2MSL)以确保Server接收到ACK包,最后回到CLOSED状态,释放网络资源。

(6)Server收到Client返回的ACK包后便回到CLOSED状态,释放网络资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值