图解HTTP——总结

来源书籍《图解HTTP》学习总结。css

TCP/IP协议族

协议中存在各式各样的内容。 从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、 双方创建通讯的顺序, 以及 Web 页面显示须要处理的步骤,

clipboard.png

一、TCP/IP 的分层管理:应用层、 传输层、 网络层和数据链路层。html

(1)、应用层:应用层决定了向用户提供应用服务时通讯的活动,如:FTP(File Transfer Protocol, 文件传输协议) 和 DNS(Domain Name System, 域名系统)服务,HTTP协议;
(2)、传输层:对上层应用层, 提供处于网络链接中的两台计算机之间的 数据传输TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol, 用户数据报协议);
(3)、网络层:用来 处理在网络上流动的 数据包。该层规定了经过怎样的路径(所谓的 传输路线)到达对方计算机,并把数据包传送给对方;
(4)、链路层(又名数据链路层, 网络接口层:用来处理链接网络的硬件部分。包括控制操做系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分

二、TCP/IP 通讯传输流算法

clipboard.png

TCP/IP协议族进行网络通讯时,会经过分层顺序与对方进行通讯。发送端从应用层往下走,接收端则往应用层往上走。

clipboard.png

发送端在层与层之间传输数据时,每通过一层时一定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每通过一层时会把对应的首部消去。浏览器

三、与 HTTP 关系密切的协议:IP、TCP、DNS缓存

1)IP协议:(Internet Protocol)协议位于网络层,做用是把各类数据包传送给对方。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address)。IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址能够和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。安全

clipboard.png

2)TCP协议:位于传输层, 提供可靠的字节流服务,TCP 协议为了更容易传送大数据才把数据分割, 并且 TCP 协议可以确认数据最终是否送达到对方。
TCP 协议采用了三次握手three-way handshaking)策略,握手过程当中使用了 TCP 的标志 —— SYN(synchronize)和 ACK(acknowledgement)。服务器

clipboard.png

3)负责域名解析的 DNS 服务:和 HTTP 协议同样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。DNS 协议提供经过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。网络

clipboard.png

HTTP 协议的通讯过程:
clipboard.pngapp

四、URI(统一资源标识符)和 URL(Uniform Resource Locator,统一资源定位符)less

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

URI格式以下:
clipboard.png
以下URI例子:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc23...
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2

简单的 HTTP 协议

一、HTTP 协议用于客户端和服务器端之间的通讯
请求网页资源得例子:
clipboard.png

请求报文:是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。

clipboard.png
响应报文:基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的缘由短语、可选的响应首部字段以及实体主体构成。稍后咱们会对这些内容进行详细说明。

clipboard.png

HTTP 是一种不保存状态,即无状态(stateless)协议。不具有保存以前发送过的请求或响应的功能。为了实现指望的保持状态功能,因而引入了 Cookie 技术。

二、请求 URI 定位资源

HTTP 协议使用 URI 定位互联网上的资源。

指定请求URI得方式:( 若是不是访问特定资源而是对服务器自己发起请求,能够用一个 * 来代替请求 URI。)

clipboard.png

三、告知服务器意图的 HTTP 方法
1)、GET:获取资源,用来请求访问已被 URI 识别的资源;
2)、POST:传输实体主体;
3)、PUT:传输文件——鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人均可以上传文件 , 存在安全性问题, 所以通常的 Web 网站不使用该方法;
4)、HEAD:得到报文首部,和 GET 方法同样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等;
5)、DELETE:删除文件,与 PUT 相反的方法。按请求 URI 删除指定的资源;
6)、OPTIONS:询问支持的方法;
7)、TRACE:追踪路径,让 Web 服务器端将以前的请求通讯环回给客户端的方法。发送请求时,在 Max-Forwards 首部字段中填入数值,每通过一个服务器端就将该数字减 1,当数值恰好减到 0 时,就中止继续传输,最后接收到请求的服务器端则返回状态码 200 OK 的响应。客户端经过 TRACE 方法能够查询发送出去的请求是怎样被加工修改 / 篡改的。不经常使用易引起XST(Cross-Site Tracing, 跨站追踪)攻击;
8)、CONNECT:要求用隧道协议链接代理,要求在与代理服务器通讯时创建隧道,实现用隧道协议进行 TCP 通讯。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通讯内容加密后经网络隧道传输。

