超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。
(概述来自Wikipedia——超文本传输协议)
HTTP请求
以chrome开发者工具查看HTTP请求示例。步骤如图。
点击view source后,显示如下:
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
(以下省略
HTTP请求的格式:(对比上方)
1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据
(每行开头数字为所属部分)
- 第一部分:
- 动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
- 路径包括「查询参数」,但不包括「锚点」
- 第二部分:
- 键值对 key:value
- Content-Type (如果有的话) 标注了第 4 部分的格式
- 第三部分:
- 永远都是一个回车(\n)
- 第四部分:
- 是否有要上传的数据,没有则该部分被省略
HTTP响应
点击view source后,显示如下:
HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0x9bf2690a000accbd
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html
Cxy_all: baidu+ae5f8f98ba5e93163b5f38163b056cb5
Date: Wed, 26 Jun 2019 10:47:42 GMT
(以下省略
HTTP响应的格式:(对比上方)
1 协议/版本号 状态码 状态 解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
其中,状态码(部分)简介如下:
状态码 | 含义 |
---|---|
1XX消息 | 请求已被接受,需要继续处理。 |
2XX成功 | 请求已成功被服务器接收、理解、并接受。 |
200 OK | 请求已成功 |
3XX重定向 | 客户端采取进一步的操作才能完成请求。 |
301 Moved Permanently | 被请求的资源已永久移动到新位置。 |
302 Found | 要求客户端执行临时重定向。 |
4XX客户端错误 | 客户端可能发生了错误,妨碍了服务器的处理。 |
400 Bad Request | 由于明显的客户端错误,服务器不能或不会处理该请求。 |
403 Forbidden | 服务器已经理解请求,但是拒绝执行它。 |
404 Not Found | 请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求。 |
5XX服务器错误 | 表示服务器无法完成明显有效的请求。 |
500 Internal Server Error | 通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。 |
502 Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 |
命令行中curl命令的使用
语法:curl -[参数] -- [url]
常用参数:
-d, --data 以HTTP POST方式传送数据
-s, --silent 静音模式
-v, --verbose 显示更详细的信息
-H, --header 自定义头信息传递给服务器
-X, --request 指定命令(例如POST)
请求示例:curl -X POST -s -v -- "https://www.baidu.com"
效果如图。可注意到 > 后的请求内容,及 < 后的响应内容。