【JavaEE】_构造HTTP请求与HTTPS

news2025/1/20 7:41:32

目录

1. 构造HTTP请求

1.1 form标签构造HTTP请求

1.1.1 form标签构造GET请求

1.1.2 form标签构造POST请求

1.2 通过ajax构造HTTP请求

1.3 form与ajax

1.4 使用ajax构造HTTP请求

2.HTTPS

2.1 对称加密

2.2 非对称加密

2.3 证书


1. 构造HTTP请求

1.1 form标签构造HTTP请求

1.1.1 form标签构造GET请求

试运行以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 表单标签,允许用户和服务器之间交互数据 -->
    <form action="https://www.sogou.com" method="get">
        <!-- 要求提交的数据以键值对形式进行组织 -->
        <input type="text" name="studentName">
        <!-- input type=submit,构造了一个特殊的提交按钮,value属性描述了按钮中的文本 -->
        <!-- 点击按钮就会该触发该form表单的提交操作,也就是构造http请求发送给服务器 -->
        <input type="submit" value="提交">
    </form>
</body>
</html>

运行结果为:

在输入框中输入zhangsan后点击提交,页面会跳转至sogou主页:

在fiddler中查看抓包结果详情,以及对应代码关系如下:

注:除了首行之外,其余部分都是浏览器自主添加的;

此时就已经把zhangsan的studentName提交至服务器上了,只是在此例中,sogou服务器并未作出处理,进行响应而已。

后续自己写服务器代码,就可以根据需要获取url中的query string,从而完成不同的功能;

1.1.2 form标签构造POST请求

类似于使用form标签构造GET请求,试运行以下代码:

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

在运行页面的输入框中输入lisi,同上例,页面跳转至搜狗主页。 

在fuddler中查看抓包详情,以及对应代码关系如下:

form标签只能构造GET和POST请求,无法构造PUT、DELETE、OPTIONS等方法的请求;

1.2 通过ajax构造HTTP请求

1. ajax全称Asynchronous Javascript And XML,即异步Javascript和XML,是一种通过JavaScript构造HTTP请求的方式,这种方式可以不需要刷新页面或页面跳转,就可以进行数据传输;

2. ajax的使用方法:

(1)js原生提供ajax的api,并不好用;

(2)jquery提供的ajax,API针对原生API的封装,使用更为便捷;(以此为例)

试运行以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 引入jquery -->
    <script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
    <script>
        $.ajax({
            type:'get',
            url:'https://www.sogou.com?studentName=wangwu',
            success:function(data){
                // data是响应的正文部分
                console.log("当服务器返回的响应到达浏览器后,浏览器触发该回调,通知到代码");
            }
        });
        console.log("浏览器立即往下执行后续代码");

    </script>
</body>
</html>

根据文档目录打开Google Chrome的console标签页,可见:

注:(1)jquery中,$是一个特殊的全局对象,jquery的API都是以$的方法的形式来引出的;

(2)ajax方法只有一个参数,这个参数是一个js对象,是用{}表示的一组键值对;

(3)success声明了一个回调函数,就会在服务器响应返回到浏览器的时候触发该回调,正是此处的回调体现了异步;

(4)此处执行该代码只能看见构造的请求,而无法获取正确的响应,是由于搜狗服务器并没有处理我们发出的请求,后续向自己的服务器发请求时自然可处理·,此处不再深究;

1.3 form与ajax

相比form,ajax功能更强大:

(1)支持PUT、DELETE等方法;

(2)ajax发送的请求可以灵活设置header;

(3)ajax发送的请求可以是body,也可以是灵活设置的;

1.4 使用ajax构造HTTP请求

除开发外,在测试过程中难免需要构造HTTP请求,可以编写代码实现,也可以使用第三方工具,如postman就是很常见的工具;

其简单用法如下:

2.HTTPS

1. HTTPS也是一个应用层协议,是在HTTP的基础上引入了一个加密层,即:HTTP+安全层(SSL),SSL是一个用来加密的协议,后来也改名为TLS;

2. 网络上如果明文传输数据是非常危险的,此时就需要进行加密,有对称加密与非对称加密两种加密方式;

2.1 对称加密

加密过程:a(明文)+ key = b(密文)  

解密过程:b(密文)+ key = a(明文)

注:(1)加密与解密使用的是同一个密钥

(2)假设密钥由客户端生成,在与客户端首次商讨确定时,必须将密钥明文传输,此时一旦被黑客截获则加密无意义。此时需要对密钥也进行加密传输,但如果密钥也采用对称加密,则逻辑死循环,此时就需要使用非对称加密;