clipboard.png

四、持久链接节省通讯量

1)、持久链接

HTTP 协议的初始版本中,每进行一次 HTTP 通讯就要断开一次 TCP链接。每次的请求都会形成无谓的 TCP 链接创建和断开,增长通讯量的开销。为解决上述 TCP 链接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久链接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久链接的特色是,只要任意一端没有明确提出断开链接,则保持 TCP 链接状态。

clipboard.png

2)、管线化

从前发送请求后需等待并收到响应, 才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求

clipboard.png

五、使用 Cookie 的状态管理

Cookie 会根据从服务器端发送的响应报文内的一个叫作 Set-Cookie 的首部字段信息, 通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查到底是从哪个客户端发来的链接请求,而后对比服务器上的记录,最后获得以前的状态信息。

clipboard.png

clipboard.png

HTTP 报文内的 HTTP信息

一、HTTP 报文
用于 HTTP 协议交互的信息被称为 HTTP 报文。

请求端(客户端)的HTTP 报文叫作请求报文,响应端(服务器端)的叫作响应报文。TTP 报文自己是由多行(用 CR+LF 做换行符)数据构成的字符串文本。并不必定要有报文主体。

请求行:包含用于请求的方法, 请求 URI 和 HTTP 版本。
状态行:包含代表响应结果的状态码, 缘由短语和 HTTP 版本。
首部字段:包含表示请求和响应的各类条件和属性的各种首部。通常有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
clipboard.png

clipboard.png

clipboard.png

二、编码提高传输速率

能够在传输过程当中经过编码提高传输速率。经过在传输时编码,能有效地处理大量的访问请求。当传输中进行编码操做时,实体主体的内容发生变化,将会致使它和报文主体产生差别。一般, 报文主体等于实体主体。

报文(message):是 HTTP 通讯中的基本单位,由 8 位组字节流(octet sequence,其中 octet 为 8 个比特)组成,经过 HTTP 通讯传输。
实体(entity):做为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
1)、压缩传输的内容编码
经常使用的内容编码有如下几种。
gzip(GNU zip)
compress(UNIX 系统的标准压缩)
deflate(zlib)
identity(不进行编码)
2)、分割发送的分块传输编码
分块传输编码会将实体主体分红多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。

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

就是利用 MIME 来描述标记数据类型。而在 MIME 扩展中会使用一种称为多部分对象集合(Multipart)的方法,来容纳多份不一样类型的数据。

多部分对象集合包含的对象以下。
multipart/form-data:在 Web 表单文件上传时使用。
multipart/byteranges:状态码 206(Partial Content,部份内容)响应报文包含了多个范围的内容时使用。
在 HTTP报文中使用多部分对象集合时, 须要在首部字段里加上Content-type。使用 boundary字符串来划分多部分对象集合指明的各种实体。在boundary字符串指定的各个实体的起始行以前插入“--”标记(例如: --AaB03x、 --THIS_STRING_SEPARATES) , 而在多部分对象集合对应的字符串的最后插入“--”标记(例如: --AaB03x--、 --THIS_STRING_SEPARATES--) 做为结束。

clipboard.png

四、获取部份内容的范围请求
执行范围请求时,会用到首部字段 Range (Range: bytes=-3000, 5000-7000,7000-)来指定资源的 byte 范围。响应会返回状态码为 206 Partial Content 的响应报文。另外,对于多重范围的范围请求, 响应会在首部字段 ContentType 标明 multipart/byteranges 后返回响应报文。若是服务器端没法响应范围请求,则会返回状态码 200 OK 和完整的实体内容。

