【JavaEE】_构造HTTP请求与HTTPS

目录

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.xdnf.cn/news/150088.html

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

相关文章

idea插件(free mybatis plugin)

安装&#xff1a; 由于我用的idea版本是2023的&#xff0c;所以搜出来的是Free MyBatis Tool,和Free MyBatis plugin是一样的 主要功能&#xff1a; 生成mapper xml文件 快速从代码跳转到mapper及从mapper返回代码 mybatis自动补全及语法错误提示 集成mybatis generator gui…

Spring Boot中的@Controller使用教程

一 Controller使用方法&#xff0c;如下所示&#xff1a; Controller是SpringBoot里最基本的组件&#xff0c;他的作用是把用户提交来的请求通过对URL的匹配&#xff0c;分配个不同的接收器&#xff0c;再进行处理&#xff0c;然后向用户返回结果。下面通过本文给大家介绍Spr…

JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域

文章目录 前言 1&#xff1a;什么叫作用域 一&#xff1a;全局作用域 1&#xff1a;全局变量的声明 2&#xff1a;变量声明和使用的顺序 3&#xff1a;方法声明和使用的顺序 前言 1&#xff1a;什么叫作用域 可以起作用的范围 function fun(){var a 1; } fun();consol…

Linux YUM源(本地/网络源)配置详解

目录 一、挂载 二、实现思路 三、建立本地源 配置详解&#xff1a; 四、建立网络源 配置详解&#xff1a; 五、验证 一、挂载 ——将光盘挂载到 /mnt ——挂载光盘时要保证虚拟机光盘处于连接状态 命令&#xff1a;[rootlocalhost mnt]# mount /dev/sr0 /mnt # 此时还…

MongoDB数据库网站网页实例-编程语言Python+Django

程序示例精选 PythonDjangoMongoDB数据库网站网页实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoMongoDB数据库网站网页实例》编写代码&#xff0c;代码整洁&#xff0c;…

海信电视U8发布,一场针对画质的“定向跨越”

作者 | 曾响铃 文 | 响铃说 最近在重温《西游记》时&#xff0c;我才发现“灵性”这个东西有多讨喜。 在灵台方寸山&#xff0c;孙悟空头上被铛铛铛敲了三下&#xff0c;就悟出了师傅要为其深夜传授妙法&#xff0c;而这样的“感知”和“觉悟”&#xff0c;却在进修了那么多…

次方计数的拆贡献法(考虑组合意义)+限定类问题善用值域与位置进行ds:1006T3

对于多次方的计数问题可以考虑拆贡献。 题目问 ∣ S ∣ 3 |S|^3 ∣S∣3&#xff0c; ∣ S ∣ |S| ∣S∣ 表示选的点数。相当于在 ∣ S ∣ |S| ∣S∣ 中选了3次&#xff0c;也就是选了3个可相同的点。 先考虑3个不相同点的贡献&#xff0c;对应任意3个点&#xff0c;必然会对…

Flow Chart 的中文意思是什么?请说出自然界中河流的三种流动方式。事件驱动是什么?

目录 Flow Chart 的中文意思是什么? 请说出自然界中河流的三种流动方式。 事件驱动是什么? 请介绍一下 亚特兰大这座城市 Flow Chart 的中文意思是什么? 流程图 请说出自然界中河流的三种流动方式。 自然界中的河流可以以多种不同的方式流动&#xff0c;以下是其中三…

在Linux中软链接和硬链接的区别是什么?

2023年10月6日&#xff0c;周五晚上 目录 软链接(SymbolicLink):硬链接(HardLink):区别: 软链接(SymbolicLink): 软链接本身只是一个指向其他文件或目录的指针,不占用任何磁盘空间。软链接的修改或删除不会影响原文件。软链接可以指向不同文件系统中的文件。 硬链接(HardLink…

c++运算符重载实现

