美文网首页
http1.0 、http1.1和http2.0的区别 以及状态

http1.0 、http1.1和http2.0的区别 以及状态

作者: 不拘绳墨 | 来源:发表于2019-11-06 22:16 被阅读0次

    HTTP 1.0、HTTP1.1主要区别

    HTTP 1.0需要使用keep-alive参数来告知服务器建立一个连接,而HTTP1.1默认支持长连接

    http是基于TCP/IP协议创建的tcp连接,需要进行三次握手,每一次通讯都需要重新建立连接,对性能有影响,需要一定的开销,因此最好维持一个长连接,可以利用长连接发送多个请求。

    HTTP1.1只支持发送header信息,服务器有权限返回100,否则返回401,返回100,才把请求body发送到服务器(401状态码:请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应),如果返回401,就不用发送请求body了,解约带宽。

    HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础

    web server 上的多个虚拟站点可以共享同一个ip和端口(例如tomat) http1.0是没有host域的,http1.1才支持这个参数。

    HTTP 1.1、HTTP2.0主要区别  (减少带宽、传输快,请求快)

    多路复用

             HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

               当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。

               TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

    数据压缩

           HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快

    服务器推送

    当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

           服务器端推送的这些资源其实存在客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度自然是快很多的。

     服务端推送过来的资源,会统一放在一个网络与http缓存之间的一个地方,在这里可以理解为“本地”。当客户端把index.html解析完以后,会向本地请求这个资源。由于资源已经本地化,所以这个请求的速度非常快,这也是服务端推送性能优势的体现之一。

    HTTP状态码 

    1XX系列:指定客户端应相应的某些动作,代表请求已被接受,需要继续处理。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。

    2XX系列:代表请求已成功被服务器接收、理解、并接受。这系列中最常见的有200、201状态码。

    200状态码:表示请求已成功,请求所希望的响应头或数据体将随此响应返回

    201状态码:表示请求成功并且服务器创建了新的资源,且其 URI 已经随Location 头信息返回。假如需要的资源无法及时建立的话,应当返回 ‘202 Accepted’

    202状态码:服务器已接受请求,但尚未处理

    3XX系列:代表需要客户端采取进一步的操作才能完成请求,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。这系列中最常见的有301、302状态码。

    301状态码:被请求的资源已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。301永久永久永久

    302状态码:请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求

    304状态码:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。

    4XX系列:表示请求错误。代表了客户端看起来可能发生了错误,妨碍了服务器的处理。常见有:401、404状态码。

    401状态码:请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

    403状态码:服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。

    404状态码:请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。

    5xx系列:代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。常见有500、503状态码。

    500状态码:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

    502和504的区别

    502 bad gateway 顾名思义 网关错误 后端服务器tomcat没有起来,应用服务的问题(前提是接入层7层正常的情况下)。

    应用服务问题一种是应用本身问题;另一种是因为依赖服务问题比如依赖服务RT高,依赖的服务有大的读取(mysql慢查,http等),以至于调用方超过超时read时间;服务集群压力大时,也会出现502超时(502理解为不可响应或响应不过来,其实还是不可响应)。

    504 gateway time-out 顾名思义 网关超时 一般计算机中的超时就是配置错了,此处一般指nginx做反向代理服务器时,所连接的服务器tomcat无响应导致的。

    503状态码:由于临时的服务器维护或者过载,服务器当前无法处理请求。通常,这个是暂时状态,一段时间会恢复

    Header 解释 示例

    Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html,application/json

    Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5

    Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Encoding: compress, gzip

    Accept-Language 浏览器可接受的语言 Accept-Language: en,zh

    Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes

    Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache

    Connection 表示是否需要持久连接。keep-alive(HTTP 1.1默认进行持久连接) Connection: close(1.0)

    Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new;

    Content-Length 请求的内容长度 Content-Length: 348

    Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded

    Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT

    Expect 请求的特定的服务器行为 Expect: 100-continue

    From 发出请求的用户的Email From: user@email.com

    Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com

    If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”

    If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

    If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d”

    If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d”

    If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

    Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10

    Pragma 用来包含实现特定的指令 Pragma: no-cache

    Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    Range 只请求实体的一部分,指定范围 Range: bytes=500-999

    Referer 先前网页的地址,当前请求网页紧随其后,即来路 Referer: http://www.zcmhi.com/archives...

    TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers,deflate;q=0.5

    Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

    User-Agent User-Agent的内容包含发出请求的用户信息 User-Agent: Mozilla/5.0 (Linux; X11)

    Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

    Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning

    ————————————————

    相关文章

      网友评论

          本文标题:http1.0 、http1.1和http2.0的区别 以及状态

          本文链接:https://www.haomeiwen.com/subject/qippbctx.html