第四部分:实体、编码和国际化

未匹配的标注

第15章 实体和编码

报文是箱子,实体是货物

PHP

实体首部指出这是一个纯文本文档,18 个字节长。一个空白行把首部字段和主体分隔开。

HTTP/1.1 版定义10个基本实体首部字段:

  • Content-Type 实体中所承载对象的类型
  • Content-Length 实体主体的长度
  • Content-Language 语言
  • Content-Encoding 对象数据所做的变换
  • Content-Location 请求时可通过它获得对象
  • Content-Range 如果当前是部分实体,这个会说明它是整体哪部分的
  • Content-MD5 实体主体内容校验和
  • Last-Modified 主体在服务器最后的修改日期
  • Expires 实体数据失效日期
  • Allow 该资源所允许的请求方法
  • ETag 该文档特定实例的唯一验证码
  • Cache-Control 缓存

实体主体

实体主体:在空白的 CRLF 行之后。

Content-Length:实体的大小

检测截尾

客户端通过 Content-Length 来检测报文结束是正常的连接关闭,还是服务器崩溃导致的连接关闭。

错误的Content-Length

HTTP/1.1 规定用户 Agent 代理应该在接收且检测到无效长度时通知用户。

持久连接

使用持久连接时可以没有 Content-Length,即采用分块编码。

内容编码

如果主体进行了内容编码,Content-Length 说明的是编码后的长度。

实体摘要

服务器使用 Content-MD5 发送对实体主体运行 MD5 算法的结果,来验证报文在传输是否被修改。

媒体类型和字符集

Content-Type 首部说明了主体的 MIME 类型。

文本的字符编码

Content-Type: text/html; charset=iso-8859-4

多部分表格提交

Content-Type: multipart/form-data; boundary=[a-z]

boundary 参数说明了分割主体不同部分所用的字符串(相当于自定义分隔符),如下所示:表格提交了 Sally 和文本文件 essayfile.txt。

PHP

内容编码

服务器对主体进行编码,有助于减少传输时间,或防止第三方看到文档的内容。内容编码是对报文主体进行的可逆变化。

Accept-Encoding首部

为了避免服务器使用客户端不支持的编码方式,客户端就把自己支持的内容编码方式列表放在 Accept-Encoding 首部里发出去。

传输编码和分块编码

传输编码也是作用在实体主体的可逆变化,但使用传输编码是为了改变报文中的数据在网络上的传输方式。

可靠传输

在少数情况下,所传输的报文主体可能会引发问题,如下:

  1. 未知尺寸:如果不先生成内容,某些应用程序和内容编码器就无法确定报文主体的最终大小。通常,这些服务器希望在知道大小之前就开始传输数据,故有些服务器就使用传输编码来发送数据。
  2. 安全性:可以用传输编码来把报文内容扰乱,然后在共享的传输网络上发送。不过现在有 SSL,很少靠传输编码来实现安全性。

Transfer-Encoding首部

Transfer-Encoding 告知接收方为了可靠地传输报文,已经对其进行了何种编码。

分块编码

分块编码把报文分割为若干个大小已知的块,块之间是紧挨着发送的,这样就不需要在发送之前知道整个报文的大小了。分块编码是一种传输编码,因此是报文的属性,而不是主体的属性。

  1. 分块与持久连接

    当使用持久连接时,如果服务器动态创建内容,就可能在发送之前无法知道主体的长度。为解决这个问题,只要允许服务器把主体逐块发送,说明每块的大小就可以,即分块编码。每个分块包含一个长度值和该分块的数据。

  2. 分块报文的拖挂

    可以在分块的报文最后加上拖挂。拖挂的内容是可选的元数据。

随时间变化的实例

网站对象并不是静态的,同样的 URL 会随时间变化而指向对象的不同版本。HTTP 规定了称为实例操控的一系列请求和响应操作,用以操控对象的实例。

验证码和新鲜度

新鲜度

服务器应当告知客户端能够将内容缓存多长时间,在这个时间之内就是新鲜的。

有条件的请求与验证码

为了不浪费网络带宽,HTTP 为客户端提供了一种方法,仅当资源改变时才请求副本,这种特殊请求称为有条件的请求。

第16章 国际化

暂无笔记。

第17章 内容协商与转码

客户端驱动的协商

客户端发起请求,服务器发送可选项的列表,客户端选择。

服务器驱动的协商

服务器检查客户端的请求首部集,并决定提供哪个版本的页面。

透明协商

某个中间设备(通常是缓存代理)代表客户端进行请求协商。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~