HTTP 协议基础知识
HTTP 全称 HyperText Transfer Protocol,中文超文本传输协议。超文本在客户端和服务端传输协议。 大致的一次 HTTP 传输过程,客户端向服务器端发送请求,服务器端收到请求再回复响应给客户端。
请求
发送的请求,HTTP 协议的请求信息,有三到四部分:
第一部分
是请求行,包括了: 请求方法 请求的路径 协议/协议版本,
比如:GET index.html http/1.1
第二部分
是请求头部,用来说明服务器要使用的附加信息:
都是 key: value 的键值对,可以是自定义的键值对,比如 A: B。
其中包含默认带的键值对:
- Host: xxx.com 是指请求的目的地
- User-Agent: xxx 服务器端和客户端都能访问它,客户端是通过浏览器访问时,User-Agent 用于浏览器类型检测,它由客户端浏览器定义,并在每次请求中都自动发送
- Content-Type: xxx 描述了请求中的第四部分的格式
第三部分
是空行,目的是为了让第三部分请求头和第四部分请求主体区别开来。
第四部分
是请求数据,请求数据也叫主体,可以添加任意的其他数据
用 Chrome 开发者工具查看 HTTP 请求内容
- 打开 Network
- 地址栏输入网址
- 在 Network 选择要查看的请求 Name
- 在 右侧 点击 Request Headers 旁边的 view source
- 可以看到请求的第一部分 和 第二部分
- 如果有 POST 请求,或者 带查询字段,可以在 FormData/Payload 下看到 POST 请求的第四部分,或者 查询字段的第四部分
响应
请求发出后,客户端网络正常的情况下,服务器端回复响应给客户端,服务器端回复的响应包括四个部分:
第一部分
是状态行,包括了:协议/协议版本号 状态码 状态消息
比如:HTTP/1.1 200 OK
一般状态码
1xx 表示请求已接收,需要继续处理
2xx 表示请求已经成功被服务器器接收,理解,并接受
3xx 表示需要客户端进一步的操作才能完成请求,用来重定向到其他地址
4xx 客户端错误
5xx 服务器端错误
常见状态码描述
状态码 | 描述 |
---|---|
301 | 永久重定向到其他地址,比如网址改版后,域名地址变了,就可以把旧地址 301 到 新地址 |
302 | 临时重定向,请求头中设置了 Cache-control 或者 Expires 时,响应的缓存的内容 |
304 | 请求头中设置了 If-Modifie-Since 或者 If-None-Match 参数之后未被修改,响应的是客户端的内容 |
401 | 未认证 |
403 | 服务器理解请求,但拒绝执行它 |
405 | 请求的 Method 错误 |
500 | 通用错误消息,一般是服务器的代码逻辑错误 |
502 | 网关错误 |
504 | 网关超时 |
第二部分
是消息报头,是用来说明客户端要使用的一些附加信息:都是 key: value 的键值对,可以自定义消息报头。Content-Type 指明了第四部分的 MIME 规范格式。
第三部分
是空行,目的是为了让第三部分消息报头和第四部分响应主体区别开来。
第四部分
是响应主体,客户端要下载的内容。
用 Chrome 开发者工具查看 HTTP 响应内容
- 打开 Network
- 地址栏输入网址
- 在 Network 选择要查看的请求 Name
- 在 右侧 点击 Response Headers 旁边的 view source
- 可以看到请求的第一部分 和 第二部分
- 点击 Response tab,能看到响应的第四部分
cURL使用
curl 相当于一个客户端,可以在命令行发送请求到服务器。
curl -X GET -v -H 'X-My-Header: 123' https://www.baidu.com |
-X 可以指定发送请求的方法
-v 是指啰嗦模式,也就是显示出更多的信息,如果要查看 HTTP 的请求和响应的信息,就需要它
-H 是指自定义请求头
可以通过 tldr curl 查看其他 curl 其他指令,通过 explianshell.com 查看具体指令的描述。