目录
一、构建HTTP请求
1.1构建GET请求
构建Get请求可以有以下方式:
- 地址栏输入URL
- html中的link,script,img,a
- form标签
- 点击收藏夹
<form action="https://www.baidu.com" method="get">
<input type="text" name="name">
<input type="submit" name="提交">
</form>
form 代码和 HTTP 请求之间的对应关系:
- form 的 action 属性对应 HTTP 请求的 URL
- form 的 method 属性对应 HTTP 请求的方法
- input 的 name 属性对应 query string 的 key
- input 的 内容 对应 query string 的 value
1.2 构建POST请求
将刚才代码form中method改为POST
<form action="https://www.baidu.com" method="post">
<input type="text" name="name">
<input type="submit" name="提交">
</form>
POST和GET请求还是比较相似的,主要有以下区别:
1.mthod从GET变成POST
2.数据从query string移动到了body中form表单只能构造GET和POST请求,无法构造PUT,DELETE,OPTIONS等方法的请求
二、ajax
前端处理浏览器地址栏能构造GET请求,form表单构造GET和POST之外,还可以通过ajax的方式来构造HTTP请求,功能更加强大
ajax:Asynchronous Javascript And XML, 一种 js 给服务器发送HTTP 请求的方式,这里是异步的,不需要刷新页面/页面跳转就可以进行数据传输
这就是一种典型应用场景。
如何使用ajax?
1.js提供了一组原生的ajax api,但是原生的api比较难用
2.jquery提供了ajax,是对原生api进行了封装,使用起来相对比较简单
我们首先引入jquery
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script>
$.ajax ({
type: 'get',
url: 'https://www.baidu.com/',
success: function(data) {
console.log(data);
}
});
</script>
jquery中,$是一个特殊的全局对象,jquery都api都是以$方式引入的,$.ajax只有一个参数,是一个js对象
此时代码执行,我们只能看到构造的请求,无法获取到正确的响应,因为百度的服务器并没有处理咱们的请求
ajax与form的区别?
1.ajax支持put,delete等方法
2.ajax可以灵活的设置header
3.ajax的body也是可以灵活设置的
三、Postman
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,经常用于接口测试
postman官网 :Download Postman | Get Started for Free
如果是第一次使用,先注册一个账户
这就是登录成功的界面
我们首先需要创建一个工作空间,用于测试用例以及将我们的测试数据保存到云端,即使我们切换电脑数据也不会丢失
我们每次请求数据后,可以按Save或者Ctrl + S将请求保存到云端
四、HTTPS是什么?
HTTPS:HTTP + 安全层(SSL),HTTPS也是应用层协议,在HTTP协议的基础上引入了一个加密层,因为HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况
五、运营商劫持
不知道大家有没有这种现象,想要下载一款软件的时候,在网页点击下载的时候并不是直接下载的该软件,而是某一款应用商城。
点击下载按钮,给服务器发送一个HTTP请求,获取到的HTTP响应其实就包含该软件的下载链接,运营商劫持之后,就发现这个请求是要下载该软件,那么就自己的把要交该用户的响应给篡改成"应用商城"的下载地址了
为什么运营商会劫持?
最主要的原因还是HTTP在互联网上是明文传输,让运营商有了可乘之机
HTTPS就是为了避免这种情况的发生,在HTTP的基础上进行了加密,进一步的来保证用户的信息安全
加密是什么?
加密:加密就是将铭文进行一系列变换,生成密文
解密:解密就是把密文在进行一系列变换,还原成明文
在这个加密和解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据称之为密钥
六、HTTPS工作过程
HTTPS在网络传输中不再直接传输明文了,而是加密之后的密文,HTTPS主要涉及到SSL部分,但SSL部分并不是只在HTTPS中使用,加密方式有很多种,但整体可以分为两大类:对称加密 和 非对称加密
对称加密
加密:明文 + key => 密文
解密:密文 + key => 明文
这里的key是同一把密钥,既可以用来加密,也可也用来解密,我们称之为对称密钥
既然是对称加密,那么客户端和服务器都需要密钥,那么是由客户端生成密钥还是由服务器生成密钥呢?
因为每个服务器对应很多客户端,每个客户端都有不同的密钥,所以我们这里是由客户端生成密钥,但是客户端虽然生成了,服务器还不知道该密钥,于是在传输数据之前需要先将密钥发送给服务器
当客户端生成密钥后,将密钥发送给服务器,但由于服务器并不知道密钥,于是这里的密钥只能进行明文传输,一明文这里的密钥就有可能被黑客给截获,那么后续的加密操作就形如虚设了。
因此,我们这里的密钥的传输必须进行加密传输,我们想要对密钥进行加密传输,就需要协商一个"密钥的密钥",以此循环都会面临该问题,此时的密钥使用对称加密的方式就行不通了。
因此我们就需要引入非对称加密了
非对称加密
非对称加密需要用到两个密钥,一个叫公钥,一个叫私钥,公钥和私钥是配对的,最大的缺点是运算速度非常慢,比非对称加密要慢很多。
明文 + 公钥 => 密文 使用公钥加密
密文 + 私钥 => 明文 使用私钥解密
这里的公钥和私钥可以交换位置,公钥是可以进行公开的。
服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥,此时客户端的公钥从服务器拿,黑客也能够知道公钥,但黑客不知道私钥,因为私钥是服务器私有的。
客户端使用私钥,来对对称密钥加密,传输给服务器,服务器就可以拿着自己的私钥对给密文进行解密获取到对称密钥,此时客户端就可以使用对称密钥对后续数据进行加密传输了。
为什么有了非对称加密,还要继续使用对称加密?
因为对称加密速度快,非对称加密速度慢,为了尽可能提高整体的速度,所以必须使用对称加密
但是即使这样加密之后还是会出现问题,会出现中间人攻击,因为黑客也可以获取到公钥
中间人攻击的主要是要让客户端能够辨别出来响应中的公钥是否是服务器真实的公钥,这里我们实际是引入一个证书,本质上是引入一个第三方的公证机构
证书
网站设立之初时,就需要取专门的认证机构去申请证书(提供网站的一些资质证明),如果审核通过之后,就会颁布一个证书,服务器生成的公钥也会在这个证书之中。
客户端在向服务器发送请求获取公钥的时候,就不是单单的获取一个公钥了,而是将整个证书都请求过来,客户端拿到证书之后,就可以对证书进行校验(这里可以通过验证,来判断证书是不是被篡改过的),如果发现证书是无效的,浏览器会直接弹窗警告。
客户端拿到证书就会对证书进行校验,证书上面有一个特殊的字段叫做证书的签名。
检验过程:
1.判断证书的有效期是否过期
2.判定证书的发布机构是否受信任(操作系统已经内置了受信任的证书发布机构)
3.验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.