【Java EE】-HTTP请求构造以及HTTPS的加密流程

news2024/9/26 1:17:54

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【JavaEE】
分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》

主要内容:构造http请求,不需要写代码直接发送http请求:地址栏输入地址,html中 img标签,script标签,link标签,a标签;需要写代码实现http请求:使用form表单,使用jquery封装后的ajax,通过java socket构造http请求,使用第三方工具postman。http加密变成https,tls加密的流程,对称加密,非对称加密,证书,TLS握手过程。

在这里插入图片描述

文章目录

  • 一、构造HTTP请求
    • 1、form表单
    • 2、使用jQuery封装ajax后提供的api
    • 3、通过 Java socket 构造 HTTP 请求
    • 4、第三方工具:postman
  • 二、HTTPS
    • 1、HTTP和HTTPS的区别
    • 2、SSL/TLS加密流程
      • 2.1、对称加密
      • 2.2、非对称加密
      • 2.3、证书
      • 2.4、TLS握手过程

一、构造HTTP请求

不需要写代码直接发送http请求的方法:
1> 在浏览器地址栏输入url,回车
2> 在html中的标签 link script img a等

下面是需要写代码来完成http请求的方式:

1、form表单

<!-- 构造GET或POST请求 -->
<form action="http://abcdef.com/myPath" method="GET"> <!--或者post-->
    <input type="text" name="userId">
    <input type="text" name="classId">
    <input type="submit" value="提交">
</form>

2、使用jQuery封装ajax后提供的api

ajax的全称是 Asynchronous JavaScript and XML,实现异步处理,synchronous是同步。
同步请求时,浏览器需要等待收到响应才能继续执行下面的内容,而异步在发送请求后可以直接往下执行,等响应来了,再通过触发代码执行特定的代码。
实现异步一般需要多线程/IO多路复用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 先引入jquery -->
    <script src="./blog/js/jquery.min.js"></script>
    <script>
        // jquery中$是一个全局对象,jQuery中的api都是以$的方式引出的,只有一个参数,是一个js对象,就是{}表示的键值对
        $.ajax(
            {
                type: 'get',
                url: 'http://www.baidu.com/?studentName=lihua&password=123',
                // 此处success声明了一个回调函数,当服务器响应给浏览器时,就会执行这个回调函数,同时正是这个回调实现了异步
                success: function(data){
                    console.log("浏览器收到服务器的响应, 调用success函数");
                }
            }
        );
        console.log("发送请求后,浏览器立即执行后续代码");
    </script>
</body>
</html>

在这里插入图片描述

  • 从上图中发现,是先执行回调函数下面的代码,浏览器收到服务器发送的响应后,才触发执行的success方法。体现了异步的处理方式。
  • 与form表单相比,ajax功能更强
    1> 支持put,delete等方法
    2> ajax发送的请求可以根据需求,灵活设置 header
    3> ajax 发送的请求的 body也是可以灵活设置的。

3、通过 Java socket 构造 HTTP 请求

所谓的 “发送 HTTP 请求”, 本质上就是按照 HTTP 的格式往 TCP Socket 中写入一个字符串.
所谓的 “接受 HTTP 响应”, 本质上就是从 TCP Socket 中读取一个字符串, 再按照 HTTP 的格式来解析.
我们基于 Socket 的知识, 完全可以构造出一个简单的 HTTP 客户端程序, 用来发送各种类型的 HTTP 请求.

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class HttpClient {
    private Socket socket;
    private String ip;
    private int port;
    public HttpClient(String ip, int port) throws IOException {
        this.ip = ip;
        this.port = port;
        socket = new Socket(ip, port);
   }
    public String get(String url) throws IOException {
        StringBuilder request = new StringBuilder();
        // 构造首行
        request.append("GET " + url + " HTTP/1.1\n");
        // 构造 header
        request.append("Host: " + ip + ":" + port + "\n");
        // 构造 空行
        request.append("\n");
        // 发送数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(request.toString().getBytes());
        // 读取响应数据
        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024 * 1024];
        int n = inputStream.read(buffer);
        return new String(buffer, 0, n, "utf-8");
   }
   public String post(String url, String body) throws IOException {
        StringBuilder request = new StringBuilder();
        // 构造首行
        request.append("POST " + url + " HTTP/1.1\n");
        // 构造 header
        request.append("Host: " + ip + ":" + port + "\n");
        request.append("Content-Length: " + body.getBytes().length + "\n");
        request.append("Content-Type: text/plain\n");
        // 构造 空行
        request.append("\n");
        // 构造 body
        request.append(body);
        // 发送数据
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(request.toString().getBytes());
        // 读取响应数据
        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024 * 1024];
        int n = inputStream.read(buffer);
        return new String(buffer, 0, n, "utf-8");
   }
    public static void main(String[] args) throws IOException {
    	HttpClient httpClient = new HttpClient("www.baidu.com", 80);
		String resp = httpClient.get("/index.html");
		System.out.println(resp);
        //HttpClient httpClient = new HttpClient("42.192.83.143", 8080);
        //String getResp = httpClient.get("/AjaxMockServer/info");
        //System.out.println(getResp);
        //String postResp = httpClient.post("/AjaxMockServer/info", "this is 
body");
        //System.out.println(postResp);
   }
}