clipboard.png

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

返回结果的 HTTP 状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。 如 200 OK,以 3 位数字和缘由短语组,数字中的第一位指定了响应类别, 后两位无分类。成。

clipboard.png

一、2XX成功:的响应结果代表请求被正常处理了。
1)、200 ok:请求成功并根据方法的不一样,返回不一样的实体;
2)、204 No Content:该状态码表明服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。无资源可返回;
3)、206 Partial Content:范围请求后,服务器成功执行了该请求;
二、3XX重定向:代表浏览器须要执行某些特殊的处理以正确处理请求。
1)、 301 Moved Permanently:永久性重定向,表示请求的资源已被分配了新的 URI,之后应使用资源如今所指的 URI。
2)、302 Found:临时重定向,该状态码表示请求的资源已被分配了新的 URI,但愿用户(本次)能使用新的 URI 访问。
3)、303 See Other:因为请求对应的资源存在着另外一个 URI,应使用 GET方法定向获取请求的资源。303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET方法获取资源,这点与 302 状态码有区别。

当 30一、 0二、303响应状态码返回时,几乎全部的浏览器都会把POST 改为 GET,并删除请求报文内的主体,以后请求会自动再次发送。30一、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使用时你们都会这么作。

4)、304 Not Modified:表示客户端发送附带条件的请求 2 时,服务器端容许请求访资源,但未知足条件的状况。 (附带条件的请求是指采用 GET方法的请求报文中包含 If-Match, If-ModifiedSince, If-None-Match, If-Range, If-Unmodified-Since 中任一首部。)
5)、307 Temporary Redirect:临时重定向
三、4XX 客户端错误
1)、400 Bad Request:表示请求报文中存在语法错误。
2)、401 Unauthorized:表示发送的请求须要有经过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若以前已进行过 1 次请求, 则表示用户认证失败。返回含有 401 的响应必须包含一个适用于被请求资源的 WWW-Authenticate 首部用以质询(challenge) 用户信息。
3)、403 Forbidden:代表对请求资源的访问被服务器拒绝了。
4)、404 Not Found:代表服务器上没法找到请求的资源。
四、5XX 服务器错误
1)、500 Internal Server Error:代表服务器端在执行请求时发生了错误。有多是 Web应用存在的 bug 或某些临时的故障。
2)、503 Service Unavailable:代表服务器暂时处于超负载或正在进行停机维护,如今没法处理请求。

与 HTTP 协做的 Web 服务器

一台 Web 服务器可搭建多个独立域名的 Web 网站,也可做为通讯路径上的中转服务器提高传输效率。利用虚拟主机(Virtual Host,又称虚拟服务器)的功能,在相同的 IP 地址下,因为虚拟主机能够寄存多个不一样主机名和域名的 Web 网站,所以在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。

一、通讯数据转发程序 : 代理、网关、隧道
1)、代理:是一种有转发功能的应用程序,代理不改变请求 URI,会直接发送给前方持有资源的目标服务器。可级联多台代理服务器。须要附加Via 首部字段以标记出通过的主机信息;
代理有多种使用方法,按两种基准分类。 一种是是否使用缓存,另外一种是是否会修改报文。
缓存代理(Caching Proxy) 会预先将资源的副本(缓存)保存在代理服务器上。代理再次接收到对相同资源的请求时,就能够不从源服务器那里获取资源, 而是将以前缓存的资源做为响应返回。
不对报文作任何加工的代理类型被称为透明代理(Transparent Proxy)。反之,对报文内容进行加工的代理被称为非透明代理
clipboard.png

2)、网关:是转发其余服务器通讯数据的服务器,接收从客户端发送来的请求时,它就像本身拥有资源的源服务器同样对请求进行处理。利用网关能提升通讯的安全性,由于能够在客户端与网关之间的通讯线路上加密以确保链接的安全。
3)、隧道:是在相隔甚远的客户端和服务器二者之间进行中转,并保持双方通讯链接的应用程序。可按要求创建起一条与其余服务器的通讯线路,届时使用 SSL等加密手段进行通讯。确保客户端能与服务器进行安全的通讯

