JavaEE-HTTP协议完结认识HTTPS协议

news2024/12/28 10:57:36

目录

  • 回顾
  • 构造HTTP请求(客户端)
    • 基于 HTML和JS
      • 基于 form表单
      • 基于 ajax
    • 基于 Java
      • 基于socket
  • 认识HTTPS
  • 加密
    • 对称加密
    • 非对称加密

回顾

让我们回顾一下HTTP协议中的请求和响应

在这里插入图片描述

构造HTTP请求(客户端)

基于 HTML和JS

基于 form表单

核心HTML标签,就是form标签
form ( 表单 ) 是 HTML 中的一个常用标签 . 可以用于给服务器发送 GET 或者 POST 请求。

<form action="https://www.sogou.com/index.html" method="get"></form>

action:表示把请求提交给哪个服务器,这里是一个url
method:是按照GET来提交(参数放在 query string),还是POST来提交(参数在boby),这里method的取值,只能是get或者post(不区分大小写)

光有这一个form标签,还没法提交,也没啥东西可提交的,还需要搭配form里面的一些其他标签。

<form action="https://www.sogou.com/index.html" method="get">
        <input type="text" name="username">
        <input type="text" name="password">
</form>

此处的name是新介绍的属性,不是id,也不是class,这个name属性和样式无关,form表单给服务器提交的数据,本质上是键值对,此处的name属性在描述当前输入框对应的key是啥。
这里第一行key 就是“username”,value 就是用户在输入框输入的内容;第二行key 就是“password",value 就是用户在输入框输入的内容。

光有两个输入框,还不太够,还需要有一个”提交按钮“,来触发此处的HTTP请求。

<input type="submit" value="提交">

在这里插入图片描述
一点提交,我们就会发现会出现下面的结果:
在这里插入图片描述
接下来我们看post请求:

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

在这里插入图片描述
我们会发现没有username和password属性,我们可以通过抓包的方法来看
在这里插入图片描述
在这里插入图片描述
当前是把这样的请求直接提交给搜狗主页,搜狗并没有处理这样的参数~

基于 ajax

form表单这种方式,是一个更加原始的方式,使用form一定会涉及到“页面跳转”,浏览器需要加载出全新页面,这种事情是非法不科学的。
通过js代码,来构造HTTP请求,再通过js代码来处理这里的响应~并且把得到的一些数据给更新到页面上

Ajax的全称是Asynchronous JavaScript and XML。
Asynchronous这个词叫做异步,是不是感觉很像同步(synchronized)
在这里插入图片描述
ajax就是属于基于异步等待的方式进行的。
首先构造出一个HTTP请求,发给服务器.但是浏览器不确定服务器啥时候才有响应~于是就先不管了,浏览器里面就继续执行其他代码,等到服务器的响应回来之后,再由浏览器通知对应的JS代码,以回调函数的方式来处理代码。

基于jQuery中的ajax来演示相关代码:

  1. 先在搜索引擎中搜索 jquery cdn查询词
  2. 在结果中,找一个合适的cdn的url
  3. 打开对应的url,加载出jquery本体
  4. 复制粘贴到本地文件

使用jquery的ajax:$,这个$就是jquery中最核心的对象,jquery中的各种api,都是通过$来触发的~
通过 $ 对象来调用Ajax函数,参数只有一个但是是一个对象。

<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("获取到响应数据!");
            },
            error: function() {
                // error 也对应一个回调函数
                // 这个函数会在请求失败之后触发~
                // “异步”
                console.log("获取到响应失败!");
            }
        });
</script>

type表示http请求的方法;url对应http请求的url;注意这里ajax不仅仅支持get和post,也支持put,delete等其他方法。
在这里插入图片描述
这里失败的原因是:浏览器禁止ajax进行跨域访问,即跨越多个域名/服务器,即当前页面处在的浏览器是本地文件,页面中ajax请求的url域名是www.sogou.com,这样就触发了跨域操作。

如何实现不跨域呢?
当前页面处在的服务器, 就是在 www.sogou.com 这个服务器中;页面中再通过 ajax 请求 URL,域名为 www.sogou.com 这种就不算跨域。

基于 Java

基于socket

这种方法是完全可行的,但是在实际开发中用的不如上面的方法多~
按照HTTP请求的报文格式,构造出一个匹配的字符串,再写入socket即可。

认识HTTPS

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

由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改。
点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接;运营商劫持之后, 就发现这个请求是要下载天天动听, 那么就自动的把交给用户的响应给篡改成 “QQ浏览器” 的下载地址了。
在这里插入图片描述
即HTTPS 就是在 HTTP 的基础上进行了加密, 进一步的来保证用户的信息安全;

加密

加密就是把 明文 ( 要传输的信息 ) 进行一系列变换 , 生成 密文 。
解密就是把 密文 再进行一系列变换 , 还原成 明文。
在这个加密和解密的过程中 , 往往需要一个或者多个中间的数据 , 辅助进行这个过程 , 这样的数据称为 密钥.

在这里插入图片描述
HTTPS中引入的加密层,称为SLL/TLS。