2.2 非对称加密

1. 客户端与服务器生成一对秘钥:公钥与私钥:

使用公钥加密:明文+公钥=密文;

使用私钥解密:密文+私钥=明文;

(公钥与私钥也可以调换使用)

2. 服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥。

(此时客户端的公钥从服务器获取的,故而黑客也能获取到公钥)

客户端使用公钥,来对对称密钥进行加密,传输给服务器,服务器就可以使用私钥来解密,得到对称密钥,客户端就可以安全获取请求;

注:(1)非对称加密只用于传输密钥,一旦对称密钥到达服务器之后,后续的传输都使用对称密钥加密;

(2)对称加密的速度快于非对称加密,在设计请求时,需要考虑整体的效率;

3. 但是这种加密方式也有可能导致中间人攻击,如果黑客攻击路由器将自己的公钥public2传递给客户端,客户端用public2对对称密钥key进行加密,此时黑客再用自己的private2解密,即可获取到对称密钥key,此时黑客再使用服务器的public1公钥对key重新加密,发送给服务器,服务器使用私钥private1进行解密,也获取到了对称密钥key,后续交互便都使用该对称密钥进行加密,则黑客可以获取到后续交互的所有内容及其含义,过程简图如下:

2.3 证书

1. 解决中间人攻击的关键在于令客户端可以识别返回的公钥是服务器的还是黑客的,故而引入证书,即第三方的公证机构;

2. 服务器(网站)在设立之初就要去专门的认证机构,提供一些资质,申请证书。审核通过就可以获取证书。服务器生成的公钥也包含在这个证书之中。

客户端向服务器请求公钥时,就不只是请求一个公钥,而是请求整个证书

客户端获取到证书后就可以对证书进行校验,如果发现证书无效,浏览器就会弹窗警告;

3.证书上带有一个特定的加密字段,叫做证书的签名。

客户端可以使用认证机构提供的公钥进行解密,解密后得到的结果是一个哈希值1,是根据证书的其他字段综合计算的结果;

客户端使用同样的哈希算法计算出一个哈希值2,判断二者是否相等,相同则证书未被篡改过。

注:黑客是无法篡改证书的,

第一:一旦替换了公钥,则客户端算的哈希值2就与签名解密的哈希值1不等,

第二:黑客无法获取认证机构的私钥,即使黑客自己算好了篡改后的哈希值,也无法加密生成签名;

4. 认证机构也有一组公钥私钥,私钥用来加密哈希值得到签名,公钥供客户端解密签名使用

即:所有人可以获取到认证机构的公钥解密签名,但是篡改数据后,除了认证机构本身,其他人无法再生成签名;

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

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

相关文章

软考高项-第五章:信息系统工程

重点知识点&#xff1a; 以上总结&#xff0c;仅供参考。

MacBook内存空间不够该怎么办?

随着使用时间的增长&#xff0c;我们会发现Macbook电脑的存储空间越来越少&#xff0c;这时候我们就需要对Mac电脑进行清理&#xff0c;以释放更多的存储空间。那么&#xff0c;Mac空间不足怎么解决呢&#xff1f; 1.清理垃圾文件 Mac空间不足怎么解决&#xff1f;首先要做的就…

C#和Excel文件的读写交互

C#和Excel文件的读写交互是一项重要的技术&#xff0c;在许多应用程序开发中起着关键作用。C#作为一种现代的面向编程语言&#xff0c;提供了丰富的库和功能&#xff0c;使开发人员能够轻松地处理Excel文件&#xff0c;并进行数据的读取和写入。 首先&#xff0c;让我们了解一下…

matlab矩阵计算

1.a&#xff08;10,6&#xff09;&#xff0c;b&#xff08;6,5&#xff09;&#xff0c;那么a*b得到的是10行5列。第一个的数组的行数等于第二个数组的列数。得到的矩阵是第一个矩阵的行数和第二个矩阵的列数。 2.矩阵的除法&#xff0c;符号为“\”&#xff0c;这时就需要前一…

单调栈介绍和使用

前言&#xff1a; 今天来讲一下单调栈&#xff0c;它定义是非常简单的&#xff0c;首先栈是一种先进后出、后进先出的数据结构。而单调栈&#xff0c;就是说栈中的元素是严格单调递增或者递减的。它主要用来解决的问题&#xff1a;找到前一个或者后一个的最大或者最小元素。属…