二、保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的 资源副本缓存服务器是代理服务器的一种,并归类在缓存代理类型中。可避免屡次从源服务器转发资源。缓存是有 有效期限的,缓存失效, 缓存服务器将会再次从源服务器上获取“新”资源。

HTTP 首部

clipboard.png

一、在请求中, HTTP 报文由方法、 URI、 HTTP 版本、 HTTP 首部字段等部分构成。
二、在响应中, HTTP 报文由HTTP 版本、 状态码(数字和缘由短语) 、HTTP 首部字段 3 部分构成。
使用首部字段是为了给浏览器和服务器提供报文主体大小、 所使用的语言、 认证信息等内容。
首部字段结构:首部字段名和字段值构成的, 中间用冒号“:” 分隔,eg:Content-Type: text/html,Keep-Alive:timeout=15, max=100。

一、首部字段类型
通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部。
请求首部字段(Request Header Fields):从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、 客户端信息、 响应内容相关优先级等信息。
响应首部字段(Response Header Fields):从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容, 也会要求客户端附加额外的内容信息。
实体首部字段(Entity Header Fields):针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

clipboard.png

表 6-2: 请求首部字段

clipboard.png

clipboard.png

clipboard.png

二、End-to-end 首部和 Hop-by-hop 首部
端到端首部(End-to-end Header):会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发
逐跳首部(Hop-by-hop Header):首部只对单次转发有效,会因经过缓存或代理而再也不转发。 使用 hop-by-hop 首部,需提供 Connection 首部字段。只有这8个字段Connection,Keep-Alive,Proxy-Authenticate,Proxy-Authorization,Trailer,TE,Transfer-Encoding,Upgrade

三、通用首部字段
1)、Cache-Control:eg Cache-Control: private, max-age=0, no-cache,利用缓存代理服务器进行缓存的管理。

clipboard.png

clipboard.png

no-cache指令:客户端请求:不接受缓存过的响应,服务器端的响应:包含该字段,表示,询问后缓存服务器不能缓存该资源,no-cache=Location:响应指令中指定该参数。客户端在接收到这个被指定参数值的首部字段对应的响应报文后, 不能使用缓存。
clipboard.png
no-store :暗示请求(和对应的响应) 或响应中包含机密信息。不能对其进行缓存。
s-maxage:Cache-Control: s-maxage=604800(单位 :秒),指定缓存期限和认证的指令,和 max-age 指令的相同,只适用于供多位用户使用的公共缓存服务器,当使用 s-maxage 指令后,则直接忽略对 Expires 首部字段及max-age 指令的处理。
max-age:Cache-Control: max-age=604800(单位: 秒),当缓存时间小于该值值,客户端可接受缓存的值,服务端指定该指令时,小于指定时间不用确认缓存有效性直接返回该缓存。指定 max-age 值为 0,那么缓存服务器一般须要将请求转发给源服务器。
min-fresh :Cache-Control: min-fresh=60(单位: 秒),请求指令:要求缓存服务器返回至少还未过指定时间的缓存资源。
max-stale :Cache-Control: max-stale=3600(单位: 秒),请求指令:即便过时缓存但仍处于 max-stale指定的时间内,仍旧会被客户端接收。不指定参数则为永久。
only-if-cached:Cache-Control: only-if-cached,请求指令:仅在接受缓存服务器内的资源,若缓存服务器无该资源则返回 504 Gateway Timeout。
must-revalidate:Cache-Control: must-revalidate,响应指令:必须向服务器确认资源的有效性,若服务器无响应返回 504 Gateway Timeout,使用该指令会忽略 max-stale。
proxy-revalidate:Cache-Control: proxy-revalidate,请求指令,要求缓存服务器,在响应以前必须确认缓存的有效性。
no-transform:Cache-Control: no-transform,请求和相应中,缓存不能改变实体主体的媒体类型。

