HTTP学习三 - Alias的博客

HTTP学习三

HTTP报文内的HTTP信息

HTTP报文

​ 用户HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行数据构成的字符串文本。

请求报文和响应报文的结构

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

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

首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有四种:通用首部、请求首部、响应首部、实体首部。

其他:可能包含HTTP的RFC里未定义的首部(Cookie等)

编码提升传输效率

报文主体和实体主体的差异

报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。

实体:作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。

HTTP报文主体用于传输请求或响应的实体主体。

通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致他和报文主体产生差异。

压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码

分割放送的分块传输编码

在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主体分块的功能称为分块传输编码。

发送多种数据的多部分对象集合

在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。使用boundary字符串来划分多部分对象集合指明的各类实体。

获取部分内容的范围请求

指定范围发送的请求叫做范围请求

执行范围请求时,会用到首部字段Range来指定资源的byte范围。byte范围的指定形式如下

5001~10000字节

Range:bytes=5001-10000

从5001字节之后的全部

Range:bytes=5001-

从一开始到3000字节和5000~7000字节的多重范围

Range:bytes=-3000,5000-7000

内容协商返回最合适的内容

当浏览器的默认语言为英语或中文,访问相同URI的Web页面时,则会显示对应的英语版或中文版的Web页面。这样的机制称为内容协商。

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最适合的资源。

包含在请求报文中的某些首部字段就是判断的标准,如下:

内容协商技术有以下3种类型

返回结果的HTTP状态码

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

2XX成功

200OK

表示从客户端发来的请求在服务器端被正常处理了。

204 No Content

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。

206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含有Content-Range指定范围的实体内容。

3XX重定向

301 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。

302 Found

临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。

303 See Other

该状态码表示由于请求对应资源存在者另一个URI,应使用GET方法定向获取请求的资源。

304 Not Modified

该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。

307 Temporary Redirect

临时重定向。

4XX客户端错误

400 Bad Request

该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。

401 Unauthorized

该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。

403 Forbidden

该状态码表名对请求资源的访问被服务器拒绝了。

404 Not Found

该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5XX服务器错误

500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的bug或某些临时的故障。

503 Service Unavailable

该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

与HTTP协作的Web服务器

用单台虚拟主机实现多个域名

HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点。即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。

在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

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

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

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

隧道:隧道式在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

代理

代理不改变请求URI。

持有资源实体的服务器被称为源服务器。从源服务器返回的响应经过代理服务器后再传给客户端。

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

缓存代理:代理转发响应时,缓存代理会预先将资源的副本保存在代理服务器上。

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

网关

网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。

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

隧道

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

保存资源的缓存

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

缓存的有效期限

客户端的缓存

把客户端缓存称为临时网络文件

浏览器缓存如果有效,就不必再向服务器请求相同的资源了,可以直接从本地磁盘内读取。

评论