1.HTTP工作原理
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为其他端口。
HTTP三点注意事项:
HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
2.HTTP请求的格式
HTTP一般有四部分组成,请求行、请求头部、空行、请求数据(其中请求数据部分可以为空),请求格式如下:
第一部分 动词 路径 协议/版本
第二部分 Key1: value1
第二部分 Key2: value2
第二部分 Key3: value3
第二部分 Content-Type: text/html
第二部分 Host: www.baidu.com
第二部分 User-Agent: curl/7.54.0
第三部分
第四部分 要上传的数据
其中,第一部分为请求行。请求行中,动词可选的有GET、 POST、 PUT PATCH 、DELETE、 HEAD 、OPTIONS 等。路径如果你没有写,默认路径为 /。协议/版本,比如HTTP/1.1。
第二部分,请求头部,由一系列key:value值组成。如上所示的Context-Type:text/html,表示内容为text文件或者HTML文件。
第三部分,是一个回车(空行),将第二部分和第四部分分割。
第四部分,就是要上传的数据。
3.HTTP响应的格式
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
第一部风 协议/版本号 状态码 状态解释
第二部分 Key1: value1
第二部分 Key2: value2
第二部分 Content-Length: 17931
第二部分 Content-Type: text/html
第三部分
第四部分 要下载的内容
其中,第一部分为状态,表示协议/版本号(如HTTP/1.1),状态码及状态信息构成。
第二部分,状态消息,由一系列key:value值组成。如上所示的Context-Type:text/html,表示内容为text文件或者html文件。
第三部分,是一个回车(空行),将第二部分和第四部分分割。
第四部分,就是要下载的数据。
4.HTTP状态码
-
1xx
信息,服务器收到请求,需要请求者继续执行操作。 -
2xx
成功,操作被成功接收并处理。 -
3xx
重定向,需要进一步的操作以完成请求。 -
4xx
客户端错误,请求包含语法错误或无法完成请求。 -
5xx
服务器错误,服务器在处理请求的过程中发生了错误。
具体状态码含义可上网查询。
5.用chrom查看请求和响应
- 打开chrome,
F12
进入开发者工具,如下图1所示:
- 点击
network
选项,在搜索框输入https://www.baidu.com,并点击name
下的第一行如下图2所示:
- 点击
header
下的Request Header
选项,并点击View source
选项即可看到该请求内容,如下图3所示:
由图3可知该请求只有第一、第二、第三部分,没有第四部分。如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到。 - 点击图2
Response Header
选项,并点击View Source
选项,即可看到相应内容,如下图4所示:
响应内容可通过点击Response
选项查看,如下图5所示:
6.curl命令
-
curl www.baidu.com
该命令将网页内容显示在命令行。如下图所示: curl www.baidu.com >index.html
该命令执行的结果是将该网页下载下来并保存至index.html
文件里。curl -o index.html www.baidu.com
该命令的作用和上一条命令一样,也是将网页下载并保存至index.html
文件里。-
curl -I www.baidu.com
该命令是将baidu.com的响应头部显示在命令行中,如下图所示:
如果将参数-I
变成-i
则显示响应头部和整个页面。 curl -L www.sina.com
,该命令执行的结果是将网站自动跳转至www.sina.com.cn
,-L
参数的作用就是自动跳转。-
curl -v www.baidu.com
,-v
参数可以显示一次http通信的整个过程,包括端口连接和http request头信息,如下图所示:
curl -c cookies.txt http://www.baidu.com/
,该命令可以把访问网站的cookies保存在cookies.txt
文件中。curl -b cookies.txt http://www.baidu.com/
,该命令则可以利用已有的cookie信息文件来访问网站。
更多命令用法请参考https://man.linuxde.net/curl 或curl.haxx.se/docs/manpage.html