对称加密

使用同一个密钥,既可以进行加密,也可以进行解密。
在这里插入图片描述
这里客户端和服务器持有同一个密钥,客户端传输的数据通过这个密钥对称加密,但是实际传输的是密文!
但是注意:这里如何保证客户端和服务器都持有同一个密钥,当一个服务器对应多个客户端的时候,如何处理?
在这里插入图片描述
既然需要是不同的密钥,就需要让服务器能够记录,不同的客户端的密钥都是什么。同时,也要保证客户端和服务器之间能够传递这个密钥。

因为需要不同的客户端有不同的密钥,要么是客户端主动生成一个密钥,告诉服务器,要么是服务器生成一个密钥告诉客户端。需要把密钥,通过网络进行传递的~
在这里插入图片描述
假如设备已经被黑客入侵了,如果密钥明文传输的话,也会被黑客拿到,那么后续传输数据,黑客就可以根据这个密钥来解密文件,黑客就能拿到数据了!
使用对此加密,最大的问题,在于说密钥能够传递过去,如果明文传递,是不行的,必须对这个密钥再进行加密~

解决问题关键,就需要引入,非对称加密~

非对称加密

非对称加密,有两个密钥,分别叫做公钥和私钥。
公钥,就是人人都能获取到的。
私钥,就是只有自己才知道~

就可以使用公钥来加密,使用私钥来解密。或者,使用私钥加密,使用公钥来解密。

在这里插入图片描述
上述过程看似很完美,其实还存在一个巨大的漏洞!!服务器要把自己的公钥返回给客户端
在这个操作中,就可能涉及到一个非常经典的”中间人攻击“。
下面是正常情况:
在这里插入图片描述
还可能出现下面这样的情况:
在这里插入图片描述
黑客自己也生成一对公钥私钥,拦截到服务器给客户端返回的公钥,用自己生成的公钥,替换之。
黑客拦截到对称密钥的密文之后,由于这个密文是使用 public key2 来进行加密的,因此黑客就可以使用 private key2 进行解密,黑客就拿到了对称密钥和密文888888,紧接着,黑客为了隐藏自己,把888888在使用之前从服务器拿到的 public key 进行加密得到了另外一个密文。

既然存在中间人攻击,如何解决这个问题?
关键要点,得让客户端能够确认,当前的公钥,确实是来自于服务器,而不是黑客伪造的~

因此,就需要引入一个第三方公信机构,来证明这个公钥是一个合法的公钥~

在这里插入图片描述
客户端如何知晓这个证书真伪?

  1. 证书上自身有一些校验机制
  2. 向公信机构进行求证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ5.0.0消息存储<五>_文件过期删除机制

目录 一、概览 二、过期文件删除机制 三、参考资料 一、概览 RocketMQ操作CommitLog、ConsumeQueue文件是基于内存映射机制并在启动时会加载commitlog、consumequeue目录下的所有文件&#xff0c;为了避免内存与磁盘的浪费&#xff0c;不可能将消息永久存储Broker服务器上&a…

2023/02/18 ES6数组的解读

1 扩展运算符 扩展运算符&#xff08;spread&#xff09;是三个点&#xff08;…&#xff09;. 它好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5该运算符主要用于…

比较全面的HTTP和TCP网络传输的单工、全双工和半双工

文章目录单工、全双工、半双工1. 单工2. 半双工3. 全双工HTTP协议的工作模式TCP协议的工作模式本文参考&#xff1a; 图解网络传输单工、半双工、全双工 - 知乎 (zhihu.com) 问&#xff1a;HTTP是单工的还是双工的还是半双工的 - 简书 (jianshu.com) 关于TCP全双工模式的解释_忙…

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——InputFormat数据输入

3.1.1切片与MapTask并行度决定机制 1、问题引出 MapTask的并行度决定Map阶段的任务处理并发度&#xff0c;进而影响到整个Job的处理速度。 思考&#xff1a;1G的数据&#xff0c;启动8个MapTask&#xff0c;可以提高集群的并发处理能力。那么1K的数据&#xff0c;也启动8个M…

华为OD机试 - 机器人走迷宫(JS)

机器人走迷宫 题目 房间有X*Y的方格组成&#xff0c;例如下图为6*4的大小。每一个放个以坐标(x,y)描述。 机器人固定从方格(0,0)出发&#xff0c;只能向东或者向北前进&#xff0c; 出口固定为房间的最东北角&#xff0c;如下图的方格(5,3)。 用例保证机器人可以从入口走到出…

算法:(十四)动态规划

文章目录14.1 单序列问题面试题88&#xff1a;爬楼梯的最少成本面试题89&#xff1a;偷盗房屋面试题90:环形偷盗房屋面试题91&#xff1a;粉刷房子面试题92&#xff1a;反转字符面试题93&#xff1a;最长斐波那契数列面试题94&#xff1a;最少回文分割14.2 双序列问题面试题95&…

2023美国大学生数学建模竞赛A题详细公式和代码分享