代码运行结果(VSCode):
在这里插入图片描述

4、第三方工具:postman

1> 下载,安装,注册登录,创建个人工作空间后,点下图+号创建一个标签页,用于构造请求
在这里插入图片描述
2> 自定义构造请求,可以修改各种属性
在这里插入图片描述

二、HTTPS

1、HTTP和HTTPS的区别

HTTPS在HTTP的基础上,做了这几个改造:
1> 默认端口http是80,HTTPS是443;
2> HTTPS使用SSL/TLS加密,实现数据传输的安全性 ;
3> 使用数字证书验证,来验证网站的身份,确保用户访问的是真实的网站。

以前只使用http时,网费不足的时候就会在浏览网页收到互联网服务提供商(isp)的弹窗提示,现在HTTPS流行后,网费不足就没有提示了,而是直接断网。因为HTTPS对网络传输提供了加密,运营商设备无法再对浏览器端发送到服务器端的数据进行解析,也就无法提醒了,从而也解决了运营商劫持的问题。下面我们来看看SSL/TLS给HTTP加密的过程:

2、SSL/TLS加密流程

SSL是TLS的前身,它们都是加密安全协议,现在绝大部分浏览器都不支持SSL,而是支持TLS。

2.1、对称加密

举个例子:
在这里插入图片描述

在这里插入图片描述

  • 在上述场景中,同一个密钥,既可以用来加密,又可以用来解密,双方之间都只通过这个密钥进行加密解密,这样的方式叫做对称加密。
  • 但是,对称加密的密钥如果被第三方知道,就很容易破解了。那么就引入了我们的对称加密,从而把密钥安全传输。

2.2、非对称加密

1> 非对称加密理解:

  • 对称加密中引入了公钥和私钥。如果数据用公钥加密,就只能用私钥解密;如果数据用私钥加密,就只能用公钥解密。
  • 应用到客户端和服务端时,服务器拥有成对的公钥和私钥,公布自己的公钥让客户端知道,而私钥只有服务器端自己知道。
    客户端使用服务器公布的公钥进行数据加密 传输数据给服务端,服务端使用只有自己知道的私钥解密。这样的非对称加密也叫公钥加密。
  • 引入非对称加密后,客户端可以用服务器端给的公钥对 数据传输的方式(比如使用倒念) 进行加密,这个数据只有服务器端的 私钥才能解密,解密后就可以进行对称加密(后续进行对称加密是为了传输效率)。就达到了 安全传输 对称密钥 的目的,不再是对称加密中,唯一的密钥被第三方知道的情况。
    在这里插入图片描述

2> 通过非对称加密(公钥加密,私钥解密)的方式,可以让 对称密钥 安全的发送到服务端,但是还存在一种问题,第三方虽然不知道服务端的私钥,但是是否依旧可以获取数据呢?答案是可以的,请看下图:

在这里插入图片描述
在上图中,黑客就作为中间的联系人,进行"两头骗"的操作,怎么解决这个问题?加证书!

2.3、证书

客户端如何认证证书是否被修改?

  • 认证机构也有一组公钥和私钥,私钥用来加密hash值得到签名,公钥是公布给客户端的。
  • 当客户端向服务器申请公钥时,服务器会把证书一并发给客户端。客户端可以使用认证机构提供的公钥对证书的签名进行解密,这里使用一种hash算法得到hash1,然后自己用同样的hash算法对其它字段进行计算得到hash2,如果hash1和hash2一样就代表证书未被修改过。

