[RFC2616-HTTP/1.1 超文本传输协议](翻译)[Part 1]

原文:RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 (ietf.org)

(因本篇RFC较长,将其分为几篇文章进行翻译)

超文本传输​​协议——HTTP/1.1

超文本传输​​协议 (HTTP) 是分布式、协作、超媒体信息系统的应用层协议。它是一种通用的、无状态的协议,通过扩展其请求方法、错误代码和标头 [47],可用于超文本之外的许多任务,例如名称服务器和分布式对象管理系统。 HTTP 的一个特性是数据表示的类型化和协商,允许独立于正在传输的数据构建系统。

自 1990 年以来,万维网全球信息倡议一直在使用 HTTP。该规范定义了称为“HTTP/1.1”的协议,是对 RFC 2068 [33] 的更新。

目录

   1 简介

   1.1 目的

   1.2 要求

   1.3 术语

   1.4 整体运作

   2 符号约定和通用语法

   2.1 增强 BNF

   2.2 基本规则

   3 协议参数

   3.1 HTTP 版本

   3.2 统一资源标识符

   3.2.1 一般语法

   3.2.2 http网址

   3.2.3 URI比较

   3.3 日期/时间格式

   3.3.1 完整日期

   3.3.2 增量秒

   3.4 字符集

   3.4.1 缺少字符集

   3.5 内容编码

   3.6 传输编码

   3.6.1 分块传输编码

   3.7 媒体类型

   3.7.1 规范化和文本默认值

   3.7.2 多部分类型

   3.8 产品代币

   3.9 质量价值观

   3.10 语言标签

   3.11 实体标签

   3.12 范围单位

   4 HTTP 消息

   4.1 消息类型

   4.2 消息头

   4.3 消息体

   4.4 消息长度

   4.5 通用头域

   5 请求

   5.1 请求行

   5.1.1 方法

   5.1.2 请求-URI

   5.2 请求标识的资源

   5.3 请求头域

   6 回应

   6.1 状态行

   6.1.1 状态码和原因短语

   6.2 响应头域

   7 实体

   7.1 实体头字段

   7.2 实体

   7.2.1 类型

   7.2.2 实体长度

   8. 连接

   8.1 持久连接

   8.1.1 目的

   8.1.2 整体运作

   8.1.3 代理服务器

   8.1.4 实际考虑

   8.2 消息传输要求

   8.2.1 持久连接和流控制

   8.2.2 监控错误状态消息的连接

   8.2.3 100(继续)状态的使用

   8.2.4 服务器过早关闭连接时的客户端行为

   9 方法定义

   9.1 安全和幂等方法

   9.1.1 安全方法

   9.1.2 幂等方法

   9.2 选项 Options

   9.3 Get

   9.4 Head

   9.5 Post

   9.6 Put

   9.7 Delete

   9.8 跟踪 Trace

   9.9 连接 Connect

   10 状态码定义

   10.1 信息 1xx

   10.1.1 100 继续

   10.1.2 101 交换协议

   10.2 成功2xx

   10.2.1 200 正常

   10.2.2 201 创建

   10.2.3 202 接受

   10.2.4 203 非权威信息

   10.2.5 204 无内容

   10.2.6 205 重置内容

   10.2.7 206 部分内容

   10.3 重定向 3xx

   10.3.1 300 多项选择

   10.3.2 301 永久移动

   10.3.3 302 找到

   10.3.4 303 见其他

   10.3.5 304 未修改

   10.3.6 305 使用代理

   10.3.7 306(未使用)

   10.3.8 307 临时重定向

   10.4 客户端错误 4xx

   10.4.1 400 错误请求

   10.4.2 401 未经授权

   10.4.3 402 需要付款 Payment Required

   10.4.4 403 禁止

   10.4.5 404 未找到

   10.4.6 405 方法不允许

   10.4.7 406 不可接受

   10.4.8 407 需要代理验证

   10.4.9 408 请求超时

   10.4.10 409 冲突

   10.4.11 410  Gone

   10.4.12 411 长度要求

   10.4.13 412 前置条件失败

   10.4.14 413 请求实体太大

   10.4.15 414 请求 URI 太长

   10.4.16 415 不支持的媒体类型

   10.4.17 416 请求的范围不满足

   10.4.18 417 预期失败

   10.5 服务器错误 5xx

   10.5.1 500 内部服务器错误

   10.5.2 501 未实施

   10.5.3 502 错误网关

   10.5.4 503 服务不可用

   10.5.5 504 网关超时

   10.5.6 505 HTTP 版本不支持

   11 访问认证

   12 内容协商

   12.1 服务器驱动的协商

   12.2 代理驱动的协商

   12.3 透明协商

   13 HTTP 中的缓存

   13.1.1 缓存正确性

   13.1.2 警告

   13.1.3 缓存控制机制

   13.1.4 显式用户代理警告

   13.1.5 规则和警告的例外情况

   13.1.6 客户端控制的行为

   13.2 到期模型

   13.2.1 服务器指定的过期时间

   13.2.2 启发式过期

   13.2.3 年龄计算 Age Calculations

   13.2.4 到期计算

   13.2.5 消除过期值的歧义

   13.2.6 消除多重响应的歧义

   13.3 验证模型

   13.3.1 最后修改日期

   13.3.2 实体标签缓存验证器

   13.3.3 弱验证器和强验证器

   13.3.4 何时使用实体标签和最后修改日期的规则

   13.3.5 非验证条件

   13.4 响应可缓存性

   13.5 从缓存构造响应

   13.5.1 端到端和逐跳报头

   13.5.2 不可修改的头文件

   13.5.3 组合标题

   13.5.4 组合字节范围

   13.6 缓存协商响应

   13.7 共享和非共享缓存

   13.8 错误或不完整的响应缓存行为

   13.9 GET 和 HEAD 的副作用

   13.10 更新或删除后失效

   13.11 强制直写

   13.12 缓存替换

   13.13 历史列表

   14 标题字段定义

   14.1 接受

   14.2 接受字符集

   14.3 接受编码

   14.4 接受语言

   14.5 接受范围

   14.6 年龄

   14.7 允许

   14.8 授权

   14.9 缓存控制

   14.9.1 什么是可缓存的

   14.9.2 缓存可以存储什么

   14.9.3 基本过期机制的修改

   14.9.4 缓存重新验证和重新加载控制

   14.9.5 无变换指令

   14.9.6 缓存控制扩展

   14.10 连接

   14.11 内容-编码

   14.12 内容-语言

   14.13 内容-长度

   14.14 内容-位置

   14.15 内容-MD5

   14.16 内容-范围

   14.17 内容-类型

   14.18 日期

   14.18.1 无时钟源服务器操作

   14.19 电子标签 Etag

   14.20 期待 Expect

   14.21 到期 Expires

  14.22 从 From

   14.23 主机

   14.24 如果匹配 If-Match

   14.25 If-Modified-Since

   14.26 If-None-Match

   14.27 如果范围If-Range

   14.28 If-Unmodified-Since

   14.29 最后修改 Last-Modified

   14.30 地点 Location

   14.31 最大转发 Max-Forwards

   14.32 杂注 Pragma

   14.33 代理认证 Proxy-Authenticate

   14.34 代理授权 Proxy-Authorization

   14.35 范围

   14.35.1 字节范围 Byte Ranges

   14.35.2 范围检索请求 Range Retrieval Requests

   14.36 推荐人 Referer

   14.37 重试后 Retry-After

   14.38 服务器

   14.39 TE

   14.40 预告片 Trailer

   14.41 传输编码 Transfer-Encoding

   14.42 升级 Upgrade

   14.43 用户代理 User-Agent

   14.44 变化 Vary

   14.45 过孔 Via

   14.46 警告 Warning

   14.47 WWW-认证 WWW-Authenticate

   15 安全注意事项

   15.1 个人信息

   15.1.1 滥用服务器日志信息

   15.1.2 敏感信息的传输

   15.1.3 在 URI 中编码敏感信息

   15.1.4 与接受标头相关的隐私问题

   15.2 基于文件名和路径名的攻击

   15.3 DNS 欺骗

   15.4 位置标头和欺骗

   15.5 内容处置问题 Content-Disposition Issues

   15.6 身份验证凭证和空闲客户端

   15.7 代理和缓存

   15.7.1 对代理的拒绝服务攻击

   16 致谢

   17 参考文献

   18 作者地址

   19 附录

   19.1 Internet 媒体类型 message/http 和 application/http

   19.2 互联网媒体类型 multipart/byteranges

   19.3 容差应用

   19.4 HTTP 实体和 RFC 2045 实体之间的区别

   19.4.1 MIME 版本

   19.4.2 转换为规范形式

   19.4.3 日期格式的转换

   19.4.4 Content-Encoding介绍

   19.4.5 无内容传输编码

   19.4.6 传输编码介绍

   19.4.7 MHTML 和行长限制

   19.5 附加功能

   19.5.1 内容处置

   19.6 与以前版本的兼容性

   19.6.1 从 HTTP/1.0 的变化

   19.6.2 与 HTTP/1.0 持久连接的兼容性

   19.6.3 对 RFC 2068 的更改

   20 指数

   21 完整的版权声明