力扣 -- 446. 等差数列划分 II - 子序列

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int>& nums) {int nnums.size();//把元素和它对应的所有下标绑定存放到哈希表中unordered_map<double,vector<int>> hash;for(int i0;i<n;…

Day-08 基于 Docker安装 Nginx 镜像-反向代理

此时静态页面网站已经部署上了&#xff0c;但是还是会显示一个端口8080出来&#xff0c;就十分不美观&#xff01; ps: 怎么把端口干掉呢&#xff1f;换成XXXXX.com/demo1 或者 XXXXX.com/demo2这种效果呢&#xff1f; eg: 可以使用 Nginx的反向代理实现&#xff01; 1.开始反…

【算法速查】万字图解带你快速入门八大排序(下)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;首先在这里祝大家中秋国庆双节同乐&#xff01;&#xff01;抓住假期的小尾巴&#xff0c;今天来把算法速查的八大排序的后续写完&#xff0c;当…

Go 复合数据类型之结构体与自定义类型

Go 复合数据类型之结构体与自定义类型 文章目录 Go 复合数据类型之结构体与自定义类型一、类型别名和自定义类型1.1 类型定义&#xff08;Type Definition&#xff09;简单示例 1.2 类型别名简单示例 1.3 类型定义和类型别名的区别 二、结构体2.1 结构体介绍2.2 结构体的定义2.…

MySQL视图、用户管理

目录 视图概念和操作 视图基本操作 视图规则和限制 用户管理 用户 视图概念和操作 什么是视图&#xff1f; 视图是一个虚拟表&#xff0c;由一个或多个基本表的查询结果组成&#xff08;视图是存储在数据库中的查询的SQL 语句&#xff0c;不在数据库中以存储的数据值集形式…

VC6 MFC Dialog as apllication 编程

MFC框架虽然古老&#xff0c;但编程还是方便多了&#xff0c;在操控界面控件的基础上&#xff0c;平时在Console模式习练的类可以融入到MFC中&#xff0c;开发应用程序还是比较方便的。下图是习练程序的界面。 说明&#xff1a; 一个EDIT框&#xff0c;一个Label框&#xff1b…

Linux进程相关管理(ps、top、kill)

目录 一、概念 二、查看进程 1、ps命令查看进程 1&#xff09;ps显示某个时间点的程序运行情况 2&#xff09;查看指定的进程信息 2、top命令查看进程 1&#xff09;信息统计区&#xff1a; 2&#xff09;进程信息区 3&#xff09;交互式命令 三、信号控制进程 四、…

假期AI新闻热点:亚运会Al技术亮点;微软GPT-4V论文精读;Perplexity推出pplx-api;DALL-E 3多渠道测评 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f525; 科技感拉满&#xff0c;第19届杭州亚运会中的Al技术亮点 八年筹备&#xff0c;杭州第19届亚运会开幕式于9月23日晚隆重举行&#xff0…

口袋参谋:如何有效地监测你的竞争对手!

​在淘宝天猫上开店&#xff0c;竞争是非常大的&#xff0c;那么就会出现许多同样的产品&#xff0c;如果想要在竞争中胜出&#xff0c;就需要多去研究同行的数据&#xff0c;知己知彼&#xff0c;百战百胜。 掌握竞争对手数据目的主要是有2个&#xff1a; 1、掌握对手是怎么起…

【二叉树】的实现

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

竞赛选题 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

中断:ZYNQ

整个中断系统架构中&#xff0c;只包含以下三种中断&#xff1a;  软件生成中断(Software Generated Interrupts&#xff0c;SGI)  私有外设中断(Private Peripheral Interrupts&#xff0c;PPI)  共享外设中断(Shared Peripheral Interrupts&#xff0c;SPI) 每种中断…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署DjangoBlog个人博客系统

华为云云耀云服务器L实例评测&#xff5c;云耀云服务器L实例部署DjangoBlog个人博客系统 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、DjangoBlog介绍2.1 DjangoBlog介绍2.2 DjangoBlog特点 三、本次实践介绍3.1 本次实践简介3.2 本次环…

java socket实现代理Android App

实现逻辑就是转发请求和响应。 核心代码 // 启动代理服务器private void startProxyServer() {new Thread(new ProxyServer()).start();}// 代理服务器static class ProxyServer implements Runnable {Overridepublic void run() {try {// 监听指定的端口int port 8098; //一…

AutoGen - 多个Agent开发LLM应用的框架

文章目录 关于安装使用关于 Enable Next-Gen Large Language Model Applications 用多个Agent开发LLM应用的框架,这些agent可相互交流以解决任务。 官网:https://microsoft.github.io/autogen/github : http://github.com/microsoft/autogendiscord : https://discord.com/i…