在这里插入图片描述

  • 引入证书后,首先黑客不知道认证机构的私钥,无法对服务端证书的签名进行解密,也就无法篡改证书;其次,黑客只要一修改证书上对应的颁发机构或服务器公钥,客户端这里计算得到的hash1和hash2就不再相同。
  • 所以,引入证书后,就保证了黑客无法在中间使用自己的公钥和私钥进行"两头骗"的行为。但是如果黑客把证书也一并替换了呢?
    黑客通过欺骗 证书颁发机构(CA)或者攻击 CA的系统来获得有效证书,这种情况叫做 “CA欺骗攻击”,但是由于证书颁发机构有严格的审核程序和安全措施,黑客获取证书颁发机构的有效证书的概率很小,并且浏览器和操作系统也会定期更新黑名单,将已经被证实为不安全的证书加入其中,以保护用户受此类攻击。
    黑客无法获取到证书,自然就无法使用自己的证书进行替换了!

2.4、TLS握手过程

TCP三次握手后,客户端与服务器建立连接,以确保双方的通信是可靠的。在TCP连接建立之后,客户端和服务器进行TLS握手以建立安全通信。下面是TLS握手的过程:

在这里插入图片描述

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

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

相关文章

大数据Doris(十一):Aggregate 数据模型

文章目录 Aggregate 数据模型 一、导入数据聚合 二、保留明细数据

16 opencv 图像开和闭运算

文章目录 形态学处理操作函数核操作 综合案例 形态学处理 处理类型操作作用开运算先腐蚀再膨胀可在纤细点出分离物体。有助于消除噪音闭运算先膨胀后腐蚀用于排除前景对象中的小孔或对象上的小黑点形态学梯度膨胀图与腐蚀图之差用于保留目标物体的边缘轮廓顶帽原图与开运算图之…

AIgo C++ 面向ai算法的c++

https://github.com/shouxieai/algorithm-cpp http://aipj.aijdjy.com/course/13/task/266/show# https://www.yuque.com/books/share/0729cafa-4751-40e5-9f5d-bb617c0e9708?# 《C》 &#x1f4bb; AI算法视角下的c 视频问手写ai vx: shouxie_ai [共11节课&#xff0c;每节课…

企业微信第三方应用发邮件流程及java代码

具体思路&#xff1a; 1、申请企业微信。 2、在企业微信创建一个邮箱。 3、自建第三方应用。 4、从第三方应用&#xff0c;获取“Secret”值。 5、在第三方应用中&#xff0c;建立企业可信IP。 6、获取企业corpid。 7、写java代码&#xff0c;获取access_token。 参考&a…

华为开源自研AI框架昇思MindSpore应用案例:ResNet50迁移学习

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 AI融合计算的蓬勃发展&#xff0c;对框架能力提出了新的需求和挑战。问题场景和模型设计逐渐复杂化&#xff0c;使得业务数据的维度和计算逻辑的嵌套深度也相应增长。结合向量化优化手段可以有效优化性能瓶…

Delving into Localization Errors for Monocular 3D Object Detection 论文学习

论文地址&#xff1a;Delving into Localization Errors for Monocular 3D Object Detection Github地址&#xff1a;Delving into Localization Errors for Monocular 3D Object Detection 1. 解决了什么问题&#xff1f; 从单目图像准确地估计 3D 框是自动驾驶领域的重要功…

图像去模糊中的均值滤波、高斯滤波、双边滤波简单介绍及代码演示

文章目录 图像去模糊中的均值滤波、高斯滤波和双边滤波简单介绍均值滤波高斯滤波双边滤波总结 图像去模糊中的均值滤波、高斯滤波和双边滤波简单介绍 图像模糊是指图像中的细节和边缘被平滑和模糊化&#xff0c;通常是由于图像采集设备或者图像传输过程中的噪声和抖动引起的。…

SQL 执行顺序

数据的关联过程 from&join&where group by having&where select order by limit 这是一条标准的查询语句: 这是我们实际上SQL执行顺序&#xff1a; 我们先执行from,join来确定表之间的连接关系&#xff0c;得到初步的数据 where对数据进行普通的初步的筛选 …

