一、HTTP 请求
一个HTTP请求包含四部分:
- 动词 路径 协议/版本
- 动词:即请求的方法,最常见的方法为
get
和post
,其它还有put
、delete
等 - 路径:请求的页面路径和查询参数,如果没有则默认路径为
/
- 协议/版本:声明请求的协议和其版本,最常见的是
HTTP/1.1
,即使用HTTP协议的1.1版本发送请求
- 一些键值对
这些键值对补充HTTP请求的一些必要信息,格式通常为Key: value
,比如:
-
Host: www.baidu.com
,表明向百度发送请求 -
User-Agent: curl/7.54.0
,表明使用哪种客户端发送请求,这里是 curl 命令 -
Accept: */*
,表明可以接受何种格式的内容作为响应,这里表示可以接受任何内容
- 一个回车
- 要上传的内容(可以为空)
如果不需要,可以不上传任何内容。这一部分通常在提交表单时使用。
我们可以使用chrome的开发者工具来看看我们访问百度时会发送怎样的HTTP请求:
-
打开开发者工具,点击 Network 这个 tab
-
访问百度,就可以看到我们向百度的域名发送了一个请求,点击这个请求
-
点击请求的 Header ,找到 Request Headers,再点击一下旁边的 view source 就可以看到请求源码了
二、HTTP 响应
一个HTTP响应也包含四部分:
- 协议/版本号 状态码 状态解释
- 状态码:表明响应的状态,状态码由3位数字组成,含义为:
1xx 代表请求已被接受,需要继续处理
2xx 代表请求已成功被服务器接收、理解、并接受
3xx 代表需要客户端采取进一步的操作才能完成请求
4xx 代表客户端看起来可能发生了错误,妨碍了服务器的处理
5xx 代表服务器在处理请求的过程中有错误或者异常状态发生
- 一些键值对
-
Content-Type: text/html;charset=utf-8
,表明响应内容的格式和字符集,遵循 MIME 规范
- 一个回车
- 要下载的内容
- 响应返回的内容,如果请求的是一个大型页面,那么内容会非常长
我们同样用chrome来看看访问百度后会得到怎样的响应:
-
响应内容和请求内容在同一个tab里
-
响应的第四部分,即下载内容在另一个tab里
可以看到内容非常多
三、curl 命令
我们也可以使用curl
命令发送HTTP请求
# curl [-X METHOD] [option] -- [url]
选项:
-
-s
,静默模式,不要显示进度条和错误信息 -
-v
或--verbose
,显示详细信息 -
-H
或--header
,为请求添加 header
在下图中,我们指定了使用POST
方法请求百度主页,并且添加了自定义的 header 信息
命令行显示了请求的原文,可以看到方法为POST
,也包含了添加的自定义 header: