HTTP学习笔记

协议:指规则的约定

HTTP:超文本传输协议

TCP/IP协议族:按层次分为四层--应用层、传输层、网络层、数据链路层

  分层好处:独立、设计简单

  应用层:决定向用户提供应用服务时通信的活动。预存各类通用的应用服务,FTP和DNS服务是其中两类。HTTP也属于该层。

  传输层:对上层应用层,提供处于网络连接中的两台计算机之前的数据传输。 TCP和UDP协议

  网络层:处理网络上流动的数据包。数据包是网络传输的最小数据单位。规定了通过怎样的路径到达对方计算机,并把数据包送给对方    

      与对方计算机之间通过多台计算机或网络设备进行传输时,网络层相当于选择一条传输路线。IP协议。 

  链路层:用来处理连接网络的硬件部分。

  

IP:网络层

  “IP”是一种协议,作用是把各种数据包传送给对方。为确保确实传送到对方那里,需满足各类条件。

  其中两个重要的条件:IP地址(指明节点被分配到的地址)和MAC地址(网卡所属的固定地址)

  ARP协议(中转作用):是一种用以解析地址的协议。根据通信方的IP地址可以反查出对应的MAC地址。

TCP:传输层

  提供可靠的字节流服务。即分割以报文段为单位。

  为确保无误,三次握手。

  

DNS服务:应用层

  提供域名到IP地址之间的解析服务。提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

 各种协议与HTTP协议之间的关系:

  

URI和URL:

  URI(统一资源标识符)、URL(统一资源定位符)

  URI用字符串标识某一互联网资源,URL表示资源的地点。URL是URI的子集。

HTTP协议用于客户端和服务端之间的通信

  客户端:请求访问文本或图像等资源的一端

  服务器端:提供资源响应的一端

  HTTP是无状态协议,不保存通信状态。为了实现期望的保持状态功能,引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。

HTTP方法:

  GET:请求访问已被URI识别的资源

  POST:传输实体的主体。POST与GET相似,但POST的主要目的不是获取响应的主体内容

  PUT:用来传输文件,要求在请求报文的主体中包含文件内容

  HEAD:获得报文首部。用于确认URI的有效性及资源更新的日期时间等

  DELETE:删除文件,与PUT相反,按请求URI删除指定的资源

  OPTIONS:访问支持的方法。查询针对请求URI指定的资源支持的方法

   TRACE:追踪路径。让Web服务器端将之前的请求通信环回给客户端的方法,容易引起跨站追踪攻击,基本上不用

  CONNECT:要求用隧道协议链接代理。即要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用 SSL和TLS 协议把通信内容加密后经网络隧道传输

持久连接:

  访问一个含多张图片的HTML页面,会建立多个请求,每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销

  解决办法:持久连接 HTTP keep-alive 。

    特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态

    优点:减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。减少开销的时间,使请求和响应能够更早地结束。显示速度也就相应提高了。

  持久连接使多数请求以管线化方式成为可能。从前是发送请求后需收到响应,才能发下一个请求。管线化技术出现后,就不用等待响应就可以发送下一个请求。

使用Cookie的状态管理:

  HTTP无状态协议:

    如果要求登录认证的web页面无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。

    也有优点,由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。

  Cookie技术:

    通过在请求和响应报文中写入Cookie信息来控制客户端的状态

    Cookie会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

HTTP报文:交互的信息

  大致分为报文首部和报文主体

  

  

  首部内容组成:

    请求行:包含用于请求的方法,请求URI和HTTP版本

    状态行:包含表明响应结果的状态码,原因短语和HTTP版本

    首部字段:包含表示请求和响应的各种条件和属性的各类首部

    一般有4中首部:通用首部、请求首部、响应首部、实体首部

状态吗:告知从服务器端返回的请求结果

  

  200 OK:客户端发来的请求在服务器被正常处理了

  204 No Content:请求已成功处理,但返回的响应报文中不含实体的主体部分。一般在只需要从客户端往服务端发送信息,而对客户端不需要发送新信息内容的情况下使用

  206 Partial Content:表示客户端进行了范围请求,服务器成功执行了这部分的GET请求。响应报文包含指定范围的实体内容。

  301 Moved Permanently:永久性重定向。表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。

  302 Found:临时性重定向。代表资源不是被永久移动,只是临时性质的。就是已移动的资源对应的URI将来还有可能发生改变。

  303 See Other:表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

  304 Not Modified:资源已找到,但未符合条件请求。

  400 Bad Request:请求报文中存在语法错误。

  401 Unauthorized:表示请求需要通过HTTP认证,若之前已进行过1次请求,表示用户认证失败。  

  403 Forbidden:表明对请求资源的访问被服务器拒绝了。

  404 Not Found:无法找到请求的资源。

  500 Internal Server Error:表明服务器端在执行请求时发生了错误

  503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

