HTTP协议 I 定义

HTTP

HTTP(超文本传输协议)是 Web 应用最基础的应用层通信协议,用于客户端与服务器之间传输文本、图像、视频等信息。

HTTP协议内容与字段定义

  • 资源 : Web服务器是Web资源(Web resource)的宿主。Web资源是Web内容的源头。最简单的Web资源就是Web服务器文件系统中的静态文件。
  • 媒体类型 :当Web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看它是否知道应该如何处理这个对象
  • URI : 服务器资源名被称为统一资源标识符(Uniform Resource Identifier, URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。
  • URL : URL描述了一台特定服务器上某资源的特定位置,一般包含三部分 : 1.协议类型 2.网络地址 3.资源地址
  • 事务 : 一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成
  • 方法 :HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。
  • 状态码 :每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。

报文结构

  • 起始行 : 起始行报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
  • 首部字段 :起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
  • 主题 : 空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。

连接

HTTP是定义在TCP/IP 协议栈之上的。

在TCP层 ,TCP协议提供了

  • 无差错的数据传输
  • 按序传输(数据总是会按照发送的顺序到达)
  • 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)

再从网络协议栈层面考虑

IP (网络层) : 提供了服务端和客户端的路由寻址(如何对服务器进行访问)

TCP (传输层) : 提供了服务端和客户端之间的可靠通信

HTTP (应用层) : 提供了内容传递的路径和方法

HTTP 寻址访问传输的过程

  1. 客户端输入待访问的URL地址
  2. 浏览器发出DNS请求,解释URL地址为IP地址
  3. 得到IP地址后与服务器建立TCP连接
  4. 客户端浏览器发送HTTP请求报文
  5. 服务端响应HTTP响应报文
  6. 关闭链接,浏览器渲染HTTP响应报文

协议版本

0.9 协议只支持get方法

1.0 添加了额外的请求方法

1.1

结构组件

  • 代理

代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。

  • 缓存

Web缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来

  • 网关

网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议

  • 隧道

隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。

  • Agent代理

用户Agent代理(或者简称为Agent代理)是代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理。到目前为止,我们只提到过一种HTTP Agent代理:Web浏览器,但用户Agent代理还有很多其他类型。

格式

所有的URL 访问方式均符合

1
<scheme>://<user>:<password>@<host>:<port>/<path>; <params>? <query>#<frag>

请求报文:

1
2
3
4
<method> <request-URL> <version>
<headers>

<entity-body>

响应报文:

1
2
3
4
<version> <status> <reason-phrase>
<headers>

<entity-body>
  • 方法(method)客户端希望服务器对资源执行的动作。是一个单独的词,比如GET、HEAD或POST。本章稍后将详细介绍方法。·
  • 请求URL(request-URL)命名了所请求资源,或者URL路径组件的完整URL。如果直接与服务器进行对话,只要URL的路径组件是资源的绝对路径,通常就不会有什么问题——服务器可以假定自己是URL的主机/端口。第2章详细地介绍了URL的语法。·
  • 版本(version)报文所使用的HTTP版本,其格式看起来是这样的:
    HTTP/<major>.<minor>
  • 状态码(status-code)这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。
  • 首部(header)可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。有些HTTP版本,比如HTTP/1.1,要求有效的请求或响应报文中必须包含特定的首部。
  • 实体的主体部分(entity-body)实体的主体部分包含一个由任意数据组成的数据块

方法

GET

GET是最常用的方法。通常用于请求服务器发送某个资源。

HEAD方法与GET方法的行为很类似,但服务器在响应中只返回首部。不会返回实体的主体部分。

PUT

与GET从服务器读取文档相反,PUT方法会向服务器写入文档。有些发布系统允许用户创建Web页面,并用PUT直接将其安装到Web服务器上去

POST

表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方

TRACE

TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。

OPTIONS

OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法

DELETE

请服务器删除请求URL所指定的资源

状态码

状态码用来标记 响应报文对请求结果的处理方式

100 - 199 继续传输,表示客户端需要分段发送一段较长的消息数据。

200 - 299 成功,表示服务器成功接收到客户端的请求。

300 - 399 重定向,通常是资源变更后通知客户端访问另一个URL地址。

400 - 499 客户端异常,通常是由来自客户端的请求消息不符合服务端的要求所导致。

500 - 599 服务端异常。

头部字段

头部字段用于描述 请求端的资源请求信息和服务端所能提供的应用服务信息,分为5种类型

通用首部 :服务端和客户端都可以携带,描述一些通用的功能信息

请求首部 :请求端特有的,一般是一些基于自身请求的描述信息

响应首部 :相应端特有的,一般是描述服务端的状态信息和功能信息

实体首部 :用于描述消息体的一些字段,用于描述消息体的文件类型,读取编码格式等

扩展首部 :作用于HTTP协议之上的一些协议自定义字段,用于为功能开发者提供更上层的应用构建

通用首部

1
2
3
Connection        允许客户端与服务器指定与请求/响应有关的选项
Date 时间/日期标志
MIME-Version MIME版本信息

请求首部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Host              给出接收的服务器的主机名和端口号
Referer 描述当前请求的URL
User-Agent 发起请求的应用程序

Accept 告知服务器能够发送哪种媒体类型
Accept-Charset 告知服务器能够发送哪种字符集
Accept-Encoding 告知服务器能够发送哪种字符编码方式
Accept-Language 告知服务器能够发送哪种语言

Authorization 描述一些授权信息
Cookie 描述一些本地存储信息

Proxy-Authorization 与代理进行认证时使用
Proxy-Connection 与代理进行连接时使用

响应首部

1
2
3
4
5
6
Age              响应持续时间
Server 响应程序的软件名称和版本信息
Accept-Ranges 服务端可接收的范围类型
Proxy-Authenticate 代理对客户端的质询列表
Set-Cookie 向客户端设置本地存储
WWW-Authenticate 服务端对客户端的质询列表

实体首部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Allow            列出了可以对此实体执行的方法
Location 列出资源的实际位置

Content-Base 相对URL使用的基础URL
Content-Encoding 对主体执行的编码方式
Content-Language 理解主体时最适宜使用的自然语言
Content-Length 主体的长度或尺寸
Content-Location 资源所处的位置
Content-MD5 校验和
Content-Range 在整个资源中此实体表示的字节范围
Content-Type 这个主体的对象类型

Expires 实体的过期时间
Last-Modified 最后一次被修改的日期和时间

HTTP协议 I 定义
http://gadoid.io/2025/05/11/HTTP协议-I-定义/
作者
Codfish
发布于
2025年5月11日
许可协议