HTTP

HTTP连接流程:

1.从URL中解析出serv主机名

2.将主机名通过DNS解析为IP

3.解析端口号(如果有)

4.建立一条cli---serv的TCP连接

5.cli向serv发送http请求

6.serv处理请求,返回http响应

7.断开TCP连接,一次HTTP请求响应结束

HTTP请求报文:

(起始行)<方法><请求路径><HTTP版本>

(首部)<各种键值对形式的参数,如ContentType:text/html

Connection:KeepAlive>

(空行)

<主体>

//

HTTP请求报文:

(起始行)<版本><状态><原因短语>(如:http/1.1 200 OK)

(响应头)<还是各种键值对形式的参数>

(空行)

<主体>

常用方法:

GET:从服务器获取一个文档

POST:向服务器发出需要处理的数据
GET和POST区别

PUT:向服务器资源中存储数据

HEAD:告诉服务器只返回响应头(可以用来查看URL是否存在,查看资源类型,测试资源有没有被修改过)

解决问题:如何解决网速等外部因素正常情况下,cli向serv请求数据加载缓慢?

答:使用并行连接解决(一般为4个):HTTP允许cli打开多个TCP连接,去并行执行多个HTTP事务(提高页面加载速度)

并行连接存在的问题:

1.在cli带宽跑满的情况下,并行连接并不会有很明显的提速

2.受限于cli与serv的处理性能,在cpu跑满时,同样不会有很明显的提速

那么我们就想到了能不能让TCP连接持久化,产生了持久连接这个概念

持久连接:在HTTP/1.0(Keep-Alive)HTTP/1.1(persistent-connection)中都有支持

以http/1.0为例,cli如果要保持持久连接,会在请求首部添加connection:Keep-Alive,如果serv可以支持长连接,会在响应头部也返回一个Keep-Alive,但是双方都不保证何时关闭这个长链接。cli一般会请求保持少量的长连接。

持久连接的好处就是可以避免缓慢的TCP建立连接,DNS再次解析域名,,避免慢启动的拥塞适应阶段。

持久连接+并行连接在处理数据量小的数据时,优点极为明显,但是随着数据量增大,持久连接+并行 连接的优势会显得越来越无力。

HTTP/1.1中还支持TCP的管道化连接:将请求放入队列,只保证请求的发送顺序是正确的。这样可以减少网络的等待时间。管道化连接不可以传输非幂等性的请求:

(如商品下单),因为管道化连接需要考虑非正常的TCP连接断开。

web缓存:当web请求抵达缓存时,如本地有已缓存的副本,,就可以直接从本地设备中提取文档。

优点:减少了冗余的数据传输

缓解了网络瓶颈

降低了对原始服务器的要求,服务器的响应会更快

有缓存服务时的处理步骤:

1.接收:接收request

2.解析:对报文解析,提取url和各个首部

3.查询:查看是否有本地副本可用,如果没有,就从原始服务器获取一份,存在本地

4.新鲜度检测:判断过期时间,如果不新鲜,询问服务器是否对资源有更新(若响应为304(Not Modified),则说明资源为进行过更改)

5.创建响应:缓存会用新的首部和已缓存的主体构建报文

6.发送

7.写日志

问题:确保缓存与服务器数据强一致:http/1.1:Cache-Control(max-age = xxx(秒))

再验证:If-Modified-Since:< date >(1.0)自date以后,若url未被修改,则返回304,若修改过,则返回携带新首部的新文档(包括date),

If-None-Match:< Tag>(1.1):对每次修改后的数据添加版本号(类似时间戳),如版本号有变化,则返回新的文档(包括Tag)

如cli强制不使用缓存中的数据,会在请求首部添加no-cache字段,强制让缓存进行新鲜度验证。

以上为《HTTP权威指南》部分观后总结,如有错误请指出,共同进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值