HTTP协议【下】

本文探讨了如何构造HTTP请求,包括基于form表单的GET和POST方法,以及使用Ajax进行异步数据交互。重点介绍了HTTPS的安全机制,包括对称加密与非对称加密的应用,以及证书在确保数据安全中的作用。同时揭示了HTTPS抓包问题及跨域限制,并讨论了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造HTTP请求

基于form表单

1.方法是GET

<body>
    <form action="https://www.sogou.com/"  method="get">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="提交">
    </form>
    
</body>

在这里插入图片描述

在这里插入图片描述

这里是引用
2.方法是POST

<body>
    <form action="https://www.sogou.com/"  method="post">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="提交">
    </form>
    
</body>

执行结果:这里是引用

通过Fiddler抓包工具,可以看到
在这里插入图片描述
在这里插入图片描述

基于ajax

form表单这种方式,是一个更原始更古老的方式,使用form一定会涉及到“页面跳转”。随着前端页面越来越复杂,就希望,能够让页面不去整个全部加载,而是只加载其中需要变化的某个小部分。此时,就可以使用ajax( Asynchronous Javascript And XML,)了。

Asynchronous: 异步

例如:我去吃饭
1.同步阻塞等待
我就一直蹲在前台,盯着后厨做饭,直到饭做好,我自己端走。
2.同步非阻塞等待
我在前台这看一眼,发现饭没做好,我出去溜达一圈,过一会又来到前台这看一眼,发现饭没做好,我就去玩会手机,经过若干次之后,我发现饭做好了,自己端走
3.异步等待
我就直接啥都不管,该干啥干啥。

同步和异步之间的区别,最主要是看这个结果,是调用者主动关注,还是被调用者来给调用者通知

通过JS来构造HTTP请求,在通过JS代码来处理这里的响应,并且把得到的一些数据给更新到页面上。
ajax就是基于异步等待的方式来进行的。首先构造出一个HTTP请求,发给服务器,但是浏览器不确定服务器啥时候才有响应,于是浏览器就先不管了,浏览器继续执行其他的代码,等到服务器的响应回来了之后,在有浏览器通知对应的JS代码,以回调函数的方式来处理响应。
基于jQuery中的ajax来演示相关代码
引入jquery:
(1)先在搜索引擎中搜索jquery.cdn查询词
(2)在结果中,找到合适的cdn的URL
(3)打开对应的URL,加载出jquery本体
(4)复制粘贴内容到本地文件

<script src="jquery.js"></script>
    <script>
        $.ajax({
            type:'get',
            url:'http://www.sogou.com/index.html',
            success:function(body){
                //success对应一个回调函数
                //这个函数会在正确获取到HTTP响应之后,来调用
                //这就体现出来了"异步"
                //回调函数的参数,就是HTTP响应的body部分
                console.log("获取到响应数据"+body);
                
            },
            error:function(){
                //error也对应一个回调函数
                //这个函数会在请求失败之后触发
                //也体现了“异步”
                console.log("获取响应失败");
                
            }
        });
    </script>

在这里插入图片描述

执行效果
在这里插入图片描述
刚才ajax请求,通过抓包看到,响应里面是200 OK,并且body也是html。
在这里插入图片描述
但是浏览器仍然认为这是一个“出错”的请求。

出现这个报错原因,是浏览器禁止ajax进行跨域访问。

当前页面处在的服务器,是本地文件,页面中的ajax请求的URL,域名是www.sogou.com,这样就触发了跨域操作。
啥样的不算跨域?
当前页面处在的服务器,就是在www.sogou.com中,页面中再通过ajax,请求URL,域名为www.sogou.com,这种就不算跨域。
我们也是有办法绕过这个限制的,如果对方服务器返回的响应中带有相关的响应头,允许跨域操作,就是可以正常被浏览器显示的。

因此,当前构造的ajax请求是无法被正确处理的。啥时候才能正确处理,就需要自己有一个服务器,让页面和ajax的地址都是这一个服务器就可以了。

HTTPS

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层。
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.

加密

之前的HTTP是明文传输,传输的数据,是容易被获取,也容易被篡改。
引入HTTPS,对数据加密,也就能更好的保护数据安全。
1.明文:要传输的原始的信息
2.密文:及时被别人获到了,拿着密文,也看不出啥问题
3.秘钥:把明文转成密文,或者把密文还原成明文。

加密之后,也不是就绝对安全,只是说破解起来计算量很大,成本高。只要破解成本高于数据本身的价值,就是安全的。

HTTPS的工作原理

HTTPS中引入的加密层,称为SSL/TLS
在SSL里面,涉及到的加密操作,其实主要有两种方式。

对称加密

使用同一个密钥,既可以进行加密,也可以进行解密。
在这里插入图片描述
对称加密,最大的问题,在于说密钥得能够传递过去,如果是明文传递,是不行的,必须针对这个密钥在加密。

非对称加密

非对称加密,有两个密钥,公钥和私钥。
公钥,人人都能获取到,私钥只有自己才知道。
基于非对称加密,就可以让服务器自己生成一对公钥和私钥,公钥发出去(人人都能拿到),私钥自己保存。
客户端生成一个对称密钥,客户端就可以使用服务器的公钥,对对称密钥进行加密,然后把数据传给服务器,服务器在通过私钥进行解密。
在这里插入图片描述

为啥不直接使用非对称加密?
实际实现中,对称加密的计算开销 << 非对称加密
如果只是少来少去的用这个非对称加密,成本还好,如果所有的数据都使用非对称加密,成本很大。

上述操作看起来非常完美了,但是还存在一个严重的漏洞,服务器要把自己的公钥返回给客户端,在这个操作中,就可能会涉及到一个非常经典的“中间人攻击”。
在这里插入图片描述

证书

既然存在中间人攻击,如何解决?
关键要点,得让客户端确认当前的公钥,确实是来自服务器,还是由黑客伪造的。
需要引入一个第三方公信机构,来证明这个公钥是一个合法的公钥。
在这里插入图片描述

如果每次都访问这个公信机构来求证,会很麻烦,实际上,客户端本身就会包含一些公信机构的信息(内置在操作系统里),不需要通过服务器网络请求,直接本地就能进行认证。
以上描述的东西都包含在SSL里,不仅仅是应用于HTTPS,很多其他地方也会用到SSL。
整个的过程,与其说是防止数据被拦截,不如说是防止数据被篡改。
既然HTTP数据已经经过了加密,为啥Fiddler仍然能抓到并且解析HTTPS里的数据呢?
之所以Fiddler能抓包,是和之前安装好Fiddler之后,第一次启用HTTPS功能的时候,弹出的对话框密切相关。这里的点击“是”操作,其实就是让操作系统能够信任Fidler提供的证书。相当于是给Fiddler授权了,允许Fiddler进行“中间人攻击”。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值