【HTTP】Http协议知识点

HTTP协议简介css

  HTTP 协议是互联网中最普遍使用的协议,也是作web开发的基础。咱们先了解下HTTP协议发展的历史。html

    1. HTTP/0.9(1991年)git

      是HTTP协议第一个协议,不过比较简单,只有一个GET命令用于获取文件,没有请求头(HEADER)。github

第一个定稿的HTTP版本

做者:nickcau
连接:http://www.imooc.com/article/266160
来源:慕课网
本文首次发布于慕课网 ,转载请注明出处,谢谢合做
第一个定稿的HTTP版本

做者:nickcau
连接:http://www.imooc.com/article/266160
来源:慕课网
本文首次发布于慕课网 ,转载请注明出处,谢谢合做

    2. HTTP/1.0(1996年)web

      相较于0.9版本很是健全了。规定了http请求由请求头,请求体,对应的还有响应头,响应体。除了GET命令,还增长了POST,HEAD等命令。跨域

    3. HTTP/1.1(1997年)浏览器

      增长了connection:keep-alive,以前版本http请求在请求一次完成后就断开,不可以持久链接。有了keep-alive就能够复用以前的链接,减小由于TCP链接致使的性能损耗。这里提一点,为何http能够同时发送多个请求,可是这个多个请求也是由上限的,若是同时请求过多,链接数增大会致使浏览器负载压力很大,同时也不必定提升性能。因此通常要有个权衡。如今浏览器都有本身的设置,好比谷歌浏览器同一个域名下同时http请求数限制在6个。火狐浏览器也是6个,以下图缓存

  

   

  HTTP1.0存在的问题安全

    1).明文传输,意味着没有压缩,致使传输效率低,在早期因为传输内容少,当时彻底能够用的。对于如今web2.0时代随便打开一个网页可能都会加载十几个js,css文件还有不少图片。服务器

    2).传输方式是窜行的,就是说同时发送多个http请求,必须加载完第一个请求后才能加载第二个请求,而后以此类推,这种方式效率很低。

    3).header头部很长,须要加载不少内容。

    4).server端不能主动push(固然能够选择Websocket技术)。

 

    4.HTTP/2.0(2015年):

      如今几乎全部的主流浏览器都支持http2.0协议。http2.0针对以前http版本一些缺陷作出了改进,尤为是性能上的优化,主要又下面的改进:

      1)再也不使用明文,而采用二进制的传输方式,头信息和数据体都是二进制,对明文进行了极大的压缩。

      2)基于上面二进制方式,http2.0有一个新的概念,叫作帧(frame)。帧是http2.0中消息传递方式最小单位。这个是借鉴了bt下载的思想,将传输内容分红块进行传输,http2.0就是经过帧的形式打包进行传输请求头,请求体等信息。

      3)HEAD 压缩。

      4)服务器推送。

      5)优先级请求。

      6)多路复用。

        7)HTTP2.0握手分2种方式,一种叫h2,一种叫h2c。h2要求必须使用TLS加密,在TLS握手期间会顺带完成HTTPS/2协议的协商,若是协商失败(好比客户端不支持或者服务端不支持),则会使用HTTPS/1继续后续通信。h2c不使用TLS,而是多了一次基于HTTP协议的握手往返来完成向HTTP/2协议的升级通常不建议使用。

 

      看下HTTP2.0 与HTTP1.0性能对比

      

 

       上面这个网站显示两张图片,每张图片都是由几百张小图片组成,左边图片是利用HTTP1.0的技术去加载,右边是由HTTP2.0的技术加载。根据上面显示的时间能够看出HTTP2.0所须要的时间远远小于HTTP1.0的时间。这是由于HTTP1.0对于同一个域名同时最多只能创建6个链接,而且在请求完一个只会才能请求下一个。HTTP2.0经过帧的方式将传输数据打散而后在客户端重组。

      

 

    5.HTTP/3.0(2019年)

       http3.0将会从基于TCP的链接变成基于UDP的链接。

 

     相关文档:

     HTTP RFC文档: https://www.w3.org/Protocols/rfc2616/rfc2616.html

     HTTP2文档:  http://http2.github.io/http2-spec/    

              https://hpbn.co/http2/#header-compression 

     SSL/TSL协议RFC文档:     https://tools.ietf.org/html/rfc5246  

 

HTTP协议特色

  1. HTTP是无链接的,HTTP客户端发起HTTP请求,发出请求后,客户端将断开与服务器的链接并等待响应。服务器处理请求并从新创建与客户端的链接以发回响应。

    2. HTTP是无状态的,HTTP是无链接的,这是HTTP是无状态协议的直接结果。服务器和客户端仅在当前请求期间相互了解。以后他们就断开链接。因此客户端和浏览器都不能在跨网页的不一样请求之间保留信息。 

 

 

HTTP协议栈所在位置

 

HTTP三次握手

  http在进行客户端和服务端创建通讯链路的过程当中须要建立tcp connection,由于http协议是工做在应用层,不承载链接任务都是基于tcp。http在在tcp基础上去进行请求和响应。而http在建立链接时候会有三次握手。

          TCP三次握手时序图

 

 

HTTP状态码

    HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码。全部状态码的第一个数字表明了响应的五种状态之一。当用户试图经过HTTP或FTP协议访问一台运行主机上的内容时,Web服务器返回一个表示该请求的状态的数字代码。该状态代码记录在服务器日志中,同时也可能在 Web 浏览器或 FTP客户端显示。也就是咱们打开页面发生错误时,浏览器显示的错误信息代码。状态代码能够指明具体请求是否已成功,还能够揭示请求失败的确切缘由。

