这两天学习过程中接触到了HTTP协议的一些基本知识,整理一下笔记,做一下总结,巩固一下所学到的知识点。我是在Windows环境下使用的Git Bash来进行命令行的输入。
介绍HTTP协议的话就不得不先说一下服务器和客户端了
简单的介绍Sever + Client + HTTP
Sever(服务器):简单的说就是一台电脑,但是真正指的却是这台电脑里面的一个软件,或者说是代码。服务器一般没有显示器,通过命令行进行远程登录。
client(客户端):可以说是自己的电脑,实际指的就是自己电脑里面的浏览器(也是一个软件),但是却有显示器,客户端的使用就是和我们平时上网浏览网页。
HTTP(HyperText Transfer Protocol,指的是超文本标记语言)形象的说就是连接服务器和客户端的一个桥梁。
下面是一幅比较形象的结构框图。
两台电脑通过HTTP协议传输信息的时候一般都是单向访问的,就是说一台电脑A只能向另一台电脑B单独的发生信息。此时电脑B只能接受电脑A发送过来的信息,(QQ聊天不是使用的HTTP协议),上图显示中可以看到服务器有一些端口,这些端口跟TCP IP协议有关,此次就不展开这方面的知识了,服务器端口共有 65535(2的16次方减1)个,每一个端口都有指定的功能,比如:
21:用于FTP;
80:用于HTTP协议(最特殊的)
433:用于HTTPS;
1080:用于代理服务器端口。
Sever + Client + HTTP 的具体运转是通过以下步骤进行的
Client 发起请求 ——> Sever 在80端口接收请求 ——> Sever 返回内容(响应) ——> Client 下载响应的内容。(HTTP的作用就是指导浏览器和服务器如何进行沟通)。
那么接下来就将进行实际的操作了,在此之前呢,需要了解一下curl命令是如何使用的。在这儿就举一个具体的例子来看看这个命令是如何使用的。
curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"
curl表示命令, -s表示不显示进度条, –v显示请求和响应, -H添加一个响应头, 此处添加的响应头就是"Frank: xxx" , -- "https://www.baidu.com"示想要请求的网址是https://www.baidu.com。
打开Git Bash,在命令行中输入curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"
会得到如下的结果。
上图中的
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.55.0
> Accept: */*
> Frank: xxx
表示请求的内容,这个请求内容是满足HTTP的请求格式的,HTTP的请求格式如下
1 动词 路径 协议/版本
2 Key1:value1
2 Key2:value2
2 Key3:value3
2Content-Type: application/x-www-form-urlencoded
2 Host:www.baidu.com
2User-Agent: curl/7.54.0
3
4 要上传的数据
格式的说明如下:
请求最多包含四部分,最少包含三部分。(也就是说第四部分可以为空)
第三部分永远都是一个回车(\n),为了区分第二部分和第四部分。
动词有GET POST PUT PATCH DELETE HEAD OPTIONS 等
(GET:获取内容,POST:上传内容,PUT、PATCH:更新内容,PUT是整体更新,PATCH是局部更新,DELETE:删除内容,HEAD OPTIONS暂时不用知道什么意思)。
这里的路径包括「查询参数,但不包括「锚点」。
如果你没有写路径,那么路径默认为 /,路径是"/"开头的。
第 2 部分中的 Content-Type 标注了第 4 部分的格式。
通过命令行看到的结果就如上所示。接下来是用Chrome发请求
1、打开 Network ——> 打开界面右击,检查,点击network
2、地址栏输入网址
3、在 Network 点击,查看 request,点击「view source」就可以看到请求的前三部分了
4、如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
响应
请求了之后,应该都能得到一个响应,除非断网了,或者服务器宕机了。
响应示例
上面发出请求后,得到的响应为
< 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: Sat, 13 Oct 2018 06:37:51 GMT
< Etag: "58860411-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:33 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
想要明白上面响应所描述的内容,就需要明白响应的格式
响应的格式
1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
以上的格式中,想要在今后的使用中清楚的知道返回的内容,需要知道状态码的含义,是服务器对浏览器说的话
1xx 不常用
2xx 表示成功 200:普通成功GET,204:创建的成功POST
3xx 表示重定向 301:永久被删掉了,302:临时被封掉了,一般都有location告知去:哪儿。304:和上一次的回答一样
4xx 表示表示请求出错 404:访问者输入的网址出错了
5xx 表示服务器出现异常 502:服务器出错了
第 2 部分中的 Content-Type 标注了第 4 部分的格式
第 2 部分中的 Content-Type 遵循 MIME 规范。
同请求一样,也可以用 Chrome 查看响应
1、打开 Network
2、输入网址(此时是需要向服务器发送请求的,这个时候就需要选择登陆一个账户或者其他向服务器传递信息的请求)
3、选中第一个响应(响应的Method是POST)
4、查看 Response Headers,点击「view source」就可以看到响应的前两部分
5、查看 Response 或者 Preview,就可以看到响应的第 4 部分。
以上便是这次学习笔记的主要内容。
网友评论