图解HTTP

文章目录

图解HTTP

第1章 简单的HTTP协议

1.HTTP/1.1中可使用的方法

名称含义
GET获取资源
POST传输实体主体
PUT传输文件(不使用该方法)
HEAD获取报文首部
DELETE删除文件(不使用)
OPTIONS询问支持的方法:用来查询针对请求URI指定的资源支持的方法
TRACE追踪路径:让Web服务器端将之前的请求通信环回给客户端
CONNECT要求用隧道协议连接代理

2.持久连接

非持久连接

在这里插入图片描述

持久连接

在这里插入图片描述

持久连接的好处在于减少了 TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了。在 HTTP/1.1中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。

3.管线化

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

U=_DX;9Wcoaq

basedir=/opt/mysql-8.0 /

datadir=/opt/mysql-8.0/data/

socket=/tmp/mysql.sock

4.使用Cookie的状态管理

使用Cokie后,服务器就可以记住客户端,避免网页重复登录。

第2章 HTTP报文内的HTTP信息

1.HTTP报文的结构

在这里插入图片描述

2.请求报文的格式

在这里插入图片描述

示例

在这里插入图片描述

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

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

3.响应报文的格式

在这里插入图片描述

示例
在这里插入图片描述

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

4.编码提升传输效率

4.1 概念

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

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

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

实体:要发送的数据。

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

4.3 压缩传输的内容编码

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

常用的内容编码:

  • gzip(GNU zip)
  • compress(UNIX系统的标准压缩)
  • deflate(zlib)
  • identity(不进行编码)

4.4 分割发送的分块传输编码

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

分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标进制来标记。

使用分块传输编码的实体主体会由接收的客户端负责解码,恢复到编码前的实体主体。

HTTP/1.1 中存在一种称为传输编码(Transfer Coding)的机制,它可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.6 获取部分内容的范围请求

以前,用户不能使用现在这种高速的带宽访问互联网,当时,下载一个尺寸稍大的图片或文件就已经很吃力了。如果下载过程中遇到网络中断的情况,那就必须重头开始。为了解决上述问题,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。
要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求(Range Request)

在这里插入图片描述

如果服务器端无法响应范围请求,则会返回状态码 200 OK 和完整的实体内容。

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

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

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

内容协商技术有3种类型

  1. 服务器驱动协商

由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。但对用户来说,以浏览器发送的信息作为判定的依据,并不一定能筛选出最优内容。

  1. 客户端驱动协商

由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选择。比如按 OS 的类型或浏览器类型,自行切换成PC版页面或手机版页面。

  1. 透明协商

是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。

第3章 返回结果的HTTP状态码

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

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

状态码的类别

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求错误

3.2 2XX成功

3.2.1 200 OK

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

3.2.2 204 No Content

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。

3.2.3 206 Partial Content

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

3.3 3XX 重定向

3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

3.3. 1 301 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI重新保存。

3.3.2 302 Found

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

3.3.3 303 See Other

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

3.3.4 304 Not Modified

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

3.3.5 307 Temporary Redirect

临时重定向。该状态码与 302 Found 有着相同的含义。

3.4 4XX 客户端错误

3.4.1 400 Bad Request

该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像200OK一样对待该状态码。

3.4.2 401 Unauthorized

在这里插入图片描述

3.4.3 403 Forbidden

该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。

3.4.4 404 Not Found

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

3.5 5XX 服务器错误

3.5.1 500 Internal Server Error

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

3.5.2 503 Service Unavailable

该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfer 首部字段再返回给客户端。

第4章 与HTTP协作的Web服务器

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

HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。比如,提供 Web 托管服务(Web Hosting Service)的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不同的网站。这是因为利用了虚拟主机(Virtual Host,又称虚拟服务器)的功能。
即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以假想已具有多台服务器。

因此在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。

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

HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。
这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并且能接收从那台服务器发送的响应再转发给客户端。

4.2. 1 代理

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