目录 2023美赛A题翻译 1.1 建立一个数学模型&#xff0c;预测一个植物群落在各种不规则的天气周期中如何随时间变化。包括本该降水充足的干旱时期。该模型应考虑到干旱周期中不同物种之间的相互作用。 1.2就植物群落与大环境的长期相互作用&#xff0c;探讨你能从你的模型中…

【Python从入门到进阶】8、Python的输入输出

接上篇《7、运算符》 上一篇我们学习了Python的运算符部分&#xff0c;包括算数运算符、赋值运算符、比较运算符、逻辑运算符等。本篇我们来学习Python的输入和输出相关内容。 一、输出 其实输出的含义就是在控制台里打印一些东西&#xff0c;我们在之前已经做过很多的“prin…

社招前端必会手写面试题集锦

查找字符串中出现最多的字符和个数 例: abbcccddddd -> 字符最多的是d&#xff0c;出现了5次 let str "abcabcabcbbccccc"; let num 0; let char ;// 使其按照一定的次序排列 str str.split().sort().join(); // "aaabbbbbcccccccc"// 定义正则表达…

IDEA插件安装慢、超时、不成功问题如何解决?

目录 一、打开国内插件的节点IP地址 二、修改本地hosts文件 三、刷新DNS缓存 一、打开国内插件的节点IP地址 国内插件的节点IP地址查询: http://tool.chinaz.com/speedtest/plugins.jetbrains.com 在下方的检测结果中&#xff0c;找到一个解析时间最短的IP地址&#xff0c;解…

流程引擎之Activiti简介

背景Activiti 是一个开源架构的工作流引擎&#xff0c;基于 bpmn2.0 标准进行流程定义&#xff0c;其前身是 jBPM&#xff0c;Activiti 相对于 jBPM 更轻量&#xff0c;更易上手&#xff0c;且天然集成了 Spring。2010年 jBPM 创始人 Tom Baeyens 离开 JBoss&#xff0c;随之加…

大数据之-Nifi-监控nifi处理数据的状态信息_处理数据的状态栏_组件统计_公告BUG信息---大数据之Nifi工作笔记0010

首先可以看到状态栏,可以提供活动现场的数量,排队统计信息,等等 可以看到在面板的最上面有一行状态栏,就是 就是具体的状态信息 然后组件统计就是具体的处理器的统计信息 可以看到这里pickup这个getfile处理器,可以看到in这里,说了文件的输入个数,以及大小 out是输出个数以及大…

Linux进程学习【二】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…

java黑马头条 day5自媒体文章审核 敏感词过滤算法DFA 集成RabbitMQ实现自动审核

自动审核流程介绍 做为内容类产品&#xff0c;内容安全非常重要&#xff0c;所以需要进行对自媒体用户发布的文章进行审核以后才能到app端展示给用户。2 WmNews 中status 代表自媒体文章的状态 status字段&#xff1a;0 草稿 1 待审核 2 审核失败 3 人工审核 4 人工审核通过 …

Mac上动态切换JDK

起因&#xff1a; 因为甲骨文的JDK8并没有适配Mac M1芯片&#xff0c;新版的17倒是有适配的&#xff0c;11这些不清楚。往常开发可以使用Zulu这些厂商提供的JDK8。 但是在本地起一些服务&#xff0c;例如Nacos时候&#xff0c;还是会出现不兼容导致起不来&#xff01;虽然Nac…

【网络原理6】数据链路层协议——以太网

数据链路层负责的是相邻两个网络节点之间的数据以帧为单位进行传输。 具体关于数据链路层的介绍&#xff0c;已经在这一篇文章当中提到了。 初识网络&#xff1a;IP、端口、网络协议、TCP-IP五层模型_革凡成圣211的博客-CSDN博客TCP/IP五层协议详解https://blog.csdn.net/weix…

Python每日一练(20230219)

目录 1. 循环随机取数组直到得出指定数字&#xff1f; 2. 旋转链表 3. 区间和的个数 1. 循环随机取数组直到得出指定数字&#xff1f; 举个例子&#xff1a; 随机数字范围&#xff1a;0~100 每组数字量&#xff1a;6&#xff08;s1,s2,s3,s4,s5,s6&#xff09; 第二轮开始随…

高级前端一面面试题集锦

详细说明 Event loop 众所周知 JS 是门非阻塞单线程语言&#xff0c;因为在最初 JS 就是为了和浏览器交互而诞生的。如果 JS 是门多线程的语言话&#xff0c;我们在多个线程中处理 DOM 就可能会发生问题&#xff08;一个线程中新加节点&#xff0c;另一个线程中删除节点&#…

[LeetCode周赛复盘] 第 98 场双周赛20230219

[LeetCode周赛复盘] 第 98 场双周赛20230219 一、本周周赛总结二、 [Easy] 6359. 替换一个数字后的最大差值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6361. 修改两个元素的最小分数1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6360. 最小无法得到的或值1. 题目描述2…

将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码

之前遇到过“镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for field “intensity“ 问题”&#xff0c; 当时确定了是镭神C32雷达缺少相应字段&#xff0c;并记录博客【学习记录】镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for fi…