#include <iostream> #include <cstring> using namespace std; class myString { private:char *str;int size; public://无参构造myString():size(10){str new char[size]; //构造出一个长度为10的字符串strcpy(str,""); //赋值为空串}//有…

微信小程序开发缺少中间证书问题(腾讯云、阿里云等做服务器)

项目使用nginx做负载均衡后&#xff0c;不再采用原来直接用jar包的方式直接开启对应端口&#xff0c;所以需要重新从云服务器上下载证书&#xff0c;写入到Nginx读取的证书路径上即可。

stm32之HAL库操作PAJ75620

一、模块简介 手势模块PAJ7620主要利用IIC或SPI协议来实现数据的传输&#xff0c;本实验用的模块是以IIC来进行信息传输。支持电压从2.8v到3.6v, 正常可以选择3.3v。检测的距离从5到15cm, 可以检测9种手势&#xff0c;包括 右&#xff1a;编码为 0x01左&#xff1a;编码为 0x0…

[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除git 通过githack 获取index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i, $_GET[exp])) {if(; preg_replace(/[a-z,_]\(…

redis实战-实现用户签到UV统计

BitMap功能演示 我们针对签到功能完全可以通过mysql来完成&#xff0c;比如说以下这张表 用户一次签到&#xff0c;就是一条记录&#xff0c;假如有1000万用户&#xff0c;平均每人每年签到次数为10次&#xff0c;则这张表一年的数据量为 1亿条 每签到一次需要使用&#xff08…

支付环境安全漏洞介绍

1、平台支付逻辑全流程分析 2、平台支付漏洞如何利用&#xff1f;买东西还送钱&#xff1f; 3、BURP抓包分析修改支付金额&#xff0c;伪造交易状态&#xff1f; 4、修改购物车参数实现底价购买商品 5、SRC、CTF、HW项目月入10W副业之路 6、如何构建最适合自己的网安学习路线 1…

ArcGIS Engine:鹰眼图的拓展功能-点击和矩形+坐标状态栏

目录 01 前言 02 鹰眼图的控制功能 03 显示当前鼠标的地理坐标 01 前言 说是拓展&#xff0c;不过是忘记了实验还有附加实验.这里补上. 前文不再赘述,上一节查看&#xff1a;ArcGIS Engine&#xff1a;视图菜单的创建和鹰眼图的实现_炒茄子的博客-CSDN博客 这里加上三个功能…

elementui修改message消息提示颜色

/* el弹出框样式 */ .el-message {top: 80px !important;border: 0; }.el-message * {color: var(--white) !important;font-weight: 600; }.el-message--success {background: var(--themeBackground); }.el-message--warning {background: var(--gradientBG); }.el-message--…

最强中间件!Kafka快速入门(Kafka理论+SpringBoot集成Kafka实践)

自媒体文章上下架 需求分析 媒体端下架文章同时app端也下架文章的实现可以通过feign去调用&#xff0c;但这种实现耦合度太高&#xff0c;这里使用MQ进行解耦 自媒体端一旦上下架文章就发送消息给MQ&#xff0c;文章微服务在去读取消息根据消息内容上下架文章 MQ还可以流量削…

【16】c++设计模式——>建造者(生成器)模式

什么是建造者模式? 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许你构造复杂对象步骤分解。你可以不同的步骤中使用不同的方式创建对象&#xff0c;且对象的创建与表示是分离的。这样&#xff0c;同样的构建过程可以创建不同的表…

黑马mysql教程笔记(mysql8教程)基础篇——数据库相关概念、mysql安装及卸载、数据模型、SQL通用语法及分类(DDL、DML、DQL、DCL)

参考文章1&#xff1a;https://www.bilibili.com/video/BV1Kr4y1i7ru/ 参考文章2&#xff1a;https://dhc.pythonanywhere.com/article/public/1/ 文章目录 基础篇数据库相关概念&#xff08;数据库DataBase&#xff08;DB&#xff09;、数据库管理系统DataBase Management Sy…