Http如何工作:
超文本传输协议(Http,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵循这个标准。
Different types of HTTP requests
GET:This request is Used to get the Response header and the response body
HEAD:This request is used to get back The response header only (not the response body as returned by the GET request..)
POST:This request is used to submit data (eg : for to be used in HTML forms etc..)…
PUT:Used for uploading resource
PATCH:Is used to modify the resource
DELETE:Used for deleting resource
TRACE:simply echoes back the request sent by the client…This can be used for testing the servers and Checking weather the server is alive or not..
发展历程版本
HTTP/0.9 (1991)->HTTP/1.0 (1996)->HTTP/1.1 (1999)->REST(2000)->HTTP/1.1 bis(2012)
HTTP0.9
作为HTTP第一个版本,只有请求(Request)一行
eg:GET www.cnblogs.com
HTTP 1.0
HTTP /1.0的变化包括:
引入了POST方法;
引入HTTP头、状态码;
HTTP传输内容不局限于文本,可以是图片、视频、文档等
HTTP 1.1
- 增加了host头字段。
- 增加了Range字段,使得客户端通过HTTP下载时只下载内容的一部分,这使得多线程下载也成为可能。
缺点:
连接无法复用:连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。
HTTP/1.0传输数据时,每次都需要重新建立连接,增加延迟。
1.1虽然加入keep-alive可以复用一部分连接,但域名分片等情况下仍然需要建立多个connection,耗费资源,给服务器带来性能压力。
Head-Of-Line Blocking:导致带宽无法被充分利用,以及后续健康请求被阻塞。HOLB是指一系列包(package)因为第一个包被阻塞;HTTP/1.x中,由于服务器必须按接受请求的顺序发送响应的规则限制,那么假设浏览器在一个(tcp)连接上发送了两个请求,那么服务器必须等第一个请求响应完毕才能发送第二个响应——HOLB。
虽然现代浏览器允许每个origin建立6个connection,但大量网页动辄几十个资源,HOLB依然是主要问题。
协议开销大:HTTP/1.x中header内容过大(每次请求header基本不怎么变化),增加了传输的成本。
安全因素:HTTP/1.x中传输的内容都是明文,客户端和服务端双方无法验证身份。
SPDY(2010)
多路复用允许在一个TCP连接里面,允许无限并发流(在双方资源可承受的情况下)。因为请求是在一个单一的通道交错传输,TCP的可以达到很高的效率,从而更少的网络连接需要,可以以很高的 数据密度做传输。
具备优先级的请求虽然无限的并行数据流的解决了序列化的问题,但是它们引入了另一个问题:如果由于信道带宽的限制,客户端可能会阻止怕堵塞通道的要求。为了克服这个问题,SPDY实现请求的优先次序:客户端可以请求尽可能多的项目,每个请求分配一个优先级。这样即使高优先级的请求仍处在pending状态,通道也不会传输非关键的,低优先级的请求,这样就有效地阻止了传输拥塞。
HTTP Header 压缩对于HTTP 请求,响应头,SPDY都做了压缩,这样包更小,对于RESTFUL类型的WEB2.0 ,or OpenAPI 业务,将会有可观的效率提升。
服务器端推送SPDY通过X-Associated-Content 协议头来向客户端推送数据,头通知客户端,我要向你推送资源,准备接收好了。最近火爆的Google+ ,如果你用chrome浏览器,默认就采用SPDY技术,并且开启了服务器推送技术。服务器的推技术,全面提升了用户体验,是G+ 产品很快占据了足够多的优势,最近Facebook 开发自己的浏览器,也有摆脱现在技术限制的考虑
服务器暗示不像上面提到的PUSH 技术,服务器会先告诉浏览器,你可以下载ABC资源了,这个ABC资源,可能就是下一个页面的JS ,CSS ,或者内容。服务器不会主动推送的,仍旧等待客户端请求,这对于低速网络,是个很大的优化,有点类似于我们的预加载技术。
HTTP/2(2015)
- 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
a7779db0-be23-11e6-86b9-3c365a8d8033.png
http2的格式定义十分高效且精简。length定义了整个frame的大小,type定义frame的类型(一共10种),flags用bit位定义一些重要的参数,stream id用作流控制,payload就是request的正文。
- 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
- 流(stream)和多路复用(MultiPlexing)
stream就是在HTTP/2连接上的双向帧序列。每个http request都会新建自己的stream,response在同一个stream上返回- 多路复用(MultiPlexing),即连接共享。之所以可以复用,是因为每个stream高度独立,堵塞的stream不会影响其它stream的处理。一个连接上可以有多个stream,每个stream的frame可以随机的混杂在一起,接收方可以根据stream id将frame再归属到各自不同的request里面。
- header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
- 服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。
![](https://img.haomeiwen.com/i8421477/ccf07c25a2f155e5.png)
HTTP基本优化
影响一个HTTP网络请求的因素主要有两个:带宽和延迟。
- 带宽:如果说我们还停留在拨号上网的阶段,带宽可能会成为一个比较严重影响请求的问题,当时现在网络基础建设已经使得带宽得到极大的提升,我们不再会担心由带宽而影响网速,那么就只剩下延迟了。
-
延迟:
- 浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能有 4 个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
- DNS 查询(DNS Lookup):浏览器需要知道目标服务器的 IP 才能建立连接。将域名解析为 IP 的这个系统就是 DNS。这个通常可以利用DNS缓存结果来达到减少这个时间的目的。
- 建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。
HTTPS与HTTP的一些区别
- HTTPS协议需要到ca申请证书,一般免费证书很少,需要交费。
- HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的ssl加密传输协议。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS的连接很简单,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
网友评论