1. 简介

1.1 目的

超文本传输​​协议 (HTTP) 是分布式、协作、超媒体信息系统的应用层协议。自 1990 年以来,万维网全球信息倡议一直在使用 HTTP。HTTP 的第一个版本,称为 HTTP/0.9,是一种用于通过 Internet 传输原始数据的简单协议。 RFC 1945 [6] 定义的 HTTP/1.0 通过允许消息采用类似 MIME 消息的格式来改进协议,其中包含有关传输数据的元信息和请求/响应语义上的修饰符。然而,HTTP/1.0 没有充分考虑分层代理、缓存、持久连接的需求或虚拟主机的影响。此外,自称为“HTTP/1.0”的未完全实现的应用程序激增,需要更改协议版本,以便两个通信应用程序确定彼此的真实能力。

该规范定义了称为“HTTP/1.1”的协议。该协议包含比 HTTP/1.0 更严格的要求,以确保其功能的可靠实现。

实用的信息系统需要比简单的检索更多的功能,包括搜索、前端更新和注释。 HTTP 允许一组开放的方法和标头指示请求的目的 [47]。它建立在统一资源标识符 (URI) [3] 提供的参考规则之上,作为位置 (URL) [4] 或名称 (URN) [20],用于指示要应用方法的资源。消息以类似于多用途 Internet 邮件扩展 (MIME) [7] 定义的 Internet 邮件 [9] 使用的格式传递。

