Http协议概览

浏览器请求过程:

  • web浏览器地址栏输入url
  • 浏览器从web服务器获取文件资源信息

协议是规则的约定

网络分层:

(1)应用层:应用层决定了向用户提供应用服务时通信的活动 (HTTP FTP DNS) HTTP 超文本传输层协议 DNS 域名解析 提供域名到ip之间的解析服务 FTP 文件传输协议

(2)传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输 TCP 传输控制协议 提供可靠的字节流服务,将大块数据分割成以报文段为单位的数据包进行管理 三次握手:发送端发送带有SYN标志的数据包 > 接收端收到后回传带有SYN/ACK标志的数据包 > 发送端传回带有ACK标志的数据包 UDP 用户数据报协议

(3)网络层:网络层用来处理网络上流动的数据包。数据包是网络传输的最小单元 IP 网际协议 作用是将把数据包传送给对方 IP地址 :指明了节点被分配的地址(可变) MAC地址 :指网卡所属的固定地址 (不可变) ARP 地址解析协议 根据通讯方的IP地址反查出MAC地址

(4)数据链路层:用来处理连接网络的硬件部分 NIC 网络适配器

  • TCP/IP是互联网相关的各类协议族的统称
  • HTML 超文本标记语言
  • URI 统一资源标识符
  • URL 统一资源定位符
  • XFT 跨站追踪
  • SST 安全套接层
  • TLS 传输层安全
  • HTTP是无状态协议,它不对之前发生过请求和响应的状态进行管理

HTTP在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量的访问请求。 但是,编码的操作需要计算机来完成,因此会消耗更多的CPU等资源

  • HTTP方法:方法的作用在于,可以指定请求的资源按某种期望产生某种行为
  • GET 获取资源
  • POST 传输实体主体
  • PUT 传输文件
  • HEAD 获取报文首部
  • DELET 删除文件
  • OPTIONS 询问支持方法
  • TRACE 追踪路径
  • CONNECT 要求用隧道协议连接代理

HTTP与HTTPS

HTTP的不足:

  • 1、通信使用明文(不加密),内容可能会被窃听
  • 2、不验证通信方的身份,因此有可能遭遇伪装
  • 3、无法证明报文的完整性,所以有可能已遭篡改

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

  • HTTP加上加密处理和认证以及完整性保护后即是HTTPS
  • HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(SecureSocket Layer)和TLS(Transport Layer Security)协议代替而已
  • 所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP

既然HTTPS那么安全可靠,那为何所有的Web网站不一直使用HTTPS?

  • 其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源, 平摊到一台计算机上时,能够处理的请求数量必定也会随之减少

HTTP的瓶颈:

  • 1、一条连接上只可发送一个请求。
  • 2、请求只能从客户端开始。客户端不可以接收除响应以外的指令
  • 3、请求/响应首部未经压缩就发送。首部信息越多延迟越大。
  • 4、送冗长的首部。每次互相发送相同的首部造成的浪费较多。
  • 5、可任意选择数据压缩格式。非强制压缩发送。

WebSocket协议:

  • 为了实现WebSocket通信,需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手的目的 由于是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,而一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。

状态码的职责是当客户端向服务端发送请求时,描述返回的结果。 状态码类别:

  • 1XX Informational(信息性状态码) 接受的请求正在处理
  • 2XX Success(成功状态码) 请求正常处理完毕
  • 3XX Rediretcion(重定向状态码) 需要附加操作完成请求
  • 4XX Client Error(客户端错误状态码) 服务器无法处理请求
  • 5XX Server Error(服务端错误状态码)服务器处理请求出错