代理分类:

  1. 缓存代理

代理转发响应时,缓存代理(CachingProxy)会预先将资源的副本(缓存)保存在代理服务器上。
当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。

  1. 透明代理

转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理。

4.2.2 网关

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

网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务。
利用网关能提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。比如,网关可以连接数据库,使用SOL语句查询数据。另外,在Web购物网站上进行信用卡结算时,网关可以和信用卡结算系统联动。

4.2.3 隧道

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

4.3 保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
缓存服务器是代理服务器的一种,并归类在缓存代理类型中。换句话说,当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本。

缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。因此客户端可就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求了,

4.3.1 缓存的有效期限

即使存在缓存,也会因为客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获取“新”资源,

4.3.2 客户端的缓存

缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。以Internet Explorer 程序为例,把客户端缓存称为临时网络文件(Temporary Internet File)。
浏览器缓存如果有效,就不必再向服务器请求相同的资源了,可以直接从本地磁盘内读取。
另外,和缓存服务器相同的一点是,当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。

第5章 HTTP首部

5.1 首部字段结构

HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔。

首部字段名:字段值

例如:

Content-Type: text/html

字段值对应单个HTTP首部字段可以有多个值。

Keep-Alive: timeout=15,max=100

5.2 通用首部字段

首部字段名说明
Cache-Control控制缓存的行为
Connection逐跳首部、连接的管理
Date创建报文的日期时间
Pragam报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器的相关信息
Warning错误通知

通用首部字段是指,请求报文和响应报文双方都会使用的首部。

5.2.1 Cache-Control

缓存请求指令

指令参数说明
no-cache强制向源服务器再次验证
no-store不缓存请求或响应的任何内容
max-age=[秒]必需响应的最大Age值
max-stale(=[秒])可省略接收已过期的响应
min-fresh=[秒]必需期望在指定时间内的响应仍有效
no-transform代理不可更改媒体类型
only-if-cached从缓存获取资源
cache-extension-新指令标记

缓存响应指令

指令参数说明
public可向任意方提供响应的缓存
private可省略仅向特定用户返回响应
no-cache可省略缓存前必须先确认其有效性
no-store不缓存请求或响应的任何内容
no-transform代理不可更改媒体类型
must-revalidate可缓存但必须再向源服务器进行确认
proxy-revalidate要求中间缓存服务器对缓存的响应有效性再进行确认
max-age=[秒]必须响应的最大Age值
s-maxage=[秒]必需公共缓存服务器响应的最大Age值
cache-extension-新指令标记
5.2.1.1 public
Cache-Control: public

当指定使用 public 指令时,则明确表明其他用户也可利用缓存.

5.2.1.2 private
Cache-Control: private

当指定 private 指令后,响应只以特定的用户作为对象,这与 public指令的行为相反。
缓存服务器会对该特定用户提供资源缓存的服务,对于其他用户发送过来的请求,代理服务器则不会返回缓存。

5.2.1.3 no-cache
Cache-Control: no-cache

使用 no-cache 指令的目的是为了防止从缓存中返回过期的资源
客户端发送的请求中如果包含 no-cache 指令,则表示客户端将不会接收缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器:

如果服务器返回的响应中包含 no-cache 指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。

5.2.1.4 no-store
Cache-Control: no-store

该指令规定缓存不能在本地存储请求或响应的任一部分.

5.2.1.5 s-maxage
Cache-Control: s-maxage=604800

s-maxage 指令的功能和 max-age 指令的相同,它们的不同点是 s-maxage 指令只适用于供多位用户使用的公共缓存服务器2。也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。
2 这里一般指代理。–译者注
另外,当使用 s-maxage 指令后,则直接忽略对 Expires 首部字段及max-age 指令的处理。

5.2.1.6 max-age
Cache-Control:max-age = 604800