HTTP 还用作用户代理和代理/网关与其他 Internet 系统之间通信的通用协议,包括 SMTP [16]、NNTP [13]、FTP [18]、Gopher [2] 和 WAIS [10]协议。通过这种方式,HTTP 允许对来自不同应用程序的可用资源进行基本的超媒体访问。

1.2 略

1.3 术语

本规范使用许多术语来指代 HTTP 通信的参与者和对象所扮演的角色。

联系connection

为通信目的在两个程序之间建立的传输层虚拟电路。

信息 message

HTTP 通信的基本单元,由与第 4 节中定义的语法匹配并通过连接传输的结构化八位字节序列组成。

请求 request

第 5 节中定义的 HTTP 请求消息。

回复response

第 6 节中定义的 HTTP 响应消息。

资源resource

可以由 URI 标识的网络数据对象或服务,如第 3.2 节中所定义。资源可能以多种表示形式(例如多种语言、数据格式、大小和分辨率)或以其他方式变化。

实体 entity

作为请求或响应的有效负载传输的信息。如第 7 节所述,实体由实体头字段形式的元信息和实体主体形式的内容组成。

表示 representation

如第 12 节所述,响应中包含的受内容协商的实体。可能存在与特定响应状态相关联的多个表示。

内容协商 content negotiation

服务请求时选择适当表示的机制,如第 12 节所述。可以协商任何响应中的实体表示(包括错误响应)。

变体 variant

在任何给定时刻,一个资源可能有一个或多个与其相关联的表示。这些表示中的每一个都称为“变体”。使用术语“变体”并不一定意味着资源受内容协商的影响。

客户 client

为发送请求而建立连接的程序。

用户代理 user agent

发起请求的客户端。这些通常是浏览器、编辑器、蜘蛛(网络遍历机器人)或其他终端用户工具。

服务器 server

一个应用程序,它接受连接以便通过发回响应来服务请求。任何给定的程序都可能既是客户端又是服务器;我们对这些术语的使用仅指程序为特定连接所执行的角色,而不是指程序的一般功能。同样,任何服务器都可以充当源服务器、代理、网关或隧道,根据每个请求的性质切换行为。

源服务器 origin server

给定资源驻留或将被创建的服务器。

代理 proxy

一种中间程序,它既充当服务器又充当客户端,以代表其他客户端发出请求。请求在内部得到服务,或者通过可能的翻译将它们传递给其他服务器。代理必须实现本规范的客户端和服务器要求。 “透明代理”是一种不会修改超出代理身份验证和识别所需的请求或响应的代理。 “非透明代理”是修改请求或响应以便为用户代理提供一些附加服务的代理,例如组注释服务、媒体类型转换、协议缩减或匿名过滤。除非明确说明透明或非透明行为,HTTP 代理要求适用于这两种类型的代理。

网关 gateway

充当其他服务器的中介的服务器。与代理不同,网关接收请求,就好像它是所请求资源的源服务器一样;请求客户端可能不知道它正在与网关通信。

隧道tunnel

充当两个连接之间的盲中继的中间

你可能感兴趣的:(http,网络协议,网络)