Cache-Control 扩展:cache-extension token,扩展Cache-Control的指令。

2)、Connection:做用有,控制再也不转发给代理的首部字段,管理持久链接。
再也不转发给代理的首部字段——Hop-by-hop 首部,如图,Upgrade首部字段。
clipboard.png

管理持久链接:Close指令:关闭该链接,Keep-Alive:HTTP/1.1 以前的 HTTP 版本的默认链接都是非持久链接,使用该字段创建持久链接。

3)、Date:建立HTTP报文的日期和时间。

4)、Pragma: HTTP/1.1 以前版本的历史遗留字段,Pragma: no-cache,可以使用Cache-Control:no-cache替代。

5)、Trailer:事先说明在报文主体后记录了哪些首部字段。

clipboard.png

6)、Transfer-Encoding:规定传输报文主体时采用的编码方式。HTTP/1.1 的传输编码方式仅对分块传输编码有效。Transfer-Encoding: chunked。分块传输。

7)、Upgrade:用于检测 HTTP 协议及其余协议是否可以使用更高的版本进行通讯,其参数值能够用来指定一个彻底不一样的通讯协议。

Upgrade 首部字段产生做用的 Upgrade 对象仅限于客户端和邻接服务器之间。所以,使用首部字段 Upgrade时,还须要额外指定Connection:Upgrade。

clipboard.png

8)、Via :为了追踪客户端与服务器之间的请求和响应报文的传输路径,还可避免请求回环的发生。。每经过一个代理服务器或网管追加一个via首部字段内容(服务器信息)。常常会和 TRACE 方法一块儿使用。代理服务器接收到TRACE 方法发送过来的请求(Max-Forwards: 0) 时,代理服务器就不能再转发该请求了,代理服务器会将自身的信息附加到 Via 首部后, 返回该请求的响
应。

9)、Warning:告知用户一些与缓存相关的问题的警告。结构:Warning: 警告码“[警告内容]”([日期时间]), eg:Warning: 113 gw.hackr.jp:8080 "Heuristic expiration" Tue, 03

clipboard.png

四、请求首部字段客户端往服务器端发送请求报文中所使用的字段
1)、Accept:用户代理可以处理的媒体类型及媒体类型的相对优先级。 type/subtype 结构一次指定多种媒体类型。用分号分隔多种文件类型,用q=权重值(0~1),来表示优先级。1最大,默认为1。

文本文件: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 ...

2)、Accept-Charset:支持的字符集及字符集的相对优先顺序(权重 q 值表示)。eg:Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

3)、Accept-Encoding:支持的内容编码及内容编码的优先级顺序(权重 q 值表示),也可用“*”,指定任意彪马格式。

gzip:由文件压缩程序 gzip(GNU zip) 生成的编码格式RFC1952),采用 Lempel-Ziv 算法(LZ77)及 32 位循环冗余校验(Cyclic Redundancy Check,称 CRC)。
compress:由 UNIX 文件压缩程序 compress 生成的编码格式, 采用 LempelZiv-Welch 算法(LZW) 。
deflate: 组合使用 zlib 格式(RFC1950) 及由 deflate 压缩算法(RFC1951) 生成的编码格式。
identity:不执行压缩或不会变化的默认编码格式

4)、Accept-Language:Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3,告知服务器用户代理可以处理的天然语言集(指中文或英文等)

5)、Authorization:认证信息。
clipboard.png

6)、Expect:指望服务器出现指定的行为。若不能服务器返回错误状态码 417 Expectation Failed。

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

8)、Host:虚拟主机运行在同一个 IP 上,所以使用首部字段 Host 加以区分,告知服务器,请求的资源所处的互联网主机名端口号, HTTP/1.1规范必须请求首部信息。服务器未设定主机名,那直接发送一个空值便可。

