【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.mzph.cn/news/95913.shtml

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

相关文章

NPDP产品经理知识(产品创新种的市场调研)

1. 复习产品设计与开发工具 创意生成&#xff1a; scamper也叫蹦蹦法 心智图就是思维导图&#xff1a;mindmaping 原型法--故事板&#xff1a;创意生成的时候做的 人种学--民族志 六顶思考帽&#xff1a;白色红色黑色蓝色。。。 概念设计&#xff1a; AOMI&#xff1a;卡…

Hive【Hive(六)窗口函数】

窗口函数&#xff08;window functions&#xff09; 概述 定义 窗口函数能够为每行数据划分 一个窗口&#xff0c;然后对窗口范围内的数据进行计算&#xff0c;最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…

最全MacBook选购指南 | 看完你就知道怎么买

最全MacBook选购指南 | 看完你就知道怎么买 作为MacBook的老用户大大小小的型号也都用了不少 那这么多台MacBook到底怎么选呢&#x1f4a1; . ☑️M1和Intel的MacBook有什么差别呢&#xff1f; 下半年苹果发布的两款MacBook都是苹果自研的芯片M1。在此之前苹果一直用的都是Inte…

ESP32设备驱动-I2C-LCD1602显示屏驱动

I2C-LCD1602显示屏驱动 1、LCD1602介绍 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 通过前面的实例我们知道,并口方式…

asp.net班级管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net班级管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 asp.net班级管理系统 二、功能介绍 1…

国庆作业 day 2

select实现服务器并发 #include<myhead.h> #define ERR_MSG(msg) do{\fprintf(stderr, "__%d__:", __LINE__); \perror(msg);\ }while(0)#define PORT 8888 //端口号&#xff0c;范围1024~49151 #define IP "192.168.0.103" //本…

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,""); //赋值为空串}//有…

基于transformer的心脑血管心脏病疾病预测

视频讲解:基于transformer的心脑血管疾病预测 完整数据代码分享_哔哩哔哩_bilibili 数据展示: 完整代码: # pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ # pip install optuna -i https://pypi.tuna.tsinghua.edu.cn/simple/ import numpy as np …

硬件知识:U盘相关知识介绍,值得收藏

目录 什么是U盘&#xff1f; U盘根据结构有哪几种&#xff1f; 根据U盘的存储介质、外形、功能分类有哪几种&#xff1f; 什么是U盘&#xff1f; U盘&#xff0c;全称为USB闪存盘&#xff0c;是一种以闪存芯片作为数据存储介质的移动存储设备。U盘的历史可以追溯到1998年&am…

优化方法的应用(optimtool.example)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2优化方法的应用&#xff08;optimtool.example&#xff09; import optimtool.example as oeLasso问题&#xff08;Lasso&#xff09; oe.Lasso.[函数名]([矩阵A], [矩阵b], [因…

Spring基础以及核心概念(IoC和DIQ)

1.Spring是什么 Spring是包含了众多工具方法的IoC容器 2.loC&#xff08;Inversion of Control &#xff09;是什么 IoC:控制反转,Spring是一个控制反转容器(控制反转对象的生命周期) Spring是一个loC容器&#xff0c;我们之前学过的List/Map就是数据存储的容器&#xff0c;to…

搭建在线python运行环境

常遇到需要一个小工具&#xff0c;比如生成作息时间表&#xff0c;今天就搭建一个可在线使用的python运行环境 当然也可以交给ChatGPT完成 1、安装canda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.03-Linux-x86_64.shyum install -y bzi…

c#设计模式-结构型模式 之 装饰者模式

&#x1f680;介绍 在装饰者模式中&#xff0c;装饰者类通常对原始类的功能进行增强或减弱。这种模式是在不必改变原始类的情况下&#xff0c;动态地扩展一个对象的功能。这种类型的设计模式属于结构型模式&#xff0c;因为这种模式涉及到两个类型之间的关系&#xff0c;这两个…

时序预测 | MATLAB实现EMD-iCHOA+GRU基于经验模态分解-改进黑猩猩算法优化门控循环单元的时间序列预测

时序预测 | MATLAB实现EMD-iCHOAGRU基于经验模态分解-改进黑猩猩算法优化门控循环单元的时间序列预测 目录 时序预测 | MATLAB实现EMD-iCHOAGRU基于经验模态分解-改进黑猩猩算法优化门控循环单元的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 EMD-iCHOAGR…

【C语言】利用数组处理批量数据(字符数组)

前言:前面已经介绍了&#xff0c;字符数据是以字符的ASCII代码存储在存储单元中的&#xff0c;一般占一个字节。由于ASCII代码也属于整数形式&#xff0c;因此在C99标准中&#xff0c;把字符类型归纳为整型类型中的一种。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

(32)测距仪(声纳、激光雷达、深度摄影机)

文章目录 前言 32.1 单向测距仪 32.2 全向性近距离测距仪 32.3 基于视觉的传感器 前言 旋翼飞机/固定翼/无人车支持多种不同的测距仪&#xff0c;包括激光雷达&#xff08;使用激光或红外线光束进行距离测量&#xff09;、360 度激光雷达&#xff08;可探测多个方向的障碍…

Java中阻塞队列原理、特点、适用场景

文章目录 阻塞队列对比、总览阻塞队列本质思想主要队列讲解ArrayBlockingQueueLinkedBlockingQueueSynchronousQueueLinkedTransferQueuePriorityBlockingQueueDelayQueueLinkedBlockingDeque 阻塞队列对比、总览 阻塞队列本质思想 阻塞队列都是线程安全的队列. 其最主要的功能…

MyCat安装文档

JDK安装 JDK具体安装步骤如下&#xff1a; 1. 上传安装包 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 由于上述在进行文件上传时&#xff0c;选择的上传目录为根目录 /&#xff0c;上传完毕后&#xff0c;我们执行指令 cd / 切换到根目录下&#xff0c;查…

基于引力搜索优化的BP神经网络(分类应用) - 附代码

基于引力搜索优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于引力搜索优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.引力搜索优化BP神经网络3.1 BP神经网络参数设置3.2 引力搜索算法应用 4.测试结果…

【进阶C语言】排序函数(qsort)与模拟实现(回调函数的实例)

本章大致内容目录&#xff1a; 1.认识回调函数 2.排序函数qsort 3.模拟实现qsort 回调函数为C语言重要知识点&#xff0c;以函数指针为主要知识&#xff1b;下面介绍回调函数的定义、回调函数的库函数举例即库函数模拟实现。 一、回调函数 1.回调函数定义 回调函数就是一…