HTTP简介
HTTP(Hypertext Transfer Protocol,超文本传输协议 )是在万维网上进行通信时所使用的协议方案。HTTP 有很多应用,但最著名的是用于 Web 浏览器和 Web 服务器之间的双工通信。
——HTTP权威指南
这是HTTP权威指南中对HTTP的解释。对于已经了解HTTP的人来说足够言简意赅,但对于初学者来说,还是有些生涩,超文本是个啥?协议又是个啥?双工通信是个啥?理解起来,要绕上一圈,还是不能直截了当的理解。
那么,有没有更好的方式了解HTTP到底是什么东西呢?
语文学的好的同学,则好理解的多。提取主谓宾,就可以知道,“HTTP+是+协议方案”。那么,知道到了HTTP是个协议方案以后。又该怎么理解呢,为什么网络通信要用这个协议方案呢?这个协议的内容是个啥呢?这个就说来话长了,下面为大家稍微讲解~
首先拿一个最常见的例子来说,先看下图
生活中,我们上网的一个过程:
- 用户使用客户端输入网址或者IP地址;
- 客户端向服务器发送请求信息;
- 服务器给客户端发送响应信息;
- 客户端下载服务器响应的信息内容;
- 用户看到了网页
客户端(暂且理解为浏览器)
服务器(暂且理解保存处理数据的机器)
看完了一个生活中使用网站时,发生的整个过程。那HTTP在当中到底是起到什么作用呢?
不就是很简单的 发送请求 --> 回复响应 -> 接受响应 的一个过程么。HTTP是不是这么简单呢?
再尝试深入思考一下
- 客户端发送请求的内容是什么呢?
- 怎么发送呢?
- 怎么让服务器知道我想要什么内容呢?
- 服务器怎么判断客户端发来的请求想要的是什么呢?
- 客户端怎么知道服务器响应回来的是什么内容呢?
- 此处省去一万字...
想解开这些疑惑,这就得深入理解一下HTTP请求、HTTP响应的内容了。
HTTP请求
HTTP请求格式
第一部分:动词 路径 协议/版本
第二部分:
key1:value1
key2:value2
Content-Type:xxxx/xxx
Host:www.xxxx.com
第三部分:
第四部分: 要上传的数据内容
请求包含四部分,也可以只包含三部分。(第四部分可以为空的)
-
第一部分:
- 动词,动词有 GET(获取)、POST(上传)、PUT(正题更新)、PATCH(区域更新)、DELETE(删除)、HEAD 、OPTIONS 等
- 路径,如果你没有写路径,那么路径默认为 /
- 协议/版本,请求信息的协议和版本号
- 一般为第一行内容
-
第二部分:
- 第二部分为请求元信息 ,中间用冒号:隔开的信息列表。
- key1、key2为举例说明格式,无其他意义。
- Content-Type 标注了第 4 部分的格式。
第三部分: 第三部分永远都是一个回车(\n)
第四部分:要上传的数据内容,可以为空。
Chrome浏览器查看HTTP请求
我们就用访问百度这个网站的例子说明格式
- 打开浏览器(我都用的是Chrome);
- 直接右键点击选中检查(Ctrl+Shift+I) 或者直接按下F12键;
- 弹出浏览器的检查模式,在第一排导航中,找到 Network 选中;
- 输入输入网址 https://www.baicu.com 确定;
- 在检查模式刷新的列表中,找到排第一的www.baidu.com 点击;
- 点击之后进入,右边栏目headers中找到 Resquest Headers 点击展开
- 展开Resquest Headers内容后,然后点击旁边的 view source;
- 这时,Resquest Headers内容就变为HTTP的请求内容
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxxxxxxx
好了,到此为止,就可以看到上面HTTP请求的前面三部分内容了。如果有第四部分,则在FormData或者Payload中。
如果想在深入了解,各个部分的代码是表示什么,第一部分的GET什么意思呀?第二部分的Host、connection等等什么意思呀?就得更加地深入学习HTTP了,查询文档和规范,看关于的HTTP书籍,看关于详解HTTP的博客等等,这里只浅解HTTP,让你理解什么是HTTP。
HTTP响应
HTTP响应格式
第一部分:协议/版本号 状态码 状态解释
第二部分:
key1:value1
key2:value2
Content-Length: 17931
Content-Type:xxx/xxx
第三部分:
第四部分: 要下载的数据内容
状态码要背,是服务器对浏览器说的话
○ 1xx 不常见
○ 2xx 代表成功 ——200,普通成功;204,创建成功;
○ 3xx 表示资源不在这,去的地方找——301,永久不纯在。302,临时不纯在。
○ 4xx 表示你的操作有错误——用户方出错
○ 5xx 表示服务器端有错误——服务器放出错状态解释就是告诉你一下信息,比如成功了、失败了等等信息。
第 2 部分中的 Content-Type 标注了第 4 部分的格式
第 2 部分中的 Content-Type 遵循 MIME 规范
Chrome浏览器查看HTTP响应
继续拿访问百度来说明,
- 打开浏览器(我都用的是Chrome);
- 直接右键点击选中检查(Ctrl+Shift+I) 或者直接按下F12键;
- 弹出浏览器的检查模式,在第一排导航中,找到 Network 选中;
- 输入输入网址 https://www.baicu.com 确定;
- 在检查模式刷新的列表中,找到排第一的www.baidu.com 点击;
- 点击之后进入,右边栏目headers中在找到 Response Headers 点击展开
- 展开Response Headers内容后,然后点击旁边的 view source;
- 这时,Response Headers内容就变为HTTP的请求内容
- 第四部分在response中。
HTTP/1.1 200 OK
Bdpagetype: 2
Bdqid: 0xba22dd350002b473
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Mon, 04 Jun 2018 09:24:10 GMT
Expires: Mon, 04 Jun 2018 09:24:10 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=206; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=26525_1443_21081_26350_20930; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
以上,大概能够理解HTTP请求与响应的一个过程。
CURL
最后,介绍一个快速能够查看请求与响应过程的范式。直接用命令行查访问一个网站的请求和响应的过程,使用 curl 命令
curl命令是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。
——微风伏面
首先,尝试一下,使用curl 命令访问百度,在git bash(windows用户)中输入:
curl -s -v -- "https://www.baidu.com"
-s 静默模式,不输出任何东西
-v 参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。
显示的信息只找到 > 和 < 开头的行, > 表示请求的命令行,<表示响应的命令行。*号表示注释。
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.55.0
> Accept: */*
>
< 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, 04 Jun 2018 10:15:26 GMT
< Etag: "58860402-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
以上为以使用命令curl,访问一个网站的请求与响应的命令行。相对于使用浏览器操作步骤查看来说,使用命令行,只需要输入curl的命令内容,更加快捷。当前,前提是你得学会使用命令行。
curl更深入学习
好了,HTTP粗浅了解,到这里就结束了~想要更加深入学习HTTP,则需要付出更多的学习时间和精力。