WWH - HTTP

HTTP是什么?

HTTP(HyperText Transfer Protocol 超文本传输协议);

HTTP基于TCP/IP通信协议来传递数据(各种文件);

工作原理

HTTP协议工作于客户端(请求主动发起端)-服务端(请求响应端);使用者可以通过URL向服务端发送所有请求,服务端接收到请求后,向客户端发送响应信息;HTTP默认端口80(可改);

HTTP三个特点(HTTP1.1)

1. 无连接: 每个连接只处理一个请求,就是客户端发送请求,服务端响应后,收到客户的应答后,即断开连接;

2. 无状态: 即每一个连接都是独立,无法相互依赖影响;这样意味如果后续处理需要前面的消息,本次请求就必须带上前面的消息;

3. 媒体独立: 客户端和服务端都知道如何处理的数据内容,任何数据内容都可通过HTTP发送;需要客户端和服务端使用使用的MIME-type内容类型;

HTTP连接

HTTP基于TCP/IP通信协议,TCP协议建立连接必须三次握手

TCP三次握手

此处以打电话为例

A: 打电话接通首先说话 "你好";

B: 你好,我可以听到;

A: 嗯好 那我开始说正事了啊;

第一次:  由客户端发起 SYN=1 ,seq = x ;此时客户端连接进入 SYN-SENT (A: 你好!);

第二次: 服务器监听到客户端请求后,回复 SYN=1,ACK=1,seq=y, ack=x+1(上次带过来的seq +1);服务器进入SYN-RCVD;(B: 你好!我可以听到)

第三次: 客户端收到服务端回复后,发送ACK=1, seq=x+1,ack=y+1;客户端进入ESTAB-LISHED(含义TCP:连接成功),服务端收到该请求后也会进入ESTAB-LISHED状态;(A: 嗯好那我说正事了啊)

SYN是同步,ACK是确认,1为是,0为否,就是收到同步和确认信号


TCP四次挥手

还是以打电话为例:

A:  我已经说完了;

B:  嗯收到我想下我还有事没事;

B:  我没事了那我挂了啊;

A:  好挂吧;

TIME_WAIT(等待)

第一次挥手: 客户端想服务端发送FIN=1,seq=n;  客户端进入FIN_WAIT_1状态,标识没有数据要传输了(A: 我已经说完了;)

第二次挥手: 服务端收到消息后进入CLOSE_WAIT状态(被动关闭),然后发送ACK=1,sql=m,ack=n+1确认,表示同意关闭;客户端进入FIN_WAIT_2状态;(B: 嗯收到我想下我还有事没事;)

第三次挥手: 服务端发送FIN=1 ACK=1 ack=n+1 seq=m 请求关闭连接,服务端进入LAST_ACT状态;(我也没事了,你打来的你挂;)

第四次挥手: 客户端收到FIN后,回复ACK=1 ack=m+1 sql=n+1 客户端进入TIME_WAIT状态(等待2MSL),服务端收到ACK后关闭连接,客户端等待2MSL后,仍然没有回复,说明服务端已经关闭(如服务端未收到会在超市后重新发送第三次挥手),客户端关闭连接;

2MLS是啥: MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

以上内容不在延续;回头再研究下2MLS,SO_REUSEADDR;




HTTP版本

HTTP/0.9 

最初版本,

1. 只有GET一种请求方式,

2. 只能请求HTML格式资源

HTTP/1.0

请求必须在未必增加协议字段(http/1.0)必须包含头消息

1. 增加POST, HEAD请求方式;

2. 增加Content-type 可以支持多种数据格式;

3. 开始支持cache 客户在规定时间内访问同一网站,直接调用cache;

4. 每次请求必须包含头信息(HTTP header);

5. 每个连接只能发送一个请求(不支持keepalive);

6. 新增功能还包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等。

7. 增加Content-Encoding 支持将数据压缩后再发送;客户端使用Accept-Encoding说明可以接受哪些压缩方式

HTTP/1.1

1. 引入持久连接,TCP连接默认不关闭,可以被多次复用,不用声明Connection:keep-alive; 客户端或服务端在发现对方一段时间未活动后;会主动关闭连接;规范做法是通过connection:close提出关闭;(大多数浏览器允许同时建立6个持久连接)

2. 加入管道机制:  一个TCP连接中允许多个请求同时发送;

3. 新增OPTIONS, PUT,DELETE,TRACE,CONNECT的请求方法;

4. 新增了24中状态响应码;

5. host域;

6. 引入更多的缓存策略;

等....

http之前版本问题:

1. 队头阻塞: 请求必须等待前面请求处理完成,如果前面请求很费时则会影响后面请求的响应;

2. 过大的请求头: 每次都会携带请求头,当请求头过大时,会形成负担;

3. 只有客户端发起请求后服务端才能响应,服务端不能主动推送;

4. 


* HTTP/2.0

为了解决http1.1版本利用率不高的问题,提出了HTTP/2.0版本;

1. 二进制格式: 只有0,1的组合,可以适应更多的应用场景;

1. 多路复用: 每个连接内包含多个请求(流);每个流中包含多个帧;多个流并行发送请求;

         每一个帧可看做是一个学生,流可以认为是组(流标识符为帧的属性值),一个班级(一个连接)内学生被分为若干个小组,每一个小组分配不同的具体任务。

HTTP2笔记

2. 服务器推送;

3. 请求头压缩; 第一次传输所有数据以后只传输修改的内容;


HTTP与HTTP2对比试验


好吧这就是 到处抄来的帖子


引用:

HTTP2笔记  blog.csdn.net/y_xianjun/a…

什么是2MSL blog.csdn.net/xiaofei0859…

HTTP各版本 blog.csdn.net/qq_22238021…

HTTP三握手 4次挥手 blog.csdn.net/charking_gg…



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值