HTTP协议状态码表示的意思主要分为五类,大致是:

  • 1××:保留
  • 2××:表示请求成功地接收
  • 3××:为完成请求客户需进一步细化请求
  • 4××:客户错误
  • 5××:服务器错误

      下面是一些常见的HTTP状态码

状态码  
解释
500 (内部服务器错误)

对HTTP 500错误的定义已经充分证实了这是一个最多见的HTTP错误。 通常来讲,HTTP 500 错误会在服务器的程序码出错时出现,或者web服务器发生内部错误时返回的信息。

例如,web服务器过载时将没法正确处理访问请求。

502 (无效网关) 做为网关或者代理工做的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503 (服务不可用)

503错误也是服务器问题,表示服务当前不可用(Service unavaiable),多是由于当前服务器繁忙没法处理请求,好比链接数过高,cpu繁忙等。

404 (文件未找到)

大多数人都知道这个错误。 当用户试图访问Web服务器(一般是一个网页)上某个实际不存在的资源时,就会发生404错误。404错误多是由无效的连接引发,也多是URL拼

写错误,还多是由于虚拟主机将所请求页面移到其余地方(或删除所请求页面)。一些网站设置了自定义页面以防止坏连接所产生的不良影响。

403 (禁止访问)

403错误相似于401错误,不一样之处在于401错误是未经受权,而403错误是禁止访问。 任何登陆对403错误都不起做用。尝试访问(被禁止的)网站目录时,就会发生403错误。

400 (错误请求) Web服务器经过返回HTTP 400错误告诉访问者,访问者用来访问网站的程序出错,或访问请求途中遭到破坏。
401 (未经受权) 访问者试图访问受限页面但未经受权时,网站返回HTTP 401错误。错误登陆尝试是致使这一错误的主因。
301 (永久重定向) 被请求的资源已永久移动到新位置,而且未来任何对此资源的引用都应该使用本响应返回的若干个URI之一。
302 (临时重定向) 请求的资源如今临时从不一样的URI响应请求。因为这样的重定向是临时的,客户端应当继续向原有地址发送之后的请求。
304 (Not Modified)

请求资源没有改变,可使用缓存的内容。在请求中附带了头部信息: If-None-MatchIf-Modified-Since

若是是 200 OK ,响应会带有头部 Cache-Control, Content-Location, Date, ETag, Expires

200 (请求成功) 请求已成功,请求所但愿的响应头或数据体将随此响应返回。
206 (部份内容)

服务器已经成功处理了部分GET请求。相似于FlashGet或者迅雷这类的HTTP 下载工具,都是使用此类响应实现断点续传,或者将一个大文档分解为多个下载段同时下载。

 

 

 

 HTTP安全响应头

    目的:保护用户的安全,也就是一般意义上的防止用户受到各类攻击,如XSS、CSRF。

    1.Set-Cookie:由服务器端向客户端发送 cookie。

    2. Access-Control-Allow-Origin:容许访问控制同源,实现跨域访问,它有多个CORS相关字段。

    3. Authorization :HTTP协议中的 Authorization 请求消息头含有服务器用于验证用户代理身份的凭证,一般会在服务器返回401 Unauthorized 状态码以及WWW-Authenticate 消息头以后在后续请求中发送此消息头。

    4. X-XSS-Protection:用于开启浏览器的XSS过滤功能,当检测到跨站脚本攻击 (XSS)时,浏览器将中止加载页面,以防止XSS跨站脚本攻击。

    5. Content-Security-Policy:中文名内容安全策略,主要思想是经过内容来源白名单机制,使浏览器仅渲染或执行来自这些来源的资源。容许站点管理者控制用户代理可以为某个页面获取哪些资源。

更多http安全信息能够访问 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

    

 

HTTP管道技术(Pipelining )

  通常浏览器会在收到上一个请求的响应以后,再发送下一个请求。而http管道技术就是能够将多个http请求同一批发送,这些http请求使用同一个 TCP 链接,而发送过程当中客户端不须要等待服务器对前一个请求的响应。

    http无管道和有管道示意图

   

 

 

 HTTP 缓存  

   HTTP换成分为两类:强制缓存,协商缓存。

   HTTP缓存相关头信息:

    1.强缓存:Pragma、Cache-Control、Expries。

    2.协商缓存:Last-Modified/If-Modified-Since、Etag/If-None-Match。

 

HTTP 代理

  HTTP 代理(Web 代理)实际上是一种存在于网络中间的实体,能够提供各类功能,位于客户端和服务端之间,扮演「中间人」的角色,在两端之间来回传递报文。。

Keep-Alive模式

 

多路复用

 

HTTP长链接

 

  

SPDY协议

 

 

HTTP协议应用-防盗链

 

 

HTTP协议与Cookie

   Cookie的产生就是为了解决 HTTP 协议无状态的问题。Cookie是可以让网站 Web 服务器把少许数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术。

  原理:

    服务端经过 Set-Cookie 这个响应头来向客户端中写入 Cookie 信息,而客户端读取 Set-Cookie 这个响应头中的信息存储起来,在下次请求的时候取出来,再经过 Cookie这个请求头,将 Cookie 的数据传输给服务端。

   

 

 

HTTP与HTTPS

  因为HTTP协议自己是不够安全的,好比在咱们登录网站的时候,帐号和密码经由Http协议传输到服务器上,这中间可能或有人能够截取信息,这样信息就会不安全,好比著名的中间人攻击。因此为了解决http在传输过程当中不加密的问题,以后就增长了一个SSL协议,这个协议提供了数据安全和完整性,也就是负责网络链接安全。

 

 

参考来源:

  https://mp.weixin.qq.com/s/xc8A2dKlZmPHUhFcAevPxw