定义
HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方——通常是 Web 浏览器——发起的。完整网页文档通常由文本、布局描述、图片、视频、脚本等资源构成。
http 报文
分为请求与响应两种类型
请求
一旦连接建立,用户代理就可以发送请求(用户代理通常是 Web 浏览器,但也可以是其他的,例如爬虫)。客户端请求由一系列文本指令组成,并使用 CRLF 分隔(回车,然后是换行)
请求由以下元素组成:
- HTTP 方法,通常是由一个动词,像
GET
、POST
等,或者一个名词,像OPTIONS
、HEAD
等,来定义客户端执行的动作。典型场景有:客户端意图获取某个资源(使用GET
);发送 HTML 表单的参数值(使用POST
);以及其他情况下需要的那些其他操作。 - 要获取的那个资源的路径——去除了当前上下文中显而易见的信息之后的 URL,比如说,它不包括协议(
http://
)、域名(这里是developer.mozilla.org
),或是 TCP 的端口(这里是80
)。 - HTTP 协议版本号。
- 为服务端表达其他信息的可选标头。
- 请求体(body),类似于响应中的请求体,一些像
POST
这样的方法,请求体内包含需要了发送的资源。
请求方法
HTTP 定义了一组请求方法用来指定对目标资源的行为。它们一般是名词,但这些请求方法有时会被叫做 HTTP 动词。最常用的请求方法是 GET
和 POST
:
响应
当收到用户代理发送的请求后,Web 服务器就会处理它,并最终送回一个响应。与客户端请求很类似,服务器响应由一系列文本指令组成,并使用 CRLF 分隔
响应报文包含了下面的元素:
- HTTP 协议版本号。
- 状态码,来指明对应请求已成功执行与否,以及不成功时相应的原因。
- 状态信息,这个信息是一个不权威、简短的状态码描述。
- HTTP 标头,与请求标头类似。
- 可选项,一个包含了被获取资源的主体。
响应示例
成功的网页响应:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 55743
Connection: keep-alive
Cache-Control: s-maxage=300, public, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:37:18 GMT
ETag: "2e77ad1dc6ab0b53a2996dfd4653c1c3"
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
Age: 7
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>A simple webpage</title>
</head>
<body>
<h1>Simple HTML webpage</h1>
<p>Hello, world!</p>
</body>
</html>
请求资源已被永久移动的网页响应:
HTTP/1.1 301 Moved Permanently
Server: Apache/2.4.37 (Red Hat)
Content-Type: text/html; charset=utf-8
Date: Thu, 06 Dec 2018 17:33:08 GMT
Location: https://developer.mozilla.org/ (目标资源的新地址,服务器期望用户代理去访问它)
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
Content-Length: 325 (如果用户代理无法转到新地址,就显示一个默认页面)
<!DOCTYPE html>… (包含一个网站自定义页面,帮助用户找到丢失的资源)
请求资源不存在的网页响应:
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=utf-8
Content-Length: 38217
Connection: keep-alive
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Content-Language: en-US
Date: Thu, 06 Dec 2018 17:35:13 GMT
Expires: Thu, 06 Dec 2018 17:35:13 GMT
Server: meinheld/0.6.1
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Vary: Accept-Encoding,Cookie
X-Cache: Error from cloudfront
<!DOCTYPE html>… (包含一个站点自定义 404 页面,帮助用户找到丢失的资源)
标签:协议,HTTP,请求,Content,响应,http,Type,资源
From: https://www.cnblogs.com/r0xy/p/18469549