HTTP协议的理解

HTTP是基于应用层的协议,然后由TCP在传输层进行传输。通俗的说HTTP是基于TCP协议的。

对于HTTP协议感觉就是一头雾水,虽然知道这是为了统一标准而定下的协议,但是这个协议它是怎样工作的呢。

 

举一个例子,当我们在浏览器中输入URL访问资源,这个时候浏览器会根据HTTP协议将相关数据进行打包,然后交给TCP协议。TCP协议根据数据包信息对服务器发起请求,并进行三次握手,简历客户端和服务器的通信通道。

 

第一次握手:客户端发送SYN标识报文,seq=X到服务器(SYN数据包),客户端进入SYN_SEND状态

第二次握手:服务器接收到客户端的请求,发送确认信息SYN,ACK报文,seq=y,ACK=X+1给客户端(SYN+ACK数据包)。服务器进入SYN_RECV状态

第三次握手:客户端确认服务器信息,并返回确认信息ACK报文给服务器端ACK=Y+1,seq=x(ACK数据包)。客户端和服务器进入ESTABLISHED状态。

三次握手指挥客户端可以跟服务器进入数据传输。

关于TCP标识的含义

SYN:建立连接

FIN:关闭连接

ACK:标识响应

PSH:有DATA数据传输

RST:连接重置

 

为什么需要三次握手,比如不能改成两次或者一次吗?

目的是因为尽可能的减少服务器的开销,比如,发起请求,请求在发送路上遇到阻塞,超时才发送到服务器端。这个时候客户端已经放弃了这个请求了,如果这个时候接收到延迟的请求,直接处理并返回给客户端。这样浪费了服务器资源在处理一个无效请求得不偿失。

 

HTTP请求与TCP传输的关系

当客户端与服务器通过三次握手之后,建立起连接之后,一个TCP连接可以发送多个HTTP请求。这样就不用说每个请求都需要重新握手消耗资源。

 

 

TCP的四次挥手:

第一次挥手:客户端发送一个FIN=X标识数据包,表示关闭客户端到服务器的数据传送

第二次挥手:服务器端发送一个ACK包确认数据包ACK=X+1

第三次挥手:服务器端发送一个FIN=Y标识数据包,表示服务器关闭到客户端的数据传送

第四次挥手:客户端发送一个ACK包确认数据包ACK=Y+1

完成四次挥手,连接就中断了。

 

为什么需要四次挥手?

TCP连接是一个全双工通道,需要客户端和服务器端分别发送关闭连接的请求。而且是四次挥手之后双方才真正关闭连接,因为这四次握手中,需要客户端和服务器端互相发送FIN请求跟响应。

 

请求头的基本组成:

方法 URL 协议版本

首部字段名

(换行)

消息主体

 

GET /api/test1  HTTP/1.1

HOST:www.baidu.com

......

<html>

<body>

Hello,test1

</body>

</html>

 

 

响应头:

协议版本 状态 短语

首部字段名

....

(换行)

消息主体

 

HTTP/1.1  200  OK

Date:时间

.....

<html>

<body>

How are you?

</body>

</html>

 

常用请求方法:

Restful标准中的含义:

GET:获取一个资源

POST:创建一个资源

PUT:更新一个资源

DELETE:删除一个资源

 

未完待续......

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值