HTTP 详解
HTTP 协议
HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议.
是服务器传输超文本到本地浏览器的传送协议。
HTTP 的请求发送出去,就需要从应用层到物理层,层层封装
接收方接收到后,就需要从物理层到应用层,层层分用,才能完成传输
- 协议
为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。
HTTP 的工作过程
http 是一种 “一问一答” 形式的协议 , 即 一个请求 -> 一个响应 。
Fiddler 抓包工具
学习 HTTP 就要认识其 报文格式 ~
抓包工具 Fiddler :本质上相当于一个 “代理” ,借助它可看到网络上传输的具体数据 。
- 为什么 HTTP 报文中要存在 “空行”?
因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者
是 “报头和正文之间的分隔符”.
HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.
URL
平时我们俗称的 “网址” 其实就是说的 URL (Uniform Resource Locator 统一资源定位符).
互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它.
- method
- GET 和 POST 方法有啥区别?
没有本质区别(只是使用习惯有差异)
- GET 习惯上表示 获取 , POST 习惯上表示提交
- GET 一般没有 body , 需要携带数据放到 URL 中, POST 一般有 body
- GET 请求通常会设计成幂等的 , POST 则无要求
- GET 是可缓存的(前提是幂等), POST 则不能
(幂等:输入一定,其输出也是一定的)
(缓存:计算机把结果记住了(提高响应速度))
HTTP 请求格式:
- HOST 属性:我们访问服务器不一定是直接访问,而通过 “代理” 来访问的,那么 HOST 就指向最终目标,URL 指向当前目标。
- Content-Type: 描述了 body 的数据格式 (知道了格式服务器才能正确解析)
- Content-Length: 描述了 body 的长度(字节)
- query string(查询字符串) :对你访问的资源进行一个补充说明
- User-Agent :描述了浏览器/系统的版本(手机/平板/PC)
- referer : 描述了当前这个页面是从哪个页面跳转来的
- cookie : 浏览器在 本地存储 用户自定义数据的一种关键机制
HTTP 响应格式:
- 状态码
通过 form 表单构造 HTTP 请求
form 是 HTML 中的一个表单标签,可以用于给服务器发送 GET 或者 POST 请求。
GET:
POST:
在构造的页面中,输入数据后,进行提交,我们再通过抓包,查询到了以下结果
- GET
- POST
通过 PostMan 构造 HTTP 请求
HTTPS
- HTTPS 是什么
HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.
- 明文 :实际要传达的信息
- 密文 :加密后的信息
- 密钥 :加密 和 解密时使用 (key)
- 对称加密 :(明文 + key = 密文) (密文 + key = 明文)
公用一个key,速度快,成本低 - 非对称加密 :两个密钥: 公钥(pub),私钥(pri)
HTTPS 的基本过程
- 使用对称密钥
(每个客户端的密钥都不相同,要求客户端在连接到服务器时,自己先生成一个密钥)
但是服务器如何拿到 客户端这个 key 呢?(直接发送黑客仍会截获)
- 使用非对称密钥