Http知识点小记

一,HTTP简介

HTTP协议是HyperText Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

http请求-响应模型图示

---------------------------------------------------------------------------------------------------------------------

二,HTTP之请求消息Request

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

Http请求消息结构

※请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。


请求的格式

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 要上传的数据

请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)

第三部分永远都是一个回车(\n)

动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等

这里的路径包括「查询参数」,但不包括「锚点」

如果你没有写路径,那么路径默认为 /

第 2 部分中的 Content-Type 标注了第 4 部分的格式


1. Get请求例子( curl -s -v -- "https://www.baidu.com"):

> GET / HTTP/1.1

> Host: www.baidu.com

> User-Agent: curl/7.64.0

> Accept: */*

(*这里有回车换行,这里有回车换行,这里有回车换行-------\n)

第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.

GET说明请求类型为GET,后面为访问路径,该行的最后一部分说明使用的是HTTP1.1版本。

第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息

从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等

第三部分:空行,请求头部后面的空行是必须的

即使第四部分的请求数据为空,也必须有空行。

第四部分:请求数据也叫主体,可以添加任意的其他数据。

2. POST请求例子(curl -s -v -d "hello" -- "https://www.baidu.com"):

> POST / HTTP/1.1

> Host: www.baidu.com

> User-Agent: curl/7.64.0

> Accept: */*

> Content-Length: 5

> Content-Type: application/x-www-form-urlencoded

第一部分:请求行,第一行明了是post请求,以及http1.1版本。

第二部分:请求头部,第二行至第六行。

第三部分:空行,第七行的空行。

第四部分:请求数据,第八行。

---------------------------------------------------------------------------------------------------------------------

三,HTTP之响应消息Response

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

http响应消息格式图示

响应的格式

1 协议/版本号 状态码 状态解释

2 Key1: value1

2 Key2: value2

2 Content-Length: 17931

2 Content-Type: text/html

3

4 要下载的内容

状态码要背,是服务器对浏览器说的话

1xx 不常用

2xx 表示成功

3xx 表示滚吧

4xx 表示你丫错了

5xx 表示好吧,我错了

状态解释没什么用

第 2 部分中的 Content-Type 标注了第 4 部分的格式

第 2 部分中的 Content-Type 遵循 MIME 规范

响应例子:(curl -s -v -- "https://www.baidu.com")

< HTTP/1.1 200 OK

< Accept-Ranges: bytes

< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

< Connection: Keep-Alive

< Content-Length: 2443

< Content-Type: text/html

< Date: Mon, 22 Apr 2019 09:49:32 GMT

< Etag: "58860415-98b"

< Last-Modified: Mon, 23 Jan 2017 13:24:37 GMT

< Pragma: no-cache

< Server: bfe/1.0.8.18

< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

< (*这里有回车换行,这里有回车换行,这里有回车换行-------\n)

{ [1040 bytes data]

第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

第二部分:消息报头,用来说明客户端要使用的一些附加信息

第二行和第三行为消息报头,

Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

第三部分:空行,消息报头后面的空行是必须的

第四部分:响应正文,服务器返回给客户端的文本信息。

空行后面的部分为响应内容。

-------------------------------------------------------------------------------------------------------

四,利用Chrome开发者工具查看 HTTP 的“请求”和“响应”内容

用 Chrome 发请求

打开Chrome浏览器,右键选择“检查”(shift+ctrl+I)

打开 Network

地址栏输入网址

在 Network 点击,查看 request,点击「view source」

点击「view source」

点击「view source」

点击「view source」

终于点了?可以看到请求的前三部分了

如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到


用 Chrome 查看响应

打开Chrome浏览器,右键选择“检查”(shift+ctrl+I)

打开 Network

输入网址

选中第一个响应

查看 Response Headers,点击「view source」,点击「view source」,点击「view source」

你会看到响应的前两部分

查看 Response 或者 Preview,你会看到响应的第 4 部分

五 ,curl 命令的使用

curl简介

cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。

curl获取网页内容的用法举例:

curl -s -v -- "https://www.baidu.com"

获取百度首页

curl -s -v -d "hello" -- "https://www.baidu.com" (附带数据用"-d",后面加数据内容)

附带数据获取百度首页

详细用法说明参考:explainshell.com - curl(1) - transfer a URL

你可能感兴趣的:(Http知识点小记)