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 请求内容

  1. 打开 Network
  2. 地址栏输入网址
  3. 在 Network 选择要查看的请求 Name
  4. 在 右侧 点击 Request Headers 旁边的 view source
  5. 可以看到请求的第一部分 和 第二部分
  6. 如果有 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 响应内容

  1. 打开 Network
  2. 地址栏输入网址
  3. 在 Network 选择要查看的请求 Name
  4. 在 右侧 点击 Response Headers 旁边的 view source
  5. 可以看到请求的第一部分 和 第二部分
  6. 点击 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 查看具体指令的描述。