Skip to main content

学习HTTP协议

  1. Web使用一种名为HTTP的协议作为规范,完成从客户端到服务器等一些列运作流程。而协议是指规则的约定。Web是建立在HTTP协议上通信的。

  2. 通常实用的网络(包括互联网)实在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。

  3. TCP/IP协议族里最重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层、数据链路层。各个层次的作用: 应用层:应用层决定了向用户提供应用服务时通信的活动。TCP/IP协议族内预存了各类通用的应用服务,比如FTP,DNS服务就是两类。 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两种性质不同的协议:TCP(传输控制协议)和UDP(用户数据报协议) 网络层:网络层用来处理网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。 链路层:用来处理连接网络的硬件部分。包括控制操作系统,硬件的设备驱动,等等。硬件上的范畴均在链路层的作用范围之内。 发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部消息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种数据信息包装起来的做法成为封装。

  4. TCP位于传输层,提供可靠的字节流服务。TCP协议为了更容易传输大数据,把数据进行分割。TCP协议能够确认数据最终是否送达到对方。

  5. 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定有一端是客户端,另一端是服务器端。有时候,按照实际情况,两台计算机作为客户端和服务器端的角色有可能会互换。但就仅从一条通信路线来说,服务器端和客户端的角色是确定的,而用HTTP协议能够明确的区分哪端是客户端,哪端是服务器端。

  6. HTTP是不保存状态的协议,即无状态(stateless)的协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。 avatar HTTP协议自身不具备保存之前发送过的请求或响应的功能。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。

  7. GET--获取资源。。。POST--传输实体主体。。。HEAD--获得报文首部,HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。。。OPTION--询问支持的方法 avatar TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止传输。客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改/篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理中转,TRACE方法就是用来确认连接过程中发生的一系列操作。 avatar

  8. 使用方法下达命令。。向请求URI指定的资源发送请求报文时,采用成为方法的命令。方法的作用在于,可以指定请求的资源按期望产生某种作用。 avatar

  9. HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。当年的文本传输都是容量很小的文本传输。可是随着HTTP的普及,文档中包含大量图片。HTTP/1.1和1.0想出了持久连接的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。持久连接旨在建立1次TCP连接后进行多次请求和响应的交互。

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

  11. HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。

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

  13. HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常,并不一定要有报文主体。 avatar 请求报文和响应报文的首部由三部分组成: avatar 请求行--包含用于请求的方法,请求URL和HTTP版本。 状态行--包含表明响应结果的状态码,原因短语和HTTP版本 首部字段--包含表示请求和响应的各种条件和属性的各类首部 一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。

  14. HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输调率。通过在传输时编码,能有效地处理大量的访问请求。但是,编码的操作需要计算机来完成,因此会消耗更多的CPU资源。编码提升速率体现在两点:1. 压缩传输的内容编码。2. 分割发送的分块传输编码

  15. 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了状态,还是出现了错误。 状态码如 200 OK ,以3位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。响应类别有以下五种: avatar

  16. 一台Web服务器可以搭建多个独立域名的Web网站,也可以作为通信路径上的中转服务器以提升传输效率。 --在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。由此观之,当请求发送到服务器时,已经是以IP地址形式访问了。 --在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完成指定主机名或域名的URI。

  17. HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应再转发给客户端。 代理,是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。 使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制。。。 avatar 网关,是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。。网关的工作机制和代理十分相似,而网关能使通信线路上的服务器提供非HTTP协议服务。 avatar 隧道,是在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序。。隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。隧道本身不会去解析HTTP请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。

  18. 缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。缓存服务器是代理服务器的一种,并归类在缓存类型汇总。当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本。。缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。因此客户端可就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求。

  19. HTTP的缺点:(1)通信使用明文(不加密),内容可能会被窃听。(2)不验证通信方的身份,因此有可能遭遇伪装。(3)无法证明报文的完整性,所以有可能已遭篡改。 这些问题不仅在HTTP上出现,其他未加密的协议中也会存在这类问题。

  20. 通信的加密:HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。 内容的加密:即把HTTP报文里所含的内容进行加密处理。在这种情况下,客户点需要对HTTP报文进行加密处理后再发送请求。如图: avatar 为了做到有效的内容加密,前提是要求客户端和服务器同时具备加密和解密机制。主要引用在Web服务中。该方式不同于SSL或TLS将整个通信线路加密处理,所以内容仍有被篡改的风险。

  21. HTTP协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下各种隐患。(1)无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器,有可能是已经伪装的Web服务器(2)无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端(3)无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。(4)无法判定请求时来自何方、出自谁手(5)即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)

  22. 查看对手的证书虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。 通过使用证书,以证明通信方就是意料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。