低代码开发重要工具:jvs列表页中如何实现左树右表的配置

左树右表是一种数据查询展示方式&#xff0c;通常用于处理带有层级关系的查询条件的数据展示。它的基本思想是将一个大表分成左树和右表&#xff0c;左树是一个树形结构&#xff0c;右表是一个扁平的表。通过在左树上建立索引&#xff0c;可以大大提高查询效率。 左树右表的实…

C/C++每日一练(20230504)

目录 1. 将数据流变为多个不相交区间 &#x1f31f;&#x1f31f;&#x1f31f; 2. 冒泡法排序大小 &#x1f31f; 3. Pow(x, n) &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专…

使用机器人为无线传感器网络提供服务(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 无线传感器网络是一种无线网络&#xff0c;包括大量循环的、自定向的、微小的、低功耗的设备&#xff0c;称为传感器节点&…

MySQL存储引擎对比总结

文章目录 一、存储引擎是什么二、存储引擎有哪些三、常用存储引擎介绍1、InnoDB2、MyISAM3、MEMORY4、MRG_MYISAM &#xff08;MERGE&#xff09;5、ARCHIVE6、BLACKHOLE7、FEDERATED8、CSV9、PERFORMANCE_SCHEMA10、NDB 一、存储引擎是什么 存储引擎是数据库的核心&#xff0…

微信小程序实现订阅消息功能(Node服务器篇)

在上一篇内容当中在微信小程序中实现订阅消息功能&#xff0c;都在客户端(小程序)中来实现的&#xff0c;在客户端中模拟了服务器端来进行发送订阅消息的功能&#xff0c;那么本篇就将上一篇内容中仅在客户端中实现发送订阅消息功能进行一个分离&#xff0c;使用 Node.js 搭载后…

吧佬联手抵制奸商,百元级游戏电脑横出江湖

最近小忆闲得在电商平台搜索了下关键词「游戏主机」&#xff0c;不出意外销量榜前列清一色全是「i9 级高端游戏主机」。 这些主机不论配置单介绍还是十万百万级销量宣传标语&#xff0c;都给人一种血赚不亏的「豪华」感。 咱就说时代在变&#xff0c;唯一不变的是奸商们的套路与…

什么样的台灯灯光是好的?推荐中性色温的护眼台灯

台灯的灯光指的是白光和黄光&#xff0c;就是台灯的色温&#xff0c;而色温也是也会影响我们的直观感受的。 低色温&#xff08;>3000K&#xff09;光源偏黄&#xff0c;属于暖色调&#xff0c;适合休息高色温&#xff08;<5000K&#xff09;光源偏白&#xff0c;属于冷…

MWORKS.Sysplorer 2023a前瞻版上线——面向MBD全流程的覆盖

信息物理融合系统&#xff08;CPS&#xff09;的设计、建模与仿真是装备数字化的核心技术。MWORKS.Sysplorer经过多年的发展&#xff0c;已经支持机械、电气、流体、热力学等多个物理域的统一建模和统一仿真求解&#xff0c;解决了物理域统一表达与统一建模问题。为了支持完整的…

嘉立创EDA元件库开发环境及设计介绍

一、元件符号概述 如图1所示&#xff0c;元件符号是元件在原理图中的表现形式&#xff0c;主要由元件边框、管脚&#xff08;包括管脚符号和管脚名称&#xff09;、元件名称及说明组成&#xff0c;通过放置的管脚来建立电气连接关系。元件符号中管脚序号是和电子元件实物的管脚…

Node 11会话控制

会话控制 介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议&#xff0c;它没有办法区分多次的请求是否来自于同一个客户端&#xff0c;无法区分用户 而产品中又大量存在的这样的需求&#xff0c;所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有…

ChatGPT被淘汰了?Auto-GPT到底有多强

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了&#xff0c;显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API&#xff0c;某种意义只是基于ChatGPT能力的应用。但最近&#xff0c;Auto…

大型央企集团财务经营分析框架系列(二)

01集团化的数字化项目为什么会失败深度原因&#xff1a;方向性错误 这几年见过一些央企、国企、大型企业集团尝试过一些数字化的项目&#xff1a;数据中台、大数据分析、BI 分析项目&#xff0c;投入很大、周期也很长&#xff0c;甚至有的在项目开始前也找了专业的咨询公司来规…