代理:

  一种有转发功能的应用程序,扮演了位于服务器和客户端“中间人”的角色,接受由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

  使用理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。

  使用方法按两种基准分类,一种是是否使用缓存,另一种是是否会修改报文

    缓存代理:代理转发响应时,缓存代理会预先将资源的副本(缓存)保存在代理服务器上。再次请求时,直接使用缓存的资源作为响应,不再从源服务器获取。

    透明代理:转发请求或响应时,不对报文做任何加工的代理类型,反之称为非透明代理

网关:转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,就像自己拥有资源的源服务器一样对请求进行处理。

  利用网关能提高通信的安全性,因可在客户端与网关之间的通信线路上加密以确保连接的安全。

隧道:在相隔甚远的客户端和服务端两者之间进行中转,并保持双方通信连接的应用程序。使用SSL加密手段,确保安全通信。

缓存:

  指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,节省了通信流量和通信时间。

  缓存的有效期限

  不仅存在于缓存服务器内,还存在客户端浏览器中(客户端缓存称为临时网络文件),缓存过期后,会向源服务器确认资源的有效性。

HTTP首部:

  传递额外重要信息

  首部字段由  首部字段名:字段值  构成

  通用首部字段:请求报文和响应报文都会使用的首部

  

   请求首部字段:发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息

  

  响应首部字段:返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息

  

  

  实体首部字段:针对请求和响应报文的实体部分使用的首部。补充了资源内容更新时间等于实体相关的信息

   

 Cookie:

   

Set Cookie:

  

  

确保web安全的HTTPS:

  HTTP不足:

   * 通信使用明文(不加密),内容可能被窃听

      通信加密:

        SSL(安全套接层) TLS(安全层传输协议)

        HTTP与SSL组合后形成HTTPS,SSL建立安全通信线路后,在这条线路上进行HTTP协议通信

      内容加密:

        报文主体被加密。前提是客户端和服务端同时具备加密和解密机制。

        只要应用于web服务中。

        由于该方式不同于SSL和TLS将整个通信线路加密,所以内容仍有被篡改的风险

   * 不验证通信方的身份,有可能遭遇伪装

      HTTP通信,不确认通信方,存在以下隐患:

        目标web服务器是伪装的web服务器

        目标客户端是伪装的客户端

        无法确定正在通信的对方是否具备访问权限

        无法判断请求来自何方、出自谁手

        接收无意义的请求,无法阻止海量请求下的DOS攻击(拒绝服务攻击)

      SSL不尽提供加密手段,还使用了一种被称为证书的手段,可以用于确定通信方。

   * 无法证明报文的完整性,有可能已遭篡改

      中间人攻击:请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击

      防止篡改:

        MD5和SHA-1等散列值检验的方法,及用来确认文件的数字签名方法。无法百分百保证。因为PGP和MD5本身被改写的话,用户是没有办法意识到的。

        HTTPS=HTTP+加密+认证+完整性保护

         

  加密方法:

    SSL采用一种叫做 公开密钥加密 的加密处理方式。使用秘钥加密解密。

    加密解密用同一个密钥的方式成为 共享密钥加密(对称秘钥加密),有被窃听的风险。

    使用两把密钥的 公开秘钥加密(非对称密钥),一把叫做私有秘钥,另一把叫做公开密钥。相对共享密钥处理较慢

    *  HTTPS混合加密机制

  HTTP使用的认证方式:

    BASIC(基本认证):用户id和密码组成,经过Base64编码形成最后的结果,写入首部Authorization,发送请求。不安全,不灵活,不常用。

    DIGEST(摘要认证):质询响应机制,同样不灵活,达不到高度安全,适用范围受限。

    SSL客户端认证:由HTTPS的客户端证书完成认证的方式。因费用问题尚未普及。

    FormBase(基于表单认证):输入用户id和密码等登陆信息,发送web应用程序进行认证。    

    

基于HTTP协议的追加协议:

  SPDY:旨在解决HTTP的性能瓶颈,缩短web页面的加载时间

     使用HTTP探知服务器是否有内容更新,必须频繁地从客户端到服务端进行确认。若无内容更新,会产生徒劳的通信。

    瓶颈:

      一条连接上只能发送一个请求

      请求只能从客户端开始。客户端不接收除响应以外的指令

      请求/响应首部未经压缩就发送。首部信息越多延迟越大

      首部冗长

      非强制压缩发送。可选任意压缩格式

    Ajax解决:只更新一部分页面,传输数据少。

    Comet解决:有内容更新再返回响应,延迟应答。为保留响应,一次连接的持续时间变长。

    SPDY是在应用层与传输层之间通过新加会话层的形式运作。

      多路复用流:单一的TCP连接,可以无限制处理多个HTTP请求。只能单个域名

      赋予请求优先级:解决在发送多个请求时,因带宽低而导致响应变慢的问题

      压缩HTTP首部

      推送功能:支持服务端向客户端主动推送数据

      服务器提示功能:服务端可主动提示客户端请求所需资源

    全双工通信的WebSocket协议:

      推送功能:支持服务端向客户端主动推送数据

      减少通信量:每次连接的总开销减少,且WebSocket首部信息小,通信量也相应减少

原文地址:https://www.cnblogs.com/testing2019/p/10738313.html