形如 If-xxx 这种样式的 请求首部字段, 均可称为 条件请求。只有判断指定条件为真时,才会执行请求。不然返回错误412 Precondition Failed。

9)、If-Match:告知服务器匹配资源所用实体标记(ETag)值比较。If-Match: "123456"。

10)、If-Modified-Since:判断资源指定时间以后是否已更新。若已更新则处理该请求,不然返回状态码 304 Not Modified,用于确认代理或客户端拥有的本地资源的有效性。获取资源的更新日期时间,可经过确认首部字段 Last-Modified 来肯定。If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT。

11)、If-None-Match: 判断字段值与 ETag 值不一致时,处理该请求。在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可获取最新的资源。与 If-Modified-Since 有些相似,与 If-Match 首部字段相反。

12)、If-Range:告知服务器若指定的 IfRange 字段值(ETag 值或者时间)和请求资源的 ETag 值或时间相一致时,则做为范围请求处理。反之,则返回全体资源。

13)、If-Unmodified-Since:If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT,指定时间以后未更新才处理该请求。不然返回 412 Precondition Failed。

14)、Max-Forwards:Max-Forwards: 10(10进制整数),TRACE 方法或 OPTIONS 方法,发送包含首部字段 MaxForwards 的请求时,指定可通过的服务器最大数目。经过一个代理服务器减一从新赋值,为0时,处理请求,返回响应。

15)、Proxy-Authorization:Proxy-Authorization: Basic dGlwOjkpNLAGfFY5,代理服务器发来的认证信息。

16)、Range:Range: bytes=5001-10000,请求资源的范围信息。成功处理请求以后返回状态码为 206 Partial Content 的响应,没法处理该范围请求时,则返回状态码 200 OK 的响应及所有资源。

17)、Referer:告知服务器请求的原始资源的 URI。

18)、TE:TE: gzip, deflate;q=0.5,客户端可以处理响应的传输编码方式及相对优先级。 TE: trailers,分块传输方式。

19)、User-Agent:请求的浏览器和用户代理名称等信息。请求通过代理, 那么中间也极可能被添加上代理服
务器的名称。

clipboard.png

五、响应首部字段服务器端向客户端返回响应报文中所使用的字段
1)、Accept-Ranges:告知客户端服务器是否能处理范围请求,可处理范围请求:Accept-Ranges: bytes,不能处理范围请求: Accept-Ranges: none

2)、Age:Age: 600(秒)告知客户端, 源服务器在多久前建立了响应

clipboard.png

3)、ETag:告知客户端实体标识。

资源被缓存时,就会被分配惟一性标识。是一种可将资源以字符串形式作惟一性标识的方式,资源更新时,ETag 值也须要更新。
强 ETag 值:不论实体发生多么细微的变化都会改变其值。
弱 ETag 值:只用于提示资源是否相同。ETag: "usagi-1234",产生差别时最开始的地方附加 W/:ETag: W/"usagi-1234"

4)、Location:将响应接收方引导至某个与请求 URI 位置不一样的资源。配合3xx : Redirection,提供重定向的URI

5)、Proxy-Authenticate:代理服务器所要求的认证信息发送给客户端。

6)、Retry-After:告知客户端应该在多久以后再次发送请求。配合状态码503 Service Unavailable。或 3xx Redirect。Retry-After: 120(秒)/ 日期

7)、Server:告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。Server: Apache/2.2.17 (Unix),Server: Apache/2.2.6 (Unix) PHP/5.2.5

8)、Vary:可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令。仅对请求中含有相同 Vary 指定首部字段的请求返回缓存。 不然即便资源相同也要向服务器从新获取资源。

clipboard.png

9)、WWW-Authenticate:知客户端适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)和带参数提示的质询(challenge)。状态码 401 Unauthorized 响应中,确定带有首部字段 WWW-Authenticate。WWW-Authenticate: Basic realm="Usagidesign Auth"

