互联网飞速发展,我们很难相信仅仅20几年前,也就是1990年,这一年 Tim Berners-Lee才 发明了用网址就能访问网页的办法,他发明了第一个网页、第一个浏览器和第一个服务器。
那么1990之前呢?人们的使用电脑只局限于不联网的工作和游戏,联网使用的最主要的就是email,所以1980年-1990年间,人们迫切的需要一种更好的上网方式,于是http在众多方案中脱颖而出,被大众所使用。
一、什么是HTTP
HyperText Transfer Protocol 超文本传输协议
HTTP的作用就是指导浏览器和服务器如何进行沟通。那么又是如何实现沟通的呢?随我来看~
image如图所示,浏览器发起请求→服务器在80端口接收请求→服务器发出响应返回内容→浏览器负责下载响应内容。我们浏览器和服务器就是这样实现了交互沟通啦。
小tips:
1.80端口专门用来服务HTTP哒。
2、如下图这样的一个URL,主要就是以下几部分组成。
image二、HTTP要求
1、发送请求的格式
第一部分:动词 路径 协议/版本
第二部分:key1 : value1
第二部分:key2 : value2
第二部分:key3 : value3
第二部分:Content-Type : application / x-www-form-urlencoded
第二部分:HOST:www.baidu.com
第二部分:User-Agent : Curl/7.54.0
第三部分:
第四部分:要上传的数据
-
请求最多包含四部分,最少包含三部分,也就是第四部分可以空着
-
第三部分永远都是一个回车(/n)我们需要它来清晰的划出三四部分的界限
-
动词主要有GET(获取)、POST(上传)、PUT(整体更新)、PATCH(局部更新)、DELETE(删除)等
-
这里的路径包括查询参数,但不包括锚点(什么是参数?什么是锚点?倒回去看看小tips)
-
如果你没有写路径,那么路径就会默认为/
-
第二部分的Content-Type标注了的第四部分的格式
-
不按协议来,是会出错哒
2、如何使用chrome开发者工具查看HTTP要求呢?
a、打开Network
imageb、地址栏输入网址
imagec、点击Network,查看request,点击view source
imaged、这样我们就可以看到请求的前三部分了,如图所示就是GET请求的实例,我们可以对照着前面给出的标准再次理解一下。
imagee、如果你想看到请求的第四部分,那么在FormData或者Payload中查看
(一般上传数据,用到post请求时,是我们登陆时,需要输入用户名密码提交上去)
三、响应
我们的浏览器发出了请求,服务器自然就要响应,接下来我们就看看服务器如何响应?
1、响应的格式
第一部分:协议/版本号 状态码 状态解释
第二部分:key1 : value1
第二部分:key2 : value2
第二部分:Content-Length :17931
第二部分:Content-Type:txt/html
第三部分:
第四部分:要下载的内容
状态码要背,这是服务器对浏览器说的话
-
1XX不常用
-
2XX表示成功
-
3XX一般是服务器叫你走开啦,比如301,意思是你所访问的已经永久的搬走了,比如302表示临时外出,过几天再回来,这不是叫你走开么~
-
4XX一般是服务器对浏览器说你丫的错啦,比如404就是访问者出错了,可能网址输错了~
-
5XX一般就是服务器自己出错啦,比如502,可能是服务器崩啦
-
详细请看→维基百科
第二部分的Content-Type标注了第四部分的格式
3、用chrome查看响应
a、打开Network
b、地址栏输入网址
c、选中第一个响应
d、查看Response Headers,点击view source
imagee、这样我们就可以看到请求的前二部分了,是不是和我们的格式相同~
imagef、查看Response或者Preview,你会看到响应的第四部分。
image注:GET要求和POST要求对应的响应可以一样,也可以不一样
响应的第四部分可以很长很长很长,比如Content-Length=17931
四、curl命令
那我们可不可以在命令行里实现这一切呢,当然可以,那就是curl命令。
curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。
我们输入
imageCurl -s -v -H "cy:XXX" -- "https:// www.baidu .com "
可以看到接着省城一大堆的代码,我们直接来到最下面就可以看到
image我们可以看到这是GET请求,那么post请求呢?
输入:
imageCurl -XPOSt -s -v -H "cy:xxx" -- "https://www.baidu.com"
果然变成了post请求~
网友评论