通信数据转发程序:(代理、网关、隧道) 这些应用程序和服务器可以将可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应并转发给客户端。

  • 1、代理: 代理是一种有转发功能的应用程序,他扮演了客户端和服务器之间的中间人, 接受由客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端

  • 代理分类: 1 是否使用缓存 代理转发响应时,缓存代理会预先将资源副本缓存保存在代理服务器上,当代理再次接收到相同的资源请求时,就直接返回缓存资源作为响应 2 是否会修改报文 透明代理 不对报文做出修改 非透明代理 对报文做出修改

  • 2、网关: 网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。 有时客户端可能都不会察觉,自己的通信目标是一个网关

  • 3、隧道: 隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信

HTTP报文首部

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息

  • 通用首部字段: 有关缓存:

  • Cache-Control: 通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制

    • no-cache 响应 告诉浏览器忽略资源的缓存副本,强制每次请求直接发送给服务器,拉取资源,但不是“不缓存” no-cache代表不缓存过期资源,缓存会向源服务器进行有效期确认后处理资源
    • no-store 响应 强制缓存在任何情况下都不要保留任何副本
    • max-age=[秒] 响应 指明缓存副本的有效时长,从请求时间开始到过期时间之间的秒数
    • public 响应 任何路径的缓存者(本地缓存、代理服务器),可以无条件的缓存改资源
    • private 响应 只针对单个用户或者实体(不同用户、窗口)缓存资源
    • must-revalidate 告诉缓存,在没有跟服务器校验的情况下,不能提供这个对象的旧版本,如果服务器不可用,那么缓存必须返回504Gateway Timeout的错误
  • max-age: 如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源,当指定max-age值为0,那么缓存服务器通常需要将请求转发给源服务器

  • Connection: 管理持久连接,控制不再转发给代理的首部字段

  • Via: 使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径。

  • 请求首部字段:

    • Accept: Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级
    • Accept-Charset: Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序
    • Accept-Encoding: Accept-Encoding首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序
    • Accept-Language: Accept-Language用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集
    • Authorization: Authorization是用来告知服务器,用户代理的认证信息(证书值)
    • Expect: Expect来告知服务器,期望出现的某种特定行为
    • From: From用来告知服务器使用用户代理的用户的电子邮件地址
    • Host: Host会告知服务器,请求的资源所处的互联网主机名和端口号
    • If-Modified-Since: If-Modified-Since用于确认代理或客户端拥有的本地资源的有效性
    • Referer: Referer会告知服务器请求的原始资源的URI
    • User-Agent: User-Agent会将创建请求的浏览器和用户代理名称等信息传达给服务器。
  • 响应首部字段:

    • Accept-Ranges: Accept-Ranges是用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源
    • Age: Age能告知客户端,源服务器在多久前创建了响应
    • ETag: ETag能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值
    • Location: Location可以将响应接收方引导至某个与请求URI位置不同的资源
    • Proxy-Authenticate: Proxy-Authenticate会把由代理服务器所要求的认证信息发送给客户端
    • Retry-After: Retry-After告知客户端应该在多久之后再次发送请求
    • Server: Server告知客户端当前服务器上安装的HTTP服务器应用程序的信息
  • 实体首部字段:实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息

    • Allow: Allow用于通知客户端能够支持Request-URI指定资源的所有HTTP方法
    • Content-Encoding: Content-Encoding会告知客户端服务器对实体的主体部分选用的内容编码方式
    • Content-Language: Content-Language会告知客户端,实体主体使用的自然语言(指中文或英文等语言)
    • Content-Length: Content-Length表明了实体主体部分的大小(单位是字节)
    • Content-MD5: Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达
    • Content-Type: Content-Type说明了实体主体内对象的媒体类型
    • Expires: Expires会将资源失效的日期告知客户端
    • Last-Modified: Last-Modified指明资源最终修改的时间

Cookie的工作机制是用户识别及状态管理

  • 一旦Cookie从服务器端发送至客户端,服务器端就不存在可以显式删除Cookie的方法。但可通过覆盖已过期的Cookie,实现对客户端Cookie的实质性删除操作。

版权声明:本文为qq_41354978原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。