六、实体首部字段:请求报文和响应报文中的实体部分所使用的首

1)、Allow:通知客户端可以支持 Request-URI 指定资源的全部 HTTP 方法。服务器接收到不支持的 HTTP 方法时,会以状态码405 Method Not Allowed 做为响应返回。Allow: GET, HEAD。

2)、Content-Encoding:告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码方式: gzip,compress,deflate,identity

3)、Content-Language:告知客户端,实体主体使用的天然语言。Content-Language: zh-CN

4)、Content-Length :代表了实体主体部分的大小(单位是字节)。Content-Length: 15000

5)、Content-Location:与报文主体部分相对应的 URI。和首部字段 Location 不一样,Content-Location 表示的是报文主体返回资源对应的 URI。

6)、Content-MD5:目的在于检查报文主体在传输过程当中是否保持完整,以及确认传输到达。Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==,对报文主体执行 MD5 算法得到的 128 位二进制数,再经过Base64 编码后将结果写入 Content-MD5 字段值。因为 HTTP 首部没法记录二进制值,因此要经过 Base64 编码处理。为确保报文的有效性,做为接收方的客户端会对报文主体再执行一次相同的 MD5 算法。计算出的值与字段值做比较后,便可判断出报文主体的准确性。

clipboard.png

7)、Content-Range:告知客户端做为响应返回的实体的哪一个部分符合范围请求。Content-Range: bytes 5001-10000/10000(字节为单位)

8)、Content-Type:实体主体内对象的媒体类型。

9)、Expires:首部字段 Expires 会将资源失效的日期告知客户端。

10)、Last-Modified:指明资源最终修改的时间。

七、为Cookie 服务的首部字段

Cookie 的工做机制是用户识别及状态管理。 把一些数据临时写入用户的计算机内。 接当用户访问该Web网站时, 可经过通讯方式取回以前发放的Cookie。调用 Cookie 时,因为可校验 Cookie 的有效期,以及发送方的域、路径、 协议等信息,

clipboard.png

1)、Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; path
表 6-9: Set-Cookie 字段的属性
clipboard.png

expires:浏览器可发送 Cookie 的有效期。省略 expires 属性时,其有效期仅限于维持浏览器会话(Session)时间段内。

一旦 Cookie 从服务器端发送至客户端,服务器端就不存在能够显式删除 Cookie 的方法。但可经过 覆盖已过时的 Cookie,实现对客户端 Cookie 的实质性删除操做。

path:限制指定 Cookie 的发送范围的文件目录
domain:指定的域名可作到与结尾匹配一致,当指定 example.com 后,除 example.com 之外,www.example.com或 www2.example.com 等均可以发送 Cookie。
secure:用于限制 Web 页面仅在 HTTPS 安全链接时,才能够发送 Cookie。Set-Cookie: name=value; secure
HttpOnly:它使 JavaScript 脚本没法得到 Cookie。其主要目的为防止跨站脚本攻击(Cross-site scripting, XSS)对 Cookie 的信息窃取。Set-Cookie: name=value; HttpOnly

2)、Cookie:Cookie: status=enable,会告知服务器,当客户端想得到 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。

八、其余首部字段

HTTP 首部字段是能够自行扩展的。因此在 Web 服务器和浏览器的应用上,会出现各类非标准的首部字段。

X-Frame-Options:X-Frame-Options: DENY(拒绝显示),HTTP 响应首部,用于控制网站内容在其余 Web 网站的 Frame 标签内的显示问题。目的是为了防止点击劫持(clickjacking)攻击。SAMEORIGIN:仅同源域名下的页面(Top-level-browsingcontext) 匹配时能够显示。

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

DNT: HTTP 请求首部, 拒绝我的信息被收集,0:赞成被追踪,1:拒绝被追踪。

P3P: HTTP 响应首部,可让 Web 网站上的我的隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。

相关文章
相关标签/搜索