HTTP 的作用就是指导浏览器和服务器如何进行沟通。每个电脑都有很多端口,每一个端口都要做指定的事情
a. 浏览器负责发起请求
b. 服务器在 80 端口接收请求
c. 服务器负责返回内容(响应)
d. 浏览器负责下载响应内容
请求示例:
curl -s -v -H "Frank: xxx" -- "https://www.baidu.com"
用get请求百度:
1. GET / HTTP/1.1 /*动词+路径(无意义跟文件没有任何关系)+协议*/
2. Host:baidu.com /*我想访问baidu.com */
3. Accpet:text/html /*我希望接收到的是html文件 */
百度给的响应:
1. HTTP/1.1 200 OK /*我是HTTP/1.1,ok,没有问题,你需要什么我可以给你什么*/
2. Content-Type:text-html;charset=utf-8 /* Content-Type的内容就是你想要的文件再给你一个字符集,方便你解释中文*/
Content-Length:10000 /*我传给你的html长度是10000个字节*/
3. 回车(\n)
4. <!DOCTYPE>
<html>…</html>/*这个就是百度传给我们的文件内容,中间部分省略*/
用POST 请求百度(登录百度):
Post /login HTTP/1.1 /*用post发请求来登录,用的是HTTP/1.1协议*/
Host:baidu.com /*登录百度*/
Accept:application/json /*想要接收json*/
Content-Type:application/x-www-form-urlencoded /*发内容给它*/
Content-Length:10
回车(\n)
Username:fangfang&password:mima /*这是我上传的内容*/
百度给的响应:
1. HTTP/1.1 403 Forbidden /*禁止登录*/
2. Content-Type: application/json
Content-Length:200
3. 回车(\n)
4. {“error”:密码错误}
请求的形式总结:
第一部分:动词 路径 协议/版本 HTTP/1.1
第二部分:你要告诉访问的主机你想要什么
第三部分:按回车(\n)
第四部分:要获取/上传的数据
响应的形式总结:
第一部分:协议号/版本号 状态码 状态解释
第二部分:访问的主机告诉你它给你了什么(第二部分是对第四部分格式的标注)
第三部分:按回车(\n)
第四部分:访问的主机传回给我们的文件内容
get和post的区别:get是获取内容;post是上传内容
用 Chrome 发请求:
- 打开 Network
- 地址栏输入网址
- 在 Network 点击,查看 request,点击「view source」就可以看到请求的前三部分了
- 如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
用 Chrome 查看响应
- 打开 Network
- 输入网址
- 选中第一个响应
- 查看 Response Headers,点击「view source」你会看到响应的前两部分
- 查看 Response 或者 Preview,你会看到响应的第 4 部分
资源
状态码详解