嘿!你们好呀!
这期博客给你们介绍一下HTTP协议的基本格式!
希望对你们有帮助
文章目录
前言
如果哪里有错误或者不理解的都可以私聊我哈!谢谢!
一,HTTP协议的工作过程
当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.
拿sogou来举例子:
我们都知道,当我们访问一个网站的时候,可能涉及不止一次HTTP的请求和响应的交互过程,我们可以通过 chrome 的开发者工具观察到:
每一条都是一次HTTP请求/响应。
二,HTTP请求
1,认识URL
平时我们俗称的 “网址” 其实就是说的 URL (Uniform Resource Locator 统一资源定位符).
互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它.
URL 的详细规则由 因特网标准RFC1738 进行了约定.(https://datatracker.ietf.org/doc/html/rfc1738)
(1)协议方案名:常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的
jdbc:mysql )
(2)登陆信息: 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略。
(3)服务器地址:此处是一个 “域名”, 域名会通过 DNS 系统解析成一个具体的 IP 地址.(通过ping命令可以查看到该域名的真实IP地址)
(4)端口号: 当端口号省略的时候, 浏览器会根据协议类型自动决定使用哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口.
(5) 带层次的文件路径
(6)查询字符串(query string). 本质是一个键值对结构. 键值对之间使用 & 分隔. 键和值之间使用 = 分隔。
(7)片段标识: 此 URL 中省略了片段标识. 片段标识主要用于页面内跳转. (例如 Vue 官方文档: https://cn.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5, 通过不同的片段标识跳转到文档的不同章节)
2,URL 中的可省略部分
(1)协议名: 可以省略, 省略后默认为 http://
(2)ip 地址 / 域名: 在 HTML 中可以省略(比如 img, link, script, a 标签的 src 或者 href 属性). 省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致.
(3)端口号: 可以省略. 省略后如果是 http 协议, 端口号自动设为 80; 如果是 https 协议, 端口号自
动设为 443.
(4)带层次的文件路径: 可以省略. 省略后相当于 / . 有些服务器会在发现 / 路径的时候自动访问
/index.html
(5)查询字符串: 可以省略
(6)片段标识: 可以省略
3,方法(method)
(1)GET方法:
GET方法是HTTP中最常用的获取资源的方法,我们使用fiddler抓包观察该方法:
(以百度为例)
最前面的
(蓝色字体)是通过浏览器地址栏发送的 GET 请求。
下面的和 baidu 域名相关的请求, 有些是通过 html 中的 link/script/img 标签产生的, 例如
(绿色字体)
有些是通过 ajax 的方式产生的, 例如
选中GET请求,观察结果为:
由上面可知GET请求的特点:
(1)首行的第一部分为 GET
(2)URL 的 query string 可以为空, 也可以不为空.
(3)header 部分有若干个键值对结构.
(4)body 部分为空.
(2)POST方法
POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面). 通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求.
通过fiddler观察POST 方法:
(以登录gitee为例)
观察POST结果:
由上面可知,POST 请求的特点:
(1)首行的第一部分为 POST
(2)URL 的 query string 一般为空 (也可以不为空)
(3)header 部分有若干个键值对结构.
(4)body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定.
(这里只介绍常用的两种方法,其他方法可以自己了解)
三,HTTP响应
状态码
(1)200
200表示OK,访问成功
注意: 在抓包观察响应数据的时候, 可能会看到压缩之后的数据, 形如:
是因为网络传输中 “带宽” 是一个稀缺资源, 为了传输效率更高往往会对数据进行压缩。
如果想要查看,点击fiddler中的
可以进行解压缩就可以查看了。
(2)400 Not Found
表示没有找到资源。
浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存
在, 那么就会出现 404。
例如
输入 www.sogou.com/index.html正确显示:
输入www.sogou.com/index2.html就可以看到:
(3)403 Forbidden
表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.
例如: 查看码云的私有仓库, 如果不登陆, 就会出现 403.
(4)405 Method Not Allowed
前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等.
但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法).
(5)500 Internal Server Error
服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码.
(6)504 Gateway Timeout
当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况.
(7)302 Move temporarily
临时重定向.
(8)301 Moved Permanently
永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.
301 也是通过 Location 字段来表示要重定向到的新地址.
(9)小结:
这期博客就到此结束了,不罗嗦了,希望对你们有帮助!
记得关注小猪哈!
下期再见了~