HTTP
什么是HTTP协议?
在我们进行网页的浏览过程中,我们不断地通过浏览器向对应的服务器发送请求,并且将服务器响应回来的内容下载并渲染到页面上,最终形成所看到的页面。而指导浏览器和服务器进行请求与响应的就是HTTP协议。
HTTP的请求
在Git Bash环境下 运行以下代码
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"
最终出现了如下图的代码,这就是HTTP的请求内容
POST / HTTP/1.1 --请求行
Host: www.baidu.com 请求头--{
User-Agent: curl/7.63.0
Accept: */*
Frank: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded }--请求头
-- 空行
[10 bytes data] --上传的数据
现在我们对上面的HTTP请求的组成进行分析:
第一部分:请求行
POST / HTTP/1.1
请求行的组成为:请求方式 请求路径(路径包括查询参数,但不包含锚点) 协议/协议版本
第二部分:请求头
Host: www.baidu.com
User-Agent: curl/7.63.0
Accept: */*
Frank: xxx
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
请求头的内容主要是关于此次请求的一些信息,这些信息由多组键值对组成。
第三部分:空行
Content-Type: application/x-www-form-urlencoded
[10 bytes data]
可以看出上面这行代码中间有一个 空行 ,这是HTTP请求的第三部分,没有太多的含义,主要用于分割第二部分和第四部分。
第四部分:请求数据(此部分非必须)
[10 bytes data] //这行代码就是传入的数据"1234567890"
HTTP的请求方式
- GET :请求指定的页面信息,并返回实体主体。
- HEAD :类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
- POST :向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT : 从客户端向服务器传送的数据取代指定的文档的内容。
- PATCH :是对 PUT 方法的补充,用来对已知资源进行局部更新 。
- DELETE :请求服务器删除指定的页面。
- OPTIONS :允许客户端查看服务器的性能。
- CONNECT :HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
- TRACE :回显服务器收到的请求,主要用于测试或诊断。
其中 GET POST HEAD 是HTTP1.0定义的
其他请求方法则是在HTTP1.1中新增的
HTTP的响应
在Git Bash环境下 运行以下代码
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"
以下的内容即为此次请求的HTTP响应
HTTP/1.1 302 Found --状态行
Connection: Keep-Alive 响应头--{
Content-Length: 17931
Content-Type: text/html
Date: Tue, 23 Jul 2019 09:21:19 GMT
Etag: "54d9748e-460b"
Server: bfe/1.0.8.18 }--响应头
-- 空行
[3824 bytes data] --响应实体
现在我们对上面的HTTP响应的组成进行分析:
第一部分:状态行
HTTP/1.1 302 Found
状态行的组成主要是:
协议/协议版本 状态码 状态码对应的信息
第二部分:响应头
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Tue, 23 Jul 2019 09:21:19 GMT
Etag: "54d9748e-460b"
Server: bfe/1.0.8.18
响应头主要的内容是该次响应的一些信息,也是由多组键值对组成。
第三部分:空行
和HTTP请求的结构类似,响应的第三部分也是空行,主要用于分割
第四部分:响应实体
[3824 bytes data]
上面这行代码指代的就是该次请求获取的响应实体,是一个大小为3824字节的信息。
Chrome中使用开发者工具查看请求和响应信息
1.F12 进入 开发者工具
2.进入Network
3.输入网址进入网页,或者刷新当前网页
4.选择文件
5.Requset Headers查看请求的内容;Respons Headers查看响应的内容
6.点击view source !!!
curl
curl的作用
curl是linux系统中利用url规则在命令行中进行文件传输的工具。支持文件的上传、下载功能,是比较常用到的linux命令。在进行开发过程中,可以使用curl对接口进行测试,获取接口返回的数据。
curl的使用方法
- 通过curl获取页面:直接接一个url
$ curl https://www.baidu.com
- 发送GET请求:直接在url中通过?传递查询参数
$ curl https://www.baidu.com/s?wd=dd&ie=UTF-8
- 发送POST请求:
$ curl -X POST -d "1234567890" -- "https://www.baidu.com"
-X POST
:通过 -X 来自定义指定一个请求方式
-d "1234567890"
: -d 可以传入POST请求时要上传的数据
- 抓取一个页面到文件中
$ curl -o file.html https://www.baidu.com
- 连接重定向自动跳转
$ curl -L https://www.baidu.com
假如:https://www.baidu.com重定向后,通过 -L 可以自动跳转到新的网页中。
curl的命令参数
详见:https://www.explainshell.com/explain/1/curl