当客户端发送的请求中包含 max-age 指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。另外,当指定 max-age 值为0,那么缓存服务器通常需要将请求转发给源服务器
当服务器返回的响应中包含 max-age 指令时,缓存服务器将不对资源的有效性再作确认,而 max-age 数值代表资源保存为缓存的最长时间

5.2.1.7 min-fresh
Cache-Control:min-fresh = 60

min-fesh 指令要求缓存服务器返回至少还未过指定时间的缓存资源.

比如,当指定 min-fesh 为 60 秒后,过了 60 秒的资源都无法作为响应返回了.

5.2.1.8 max-stale
Cache-Control:max-stale = 3600

使用 max-stale 可指示缓存资源,即使过期也照常接收。
如果指令未指定参数值,那么无论经过多久,客户端都会接收响应.如果指令中指定了具体数值,那么即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收。

5.2.1.9 only-if-cached
Cache-Control:only-if-cached

使用 only-ifcached 指令表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码 504 Gateway Timeout。

5.2.1.10 must-revalidate
Cache-Control:must-revalidate

使用 must-revalidate 指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端条 504(Gateway Timeout)状态码。
另外,使用 must-revalidate 指令会忽略请求的 max-stale 指令(即使已经在首部使用了 max-stale,也不会再有效果)

5.2.1.11 proxy-revalidate
Cache-Control:proxy-revalidate

proxy-revalidate 指令要求所有的缓存服务器在接收到客户端带有该指
令的请求返回响应之前,必须再次验证缓存的有效性。

5.2.1.12 no-transform
Cache-Control:no-transform

使用 no-transform 指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。
这样做可防止缓存或代理压缩图片等类似操作.

5.2.2 Connection

Connection 首部字段具备如下两个作用

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2.3 Date

在这里插入图片描述

5.2.4 Trailer

在这里插入图片描述

5.2.5 Via

使用首部字段 Ⅵa 是为了追踪客户端与服务器之间的请求和响应报文的传输路径。
报文经过代理或网关时,会先在首部字段 Va 中附加该服务器的信息,然后再进行转发。这个做法和 traceroute 及电子邮件的Received首部的工作机制很类似。
首部字段 Ⅵa 不仅用于追踪报文的转发,还可避免请求回环的发生。
所以必须在经过代理时附加该首部字段内容。

5.2.6 Warning

在这里插入图片描述

在这里插入图片描述

5.3 请求首部字段

首部字段名说明
Accept用户代码可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的内容编码
Accept-Language优先的语言
AuthorizationWeb认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器
If-Match比较实体标记
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记
If-Range资源未更新时发送实体Byte的范围请求
If-Unmodified-Since比较资源的更新时间
Max-Authorization代理服务器要求客户端的认证信息
Range实体的字节范围请求
Referer对请求中URI的原始获取方
TE传输编码的优先级
User-AgentHTTP客户端程序的信息
5.3.1 Accept

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 tpe/subtype 这种形式,一次指定多种媒体类型。

Accept: text/html,application/xhtml+xml,application/xml;q=0

媒体类型:

  • 文本文件

text/html, text/plain, text/css…

application/xhtml+xml,application/xml…

  • 图片文件

image/jpeg, image/gif, image/png…

  • 视频文件

video/mpeg, video/quicktime…

  • 应用程序使用的二进制文件

application/octet-stream, application/zip…

若想要给显示的媒体类型增加优先级,则使用q=来额外表示权重值1,用分号(;)进行分隔。权重值q的范围是 0~1(可精确到小数点后3位),且1为最大值。不指定权重q值时,默认权重为q=1.0。

5.3.2 Accept-Charset

Accept-Charset 首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。另外,可一次性指定多种字符集。与首部字段 Accept 相同的是可用权重q值来表示相对优先级。
该首部字段应用于内容协商机制的服务器驱动协商

5.3.3 Accept-Encoding

Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。可一次性指定多种内容编码。

5.3.4 Accept-Language

在这里插入图片描述

首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。可一次指定多种自然语言集
和 Accept 首部字段一样,按权重值q来表示相对优先级。在上述图例中,客户端在服务器有中文版资源的情况下,会请求其返回中文版对应的响应,没有中文版时,则请求返回英文版响应.

5.3.5 Authorization

在这里插入图片描述

首部字段 Authorization 是用来告知服务器,用户代理的认证信息(证书值)。通常,想要通过服务器认证的用户代理会在接收到返回的401 状态码响应后,把首部字段 Authorization 加入请求中。共用缓存在接收到含有 Authorization 首部字段的请求时的操作处理会略有差异。

5.3.6 Expect

客户端使用首部字段 Expect来告知服务器,期望出现的某种特定行为。因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码 417 Expectation Failed.
客户端可以利用该首部字段,写明所期望的扩展。虽然 HTTP/11规范只定义了 100-continue(状态码 100 Continue 之意)。
等待状态码 100 响应的客户端在发生请求时,需要指定 Expect:100-
continue .

5.3. 7 From

首部字段 From 用来告知服务器使用用户代理的用户的电子邮件地址。通常,其使用目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。使用代理时,应尽可能包含From 首部字段(但可能会因代理不同,将电子邮件地址记录在 User-Agent 首部字段内).

5.3.8 Host

首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端口号。Host 首部字段在 HTTP/1.1 规范内是唯一一个必须被包含在请求内的首部字段。

5.3.9 User-Agent

用于传达浏览器的种类。

5.4 响应首部字段

首部字段名说明
Accept-Ranges是否接受字节范围请求
Age推算资源创建经过时间
ETag资源的匹配信息
Location令客户端重定向至指定URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求
ServerHTTP服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息
5.4.1 Accept-Ranges
Accept-Ranges:bytes

首部字段 Accept-Ranges 是用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。
可指定的字段值有两种,可处理范围请求时指定其为 bytes,反之则指定其为 none。

5.4.2 Age

首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段值的单位为秒。
若创建该响应的服务器是缓存服务器,Age 值是指缓存后的响应再次发起认证到认证完成的时间值。代理创建响应时必须加上首部字段Age.

5.4.3 ETag

首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值。另外,当资源更新时,EIag值也需要更新。生成EIag值时,并没有统一的算法规则,而仅仅是由服务器来分配。

5.4.4 Location

在这里插入图片描述

使用首部字段 Location 可以将响应接收方引导至某个与请求 URI位置不同的资源。
基本上,该字段会配合 3xx:Redirection 的响应,提供重定向的URI.
几乎所有的浏览器在接收到包含首部字段 Location 的响应后,都会强制性地尝试对已提示的重定向资源的访问。

5.4.5 Retry-After

首部字段 Retry-Afer 告知客户端应该在多久之后再次发送请求。主要配合状态码 503 Service Unavailable 响应,或 3xx Redirect 响应一起使用。
字段值可以指定为具体的日期时间(Wed.04 Ju 2012 06:34:24GMT等格式),也可以是创建响应后的秒数。

5.4.6 Server

首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。不单单会标出服务器上的软件应用名称,还有可能包括版本号和安装时启用的可选项。

5.5 实体首部字段

首部字段名说明
Allow资源可支持的HTTP方法
Content-Encoding实体主体适用的编码方式
Content-Language实体主体的自然语言
Content-Length实体主体的大小(单位:字节)
Content-Location代替对应资源的URI
Content-MD5实体主体的报文摘要
Content-Range实体主体的位置范围
Content-Type实体主体的媒体类型
Expires实体主体过期的日期时间
Last-Modified资源的最后修改日期时间
5.5.1 Allow

首部字段 Allow 用于通知客户端能够支持 Request-URI指定资源的所有 HTTP 方法。当服务器接收到不支持的 HTTP 方法时,会以状态码405 Method Not Allowed 作为响应返回。与此同时,还会把所有能支持的 HTTP 方法写入首部字段 Allow 后返回。

