网络传输-http

2019-05-22  本文已影响0人  Gaizka

1. HTTP简介

HTTP是应用层协议的一种,超文本传输协议。

2. HTTP传输模型

image.png

3. HTTP协议栈中各层数据流

首先我们看看客户端请求的时候,数据在各层协议的数据组织如下图:

image.png

而服务器解析客户机请求就是反向操作的过程,如下图:

image.png

4. HTTP请求报文

image.png

5. HTTP响应

image.png

6. HTTP 的建立连接过程,由于它是基于TCP协议的,只有TCP连接完成,它才可以进行数据传输,TCP的协议就是HTPP 的建立连接过程:

image.png

6.1 为什么要三次握手?

防止客户端是失效的连接请求到达服务器导致网络错乱问题:例如客户端向服务器请求连接,由于网络缓慢问题导致该请求滞留在某个路由节点,这是客户端做了超时处理,但是此时该请求到了服务端,服务端还是认为客户端需要进行连接,那么它会将客户端发送确认连接响应,并且进如SYN_RECEV状态,由于客户端一直没有回复确认连接,服务器会一直处于等待状态,从而导致了资源浪费。

7. HTTP请求报文

image.png

请求报文包括请求头、请求头、请求数据

7.1 请求头

请求方法

HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。

请求地址

URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
端口和路径有时可以省略(HTTP默认端口号是80)

7.2 请求头

image.png

7.3 请求数据 可选部分,比如GET请求就没有。

8. HTTP响应报文

image.png

响应报文包括: 状态行(状态码 协议版本 状态吗描述信息)、响应头部、响应数据

8.1 状态行

1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。

8.2 响应头部

image.png

8.3 响应数据 可选部分

9. HTTP 断开

image.png

9.1 为什么TCP不是3次分手

假如client在收到server的FIN请求段后直接close,那么服务器会做超时处理重发FIN数据段,这是client回复的不是ACK=1,ack=seq(server的序列号)+1, 而是给server回复了RST=1数据段,那么server认为是数据错误,从而向上层报错,但是这样的跟TCP是可靠连接的概念是相悖的,所以在收到server端的FIN数据段后自己也要回复ACK确认数据段,并且进入TIME_WAIT状态等待2MSL后如果没有消息就进入close 状态。

上一篇下一篇

猜你喜欢

热点阅读