HTTP协议

HTTP协议

Web是,建立在HTTP协议上通信的,凭此完成从客户端到服务器端的通信流程,即输入URL访问对应的文件资源(resource)。

URL(统一资源定位符)由两部分组成,分别是服务器主机名和对象的路径名。

URI (统一资源标识符)是 Uniform Resource Identifier 的缩写。RFC2396 分别对这 3 个单词进行了如下定义。

Uniform

规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如 http: 或 ftp:)也更容易。

Resource

资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体。

Identifier

表示可标识的对象。也称为标识符。

综上所述,URI就是某个协议方案表示的资源的定位标识符。协议方案是指访问资源所用的协议类型名称。

(除HTTP协议外,还有ftp,mailto,telnet等)

URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。URL是URI的子集。

在这个过程中,由DNS来解析域名为IP地址,访问到对应的IP地址。其中,由TCP协议来保证整个传送是可靠的并分割HTTP请求报文。要注意到HTTP本身是一个无状态协议,本身不保留客户机的任何信息。

客户端是访问文本或图像等资源的一端,而提供资源响应的一端称之为服务器端。两者角色可能会发生互换,但就其一条通信线路来说,服务器端和客户端的角色是确定的。

客户端将会先发出请求,服务器端再对请求进行响应并返回。

从Headers看HTTP

请求报文:

响应报文:

  1. 内容协商,根据浏览器的默认语言,选择加载相应的web页面,如图中 content-language 显示是zh,也就是加载中文界面(当然 我这个小破站只有中文)

    内容协商技术有 服务器驱动协商,客户端驱动协商,透明协商三种

  2. content-encoding,内容编码,也就是指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。压缩的目的是为了更快的传输(之前也有想过用nginx设置来着,结果这里也显示的是gzip)

  3. Status Code,当客户端在向服务端发送请求时,状态码描述返回的结果。这里显示的是200,也就意味着客户端发来的请求在服务器端正常处理了。

    复制露露的

  4. method

图中的method是告知服务器意图的HTTP方法。

GET方法用来请求访问已经被URI识别的资源,指定的资源经服务器解析后返回响应内容(也就是获取资源)。

而POST方法用来传输实体的主体

在buzhou.site中搜索MySQL,会弹出搜索结果,

此时我们再按CTRL+shift+i,查看请求头,

也就是告诉服务器我们的意图。

同时还有PUT、HEAD、DELETE、OPTIONS、TRACE、CONNECT、LINK、UNLINK方法。但常用的还是GET与POST。

HTTP协议的一些小细节

持久连接

在HTTP初始协议中,每进行一次HTTP通信就要断开一次TCP连接,随着HTTP的广泛使用,页面中包含的资源越来越多,多次请

求导致TCP连接不断地建立和断开,增加了不必要的通信开销。

为此,在HTTP/1.0开始的版本当中,采用了持久连接,也就是只要任意一端没有明确提出断开连接,那么就保持TCP连接状态

持久连接使得管线化方式发送成为可能,也就是同时并行发送多个请求。

无状态协议简化了服务器的内容消耗,但其意味着无法根据原本客户端的状态进行本次的请求处理。

为此提出了cookie技术,使得服务器能够识别用户,将内容与用户关联起来,比如现在的大数据推送就是基于网站保存的cookie,国外网站一般在存储之前都会问是否允许存储而国内的就相当流氓了hhh

Cookie技术又是怎么做的呢?

通过在请求和响应报文中写入了响应的Cookie信息来控制客户端的状态,像我的这种简陋的网站一时还没去用这种高端的技术,但是网站的猫图提供源还是用到了,

Cookie会根据从服务器端发送的响应请求报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送过去。

范围请求

过去,在网速不稳定的时候,传输一个尺寸较大的图片时,遭遇网络中断,那就必须从头再来。

为了应对这种情况,HTTP协议提供了一种可恢复机制,即指定范围发送请求,如对于一份10 000字节大小的资源,如果使用范围请求,就可以只请求5001-10 000字节内的资源。

对应的状态码为206(partial content)

通信数据转发程序 :代理、网关、隧道

HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。

这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应再转发给客户端。

代理

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

这里面有缓存代理与透明代理两种,缓存代理,可以用来实现CDN (Google到了这一篇来印证猜想),而透明代理则在转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)(梯子就是这种啦。

网关

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

能使通信线路上的服务器提供非 HTTP 协议服务。

利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。比如,网关可以连接数据库,使用 SQL 语句查询数据。另外,在 Web 购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。

隧道

隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。隧道可按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。

HTTP与HTTPS

HTTP 主要有这些不足:

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

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

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。

通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披 SSL 协议这层外壳的 HTTP。

SSL 采用一种叫做公开密钥加密(Public-key cryptography)的加密处理方式。

……

Reference

《图解HTTP》2014-04

posted @ 2020-10-17 15:13  不周客  阅读(171)  评论(0编辑  收藏  举报