HTTP 协议
mindmap 请求 请求行 请求方法 GET POST DELETE PUT TRACE OPTIONS 请求路径 协议 请求头 请求主体信息 请求与主体信息间的空行
Idempotent Method
A request method is considered “idempotent”
一个请求方法被认为幂等
as the effect for a single such request
作为单个此类请求的效果
幂等(idempotent):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。幂等方法不应该有副作用。
GET, HEAD, PUT, DELETE 等方法都是幂等的,所有 safe 方法都是幂等的。
HTTP(HyperText Transfer Protocol)
HTTP(HyperText Transfer Protocol) 超文本传输协议,协议规定了浏览器与服务器之间通信的规则。
H - Hypertext 超文本,T - Transfer 传输,P - Protocol 协议
用在计算机世界里的协议,用于两点(请求方和响应方)之间传输文字、图片、音频、视频等超文本数据的约定和规范(protocol)
HTTP 是一个应用层协议,基于 TCP/IP,在网络的任意两点(请求方和应答方)间传输超文本(图片、文字、视频、音频等)
HTTP 协议中的两个端点请求方和应答方
请求方 —— web 浏览器 user agent
应答方 —— web 服务器 存储着网络的静态与动态资源
HTTP 需要 TCP/IP 实现寻址、路由和可靠的数据传输
HTTP 需要 DNS 协议实现对互联网上主机的定位、查找
HTTP over TCP/IP
HTTP over SSL/TLS
HTTP 有多个版本,目前应用最广的是 HTTP/1.1,但 HTTP/1.1 性能难以满足高流量网站,于是推出了 HTTP/2 HTTP/3
请求报文
1 | 请求行 POST /S?ie=utf-8 HTTP/1.2 |
响应报文
1 | 响应行 HTTP/1.1 200 OK |
HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。分五类:
- 信息响应(100-199)
- 成功响应(200-299)
- 重定向消息
- 客户端错误响应
- 服务端错误响应
http 请求状态码
状态码 | 描述 | 更多 |
---|---|---|
200 OK | 请求成功 | 默认情况下响应可以缓存 |
201 Created | 成功的应答状态码,请求已被成功处理且创建了新资源 | 常规使用场景是 POST 请求返回值 |
202 Accepted | 服务端收到了请求信息,但尚未处理 | 将请求交给另外一个服务器或进行处理,对请求进行批处理 |
203 Non-Authoritative Infomation | 服务器成功处理了请求,但实体头部元信息不是在原始服务器上有效的确定集合,是来自本地或第三方拷贝。当前信息是原始版本的子集或超集。 | 此状态码不是必须的,而且只有在响应不使用此状态码便会返回 200 ok 的情况下才合适 |
http 请求状态码 200
请求成功,默认状态下 200 响应可以被缓存
不同请求方式,请求成功的意义不同
请求方式 | 意义 |
---|---|
GET | 已经取得资源,并将资源添加到响应的消息体中 |
POST | 响应的消息体中包含此次请求的结果 |
- HEAD: 响应的消息体为头部信息。
- TRACE: 响应的消息体中包含服务器接收到的请求信息。
- PUT 和 DELETE 的请求成功通常并不是响应 200 OK 的状态码,而是 204 No Content 表示无内容(或者 201 Created表示一个资源首次被创建成功)。
http 请求状态码 206
HTTP 206 Partial Content 成功状态响应代码表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的。
1
2
3
4
5
6
7
8
9
10 Response Headers
Accept: */*
Accept-Encoding: identity;q=1, *;q=0
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Host: cktvideo-1252817906.cos.ap-guangzhou.myqcloud.com
If-Range: "640f0886f386c9c253a95c5d1c01ca16-163"
**`Range: bytes=9895936-170855393`**
Referer: https://cktvideo-1252817906.cos.ap-guangzhou.myqcloud.com/gaokeyan1.mp4
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型,同时包含 Content-Range 首部。
1
2
3
4
5
6
7
8
9
10
11 Response Headers(10)
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 170855394
** Content-Range: bytes 0-170855393/170855394
** Content-Type: video/mp4
Date: Wed, 12 Jun 2019 02:34:48 GMT
ETag: "640f0886f386c9c253a95c5d1c01ca16-163"
Last-Modified: Sun, 30 Dec 2018 17:44:16 GMT
Server: tencent-cos
x-cos-request-id: NWQwMDY0YzhfMWNiMjk0MGFfNThlZl83YTg5NWY=
http 请求状态响应码 304
无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如 GET 或 HEAD 或 在请求中附带了头部信息: If-None-Match 或 If-Modified-Since。
1
2
3
4
5
6
7
8
9
10
11 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Host: cktvideo-1252817906.cos.ap-guangzhou.myqcloud.com
** If-Modified-Since: Sun, 30 Dec 2018 17:44:16 GMT
** If-None-Match: "640f0886f386c9c253a95c5d1c01ca16-163"
Range: bytes=0-1048575
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
http 请求响应码 401
状态码 401 Unauthorized(未授权)代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。 这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。 这个状态类似于 403, 但是在该情况下,依然可以进行身份验证。
1
2
3
4
5 Request URL: https://api.github.com/user
Request Method: GET
Status Code: 401 Unauthorized
Remote Address: 54.169.195.247:443
Referrer Policy: no-referrer-when-downgrade
http 请求响应码 404
状态码 404 Not Found 代表客户端错误,指的是服务器端无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。 404 状态码并不能说明请求的资源是临时还是永久丢失。如果服务器知道该资源是永久丢失,那么应该返回 410 (Gone) 而不是 404 。
1
2
3
4
5 Request URL: https://api.github.com/repos/helenzhanglp/blog/issues?client_id=8e7e6dda81936172806e&client_secret=97f71b6bbdf731bc650ec39212061882b8f36e71&labels=Gitalk,1863e4a8c0596ce3dfb3ee2f0c838431&t=1560407734937
Request Method: GET
Status Code: 404 Not Found
Remote Address: 54.169.195.247:443
Referrer Policy: no-referrer-when-downgrade
http 请求响应码 500
服务器内部错误,是一个通用的全方位响应,有可能是权限或数据库链接错误。设置代理了,也会返回 500 错误
DNS(Domain Name System)
DNS(Domain Name System) 域名系统
用有意义的名字来作为 IP 地址的等价替代
URI(Uniform Resource Identifier)
URI(Uniform Resource Identifier) 统一资源标识符,可以唯一地标记互联网上的资源
URI 三个基本构成:
- 协议名 访问该资源应当使用的协议 http
- 主机名 即互联网上主机的标记,可以是域名(Domain Name)或IP地址
- 路径 资源在主机上的位置 “/” 分隔多目录
HTML(HyperText Markup Language)
HTML 运行在浏览器,由浏览器解析
HTML 超文本标语言,描述超文本文档
HTML 两个主要的标准 HTML4 和 HTML5
HTML 广义上是指 HTML/JavaScript/CSS等前端技术的组合,能够实现比传统静态更丰富的动态页面
请求方法
HTTP PUT
PUT 创建一个新的资源或用请求的有效载荷替换目标资源的表示。
调用一次与连续调用多次效果是相同的。响应
如果目标资源没有当前的表示,并且 PUT 方法成功创建了资源,那么源服务器必须返回 201 Created 通知用户代理,资源已创建
如果目标资源已存在,并且依照请求中封装的表现形式成功进行了更新,那么,源服务器必须返回 200 OK 或 204 No Content 表示请求成功完成
HTTP DELETE
HTTP DELETE 方法用于删除指定资源
删除成功的状态码:
- 状态码 202 Accept 请求操作可能会成功执行,但尚未开始执行;
- 状态码 204 No Content 操作已执行,但没有进一步相关信息;
- 状态码 200 OK 操作已执行,并且响应中提供了相关状态的描述信息;