基础概念
请求报文
1 | GET http://www.example.com/ |
- 第一行是包含了请求方法、URL、协议版本。
- 接下来的多行都是请求首部 Header,每个首部都有一个首部名称,以及对应的值。
- 一个空行用来分隔首部和内容主体 Body。
- 最后是请求的内容主体。
响应报文
1 | 200 OK |
- 第一行包含协议版本、状态码以及描述。
- 接下来多行也是首部内容。
- 一个空行分隔首部和内容主体。
- 最后是响应的内容主体。
URI、URL、URN
- URI:统一资源标志符(Uniform Resource Identifier)在电脑术语中是用于标志某一互联网资源名称的字符串。
- URL:统一定位资源(Uniform Resource Locator)俗称网页地址,简称网址,是因特网上标准的资源的地址。
- URN:统一资源名称(Uniform Resource Name)是 URI 的历史名字,URN 用来寻找特定名称空间资源来补充网址。
URI 可被视为 URL 或 URN 或两者的结合。URN 如同一个人的名称,而 URL 代表一个人的住址。URN 定义某事物的身份,而 URL 提供查找该事物的方法。
HTTP 使用 URL 来定位资源。
HTTP 请求方法
HTTP 请求方式一共有 9 种,分别为:GET、POST、PUT、DELETE、PATCH、OPTIONS、HEAD、CONNECT和TRACE。
GET:请求指定的页面信息,并返回实体主体。大部分网络请求方式都为 GET。
POST:向指定资源提交数据进行处理请求,例如提交表单或者上传文件,数据被包含在请求体中。POST 可能会导致新的资源的建立和/或已有资源的修改。
PUT:从客户端向服务器传送数据从而取代指定文档的内容。因为 PUT 本身不带验证机制,任何人都可以上传文件,所以存在安全性问题,一般不使用 PUT 方法。
1
2
3
4
5
6PUT /new.html
Host: example.com
Content-type: text/html
Content-length: 16
<p>New File</p>DELETE:请求服务器删除指定的页面或者文件,和 PUT 方法一样不带验证机制,所以不安全。
1
DELETE /file.html
PATCH:允许修改部分的文档。
1
2
3
4
5
6
7PATCH /file.txt
Host: www.example.com
Content-Type: application/example
If-Match: "e0023aa4e"
Content-Length: 100
[description of changes]OPTIONS:查询指定 URL 支持的请求方法,返回例如
Allow: GET, POST, HEAD, OPTIONS
,也允许客户端查看服务器的性能。HEAD:类似于 GET 请求,但是返回的响应中没有实体主体部分。主要用于获取报头、确认 URL 的有效性以及资源更新的日期时间等信息。
CONNECT:是HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器的请求方式。该方式使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
1
CONNECT www.example.com:443
TRACE:服务器将通信路径返回给客户端,主要用来回显服务器收到的请求并测试或者侦听。TRACE 发送请求时会在 Max-Forwards 首部字段中填入数值,每经过一个服务器数值减 1,当数值为 0 时就停止传输。使用 TRACE 容易受到跨站攻击,所以通常不使用这种方式。
HTTP 状态码
HTTP 状态码主要为 5 类,分别为信息性状态码 1xx、成功状态码 2xx、重定向状态码 3xx、客户端错误状态码 4xx 和服务器错误状态码 5xx。
1xx 信息性
1xx 表示接收到的请求正在处理。
100 Continue
:表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
2xx 成功
2xx 表示请求正常处理完毕。
200 OK
:请求成功处理。204 No Content
:请求已经成功处理,但是返回的响应报文不包含实体的主体部分。204 一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。206 Partial Content
:表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。
3xx 重定向
3xx 表示需要进行附加操作以完成请求。
301 Moved Permanently
:永久性重定向。302 Found
:临时性重定向。303 See Other
:和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。304 Not Modified
:请求报文首部有时会包含一些条件,如果不满足条件,则服务器会返回 304 状态码。常见的条件有 if-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since。307 Temporary Redirect
:临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
虽然 HTTP 协议规定 301、302 和 303 状态下不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会把 POST 方法改成 GET 方法。
4xx 客户端错误
4xx 表示服务器无法处理客户端的请求,客户端发送错误。
400 Bad Request
:请求报文中存在语法错误。401 Unauthorized
:该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。403 Forbidden
:请求被拒绝。404 Not Found
:服务器无法根据客户端的请求找到网页或者资源。
5xx 服务器错误
5xx 表示服务器处理请求出错,错误发生在服务器。
500 Internal Server Error
:服务器正在执行请求时发生错误。502 bad gateway
:网关错误,已经和后端建立了连接,但是超时。503 Service Unavailable
:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。504 gateway time-out
:网关超时,尚未和后端建立连接。
HTTP 首部
四种类型:通用首部字段、请求首部字段、响应首部字段和实体首部字段。