5.5.2 Content-Encoding

首部字段 Content-Encoding 会告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行的压缩。

5.5.3 Content-Language

在这里插入图片描述

5.5.4 Content-Length

首部字段 Content-Length 表明了实体主体部分的大小(单位是字节)。对实体主体进行内容编码传输时,不能再使用Content-Length首部字段。

5.5.5 Content-MD5

首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达,
对报文主体执行 MD5 算法获得的 128 位二进制数,再通过 Base64 编码后将结果写入 Content-MD5 字段值。由于 HTTP 首部无法记录二进制值,所以要通过 Base64 编码处理。为确保报文的有效性,作为接收方的客户端会对报文主体再执行一次相同的 MD5 算法。计算出的值与字段值作比较后,即可判断出报文主体的准确性。
采用这种方法,对内容上的偶发性改变是无从查证的,也无法检测出恶意篡改。其中一个原因在于,内容如果能够被篡改,那么同时意味着 Content-MD5 也可重新计算然后被篡改。所以处在接收阶段的客户端是无法意识到报文主体以及首部字段 Content-MD5 是已经被篡改过的。

5.5.6 Content-Range

针对范围请求,返回响应时使用的首部字段 Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求。字段值以字节为单位,表示当前发送部分及整个实体大小。

5.5.7 Content-Type

首部字段 Content-Type 说明了实体主体内对象的媒体类型。和首部字段 Accept 一样,字段值用 type/subtype 形式赋值。

5.5.8 Expires

首部字段 Expires 会将资源失效的日期告知客户端。缓存服务器在接收到含有首部字段 Expires 的响应后,会以缓存来应答请求,在Expires 字段值指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源。
源服务器不希望缓存服务器对资源缓存时,最好在 Expires 字段内写入与首部字段 Date 相同的时间值。
但是,当首部字段 Cache-Control 有指定 max-age 指令时,比起首部字段 Expires,会优先处理 max-age 指令。

5.5.9 Last-Modified

首部字段 Last-Modifed 指明资源最终修改的时间。一般来说,这个值就是 Request-URI指定资源被修改的时间。但类似使用 CGI 脚本进行动态数据处理时,该值有可能会变成数据最终修改时的时间。

5.6 为Cookie服务的首部字段

5.6.1 首部字段
首部字段名说明首部类型
Set-Cookie开始状态管理所使用的Cookie信息响应首部字段
Cookie服务器收到的Cookie信息请求首部字段

Set-Cookie字段的属性

属性说明
NAME = VALUE赋予Cookie的名称和其值
expires=DATECookie的有效期
path = PATH将服务器上的文件目录作为Cookie的适用对象
domain=域名作为Cookie适用对象的域名
Secure仅在HTTPS安全通信时才会发送Cookie
HttpOnly加以限制,使Cookie不能被JavaScript脚本访问

5.7 其他首部字段

5.7.1 X-Frame-Options

首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击

字段值

  • DENY:拒绝
  • SAMEORIGIN:仅同源域名下的页面匹配时许可。

比如,当指定 http://hackr.ip/sample.html页面为 SAMEORIGIN 时,那么 hackr.ip 上所有页面的 fame 都被允许可加载该页面,而 example.com 等其他域名的页面就不行了。

5.7.2 X-XSS-Protection

首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS 防护机制的开关。

首部字段 X-XSS-Protection 可指定的字段值如下

  • 0:将 XSS 过滤设置成无效状态·
  • 1:将XSS 过滤设置成有效状态
5.7.3 DNT

首部字段 DNT 属于 HTTP 请求首部,其中 DNT 是 Do Not Track 的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。

首部字段 DNT 可指定的字段值如下。

  • 0:同意被追踪
  • 1:拒绝被追踪
5.7.4 P3P

首部字段 P3P 属于 HTTP 相应首部,通过利用 P3P(The Platform forPrivacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。

第6章 确保Web安全的HTTPS

6.1 HTTP的不足

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值