当前位置: 首页 > news >正文

JavaEE-HTTPHTTPS

目录

HTTP协议

一、概念

二、http协议格式

http请求报文

http响应报文

URL格式

三、认识方法

四、认识报头

HTTP响应中的信息

HTTPS协议

对称加密

非对称加密

中间人攻击

解决中间人攻击


HTTP协议

一、概念

HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤⾮常⼴泛的应⽤层协议,诞生于1991年,现在已经发展成为最主流使用的一种应用层协议。HTTP往往是基于传输层的TCP协议实现的,平时打开网页就是通过http协议来传输数据,当我们在浏览器中输⼊⼀个 搜狗搜索的 "⽹址" (URL) 时, 浏览器就给搜狗的服务器发送了⼀个 HTTP请求, 搜狗的服务器返回了⼀个 HTTP 响应
理解http协议的工作过程:
但实际在我们在访问时会涉及很多个请求/响应。

二、http协议格式

想要进一步了解http的工作过程以及http的报文格式就需要用到抓包工具(能够把网络上传输的http数据捕捉获取到并且显示出来),抓包工具相当于一个代理程序。
代理可以分为两种角色:(1)帮客户端跑腿的:正向代理  (2)帮服务器跑腿的:反向代理。
这里我们使用Fiddler来作为我们的抓包工具作为演示(Fiddler下载教程已出)。
http是一个文本协议,本质上http数据包就是按照上述http协议的格式将数据写入到tcp socket中。

http请求报文

分为四部分
(1)首行,包含三部分:(a)请求的方法,例如GET,表示请求的目的,GET是要从服务器获取数据 (b)请求的URL(对方的地址) (c)版本号。我们可以在浏览器上输入baidu.com来抓取后得到,分别用红绿蓝代表abc
(2)请求头(Header):此处本质上使用键值对(key-value)来表示,请求头可以是若干行,每一行本质上是一个键值对,键与值之间用:作为分割, 最后用空行代表结束
(3)空行:Header结尾处有一个空行作为结束,类似链表的null
(4)正文(body):可选的,可以有也可以没有,可以存放任何你想要存放的数据

http响应报文

也分为四部分
(1)首行,HTTP/1.1为版本号,200为状态码,OK为状态码描述,这样的首行代表是一个成功的响应,失败的响应会显示404not found(响应的几种状态在后面介绍)
(2)响应头(Header),与请求的一样不限制行数,以空行作为结束
(3)空行:可以看到在Header中的最后一行有一个Content-Length代表了响应头的行数,可以 通过行数来找到空行,避免了粘包问题
(4)正文:正文中存什么都可以,空行也可以存,只有http数据包中的第一行才作为Header的结尾。

URL格式

URL的详细标准由因特网RFC1783来规定
协议方案名描述了我们的URL接下来要干啥,例如我们在使用java操作数据库时输入的jdbc:mysql://
登录信息:是上古时期登录方式
服务器地址:要访问的服务器是哪个, 域名/IP地址
服务器端口号:url中的端口号可以不写,浏览器会自动设置一个端口号,这个端口是服务器的端口,http协议就是80,https协议就是443
带层次的文件路径描述了要访问服务器的哪个资源一个服务器会提供很多资源给外界访问,比如一个网站会有很多不同的网页,这样就可以通过文件路径区分不同的网页
查询字符串:就是一些参数,通过这些参数将客户端想告知服务器的参数传递过去;例如当我们在浏览器搜索URL格式,,就会出现q = URL格式的字样,这就是查询字符串。
当我们使用Fiddler进行抓取时可以得到URL是这样的
也可以看作是键值对结构,键值对之间用&分开,键与值之间用=分割,这些键值对都是由程序员自己规定的含义。
可以看到在我们的q = URL后面存在一些用百分号进行分割的字符,这些其实utf8进行将汉字编码的结果,我们输入的是URL格式,我们在编码转换器中输入汉字格式就可以从得到的结果中发现与这里的是一致的
浏览器为了让客户看起来更方便,在浏览器中使用的是转码前,实际发送的是转码后。
汉字通常使用utf8进行转码,对于符号需要用到urlencode进行转码,如果直接进行转码可能会导致汉字的某个字节与符号的产生冲突导致解析错误,需要转码的字符会显示出这个字符原始的十六进制编码,在这个基础上加上%。
构造http请求一定要把需要转码的部分进行url encode,不进行urlencode可能会造成跳转失败。
片段标识符:区分页面中不同的目录,像是我们在csdn博客中的目录功能,点击一个目录可以直接跳转到该目录所在的界面。

三、认识方法

虽然方法有这么多, 但常用的只有GET和POST,GET语义上是从服务器获取数据,POST语义是往服务器发送/提交数据,在实际开发中这两个方法的界限越来越模糊,get可以用来提交并且post也可以用来获取;GET通常不会使用body而是用query string来传输数据,POST通常不搭配query string而是body来传输数据(这是使用习惯上的差别,但GET和POST都是有query string和body的)。
网络上大部分请求都是GET,通过query string告诉服务器要搜啥,服务器返回搜索结果完整网页。POST的使用场景少一些,通常是这些场景:
(1)登录 (2)上传文件
上述http请求是如何构造的?
GET请求:(1)在浏览器地址栏直接输入url,此时就是GET请求;(2)网页html中可能会有一些特殊的标签,这些标签会带有一个url作为属性,页面被浏览器加载后解析到这些标签就会根据url构造出新的http请求;(3)表单,html中特殊的标签form;(4)通过js构造。
POST请求:(1)表单 (2)js。
小结:GET和POST的区别
(1)从本质上讲,GET和POST没有区别,GET能做的POST也能做,POST能做的GET也能做。
(2)从语义上来讲,GET用来获取数据,POST用来发送数据
(3)从传递数据来讲,GET用query string,POST用body
(4)从响应结果幂等来讲,对于GET请求的设计通常是幂等的,而POST的设计则不要求幂等。
(5)GET请求的结果可以被缓存,可以被浏览器收藏,而POST一般不可以。

四、认识报头

1、Host:请求对应的主机的端口和ip;( 通常情况下和url中的服务器地址是一样的
2、Content—Length:body的长度, 一旦有body就要知道body的长度才能知道一个完整的http请求此处涉及到http机制对于粘包问题的解决:(1)分隔符,GET请求没有body就通过空行 (2)POST请求有body,通过空行找到body的开始,通过Content—Length找到body的结尾
3、Content—Type:body的类型, 通过http协议传输的数据类型有很多种类,例如:图片/视频/音频等等,这些不同的数据浏览器有不同的处理方式。
4、User—Agent(UA):主要信息包含两个, 浏览器版本/操作系统版本描述了用户使用什么样的设备打开你的网页
UA的主要作用是用来实现兼容,在互联网发展的早期浏览器只能显示文字,后来发展出可以显示图片/视频/音频等不同功能的浏览器,UA就可以告诉服务器此时用户用的是可以显示什么画面的浏览器进而提供服务;而现在UA的主要功能是来区分手机端和电脑端,如果是电脑返回一个宽屏网页,如果是手机返回一个窄屏的网页。
5、Referer:表示当前页面从哪个网页跳转过来,如果是直接在地址栏输入url或者点击收藏栏中的网页此时Referer处为空。
6、Cookie
cookie也是键值对格式的内容,和query string相似都是程序员自己定义的,每个网站都有自己的cookie,它的具体含义只有写这个的程序员自己知道;
cookie这里的键值对本质上都是能够在客户端硬盘持久保存的:网页是运行在浏览器上的,默认情况下网页是不能直接访问硬盘的,但有些情况下有的网站确实需要在客户端硬盘持久的保存一些必要信息,浏览器就给网页提供了特定的机制——Cookie,cookie机制不是让网页随意访问硬盘,网页对于硬盘是没法直接读写的,浏览器对于硬盘操作做了特殊的封装,相当于提供了一组特殊文件,只能往这个文件中读写,并且写的内容也要求是键值对。 不同网站的cookie独立存储互不影响。
Cookie从哪里来?
cookie中的数据来自于服务器,如果你的浏览器第一次访问某网站,那么此时你浏览器对应的cookie是空着的,网站的服务器就会返回一些http响应,响应中会包含set-Cookie这样的Header,就会把一些键值对保存到对应的cookie中;
当cookie保存到服务器后,后续浏览器访问该网站时就会把在请求Header中将对应的键值对都带入进去再返回给服务器。
小结
Cookie是什么?
浏览器本地存储持久化数据的典型机制。
Cookie怎么存的?
按照不同的域名分别存储在硬盘上,不同域名之间的cookie互不干扰。
Cookie从哪里来?
从服务器来,如果浏览器第一次访问网站,服务器的响应Header中会带有set-Cookie字段
Cookie到哪里去?
在后续的请求中,请求的Header中带有cookie字段将信息传输给服务器。
Cookie的作用?
(1)存储用户偏好设置:通过使用Cookie网站可以记住用户的偏好设置,比如语言偏好/主题选择等;
(2)实现用户认证:在需要用户登录的网站中,Cookie可以用来保持用户的登录状态,服务器在用户登陆成功后创建一个包含用户身份信息的Cookie发送给浏览器,访问这个网站的其他网页时就可以实现自动登录。
Cookie的典型应用场景:保存会话id

HTTP响应中的信息

状态码
描述这次请求是否成功以及失败原因,在此介绍一些常见的:
(1)200-OK:本次访问成功
(2)404-NOT FOUND:客户端访问的请求在服务器不存在
(3)403-Forbidden:客户端权限不足无法访问
(4)405-Method Not Allowed:请求中的方法服务器不支持
(5)500-Internal Server Error:服务器内部错误(出现bug了)
(6)504-Gateway Timeout:服务器访问超时(问题常出现于服务器访问比较繁忙的时候)
(7)302-Move Temporarily:临时重定向(访问某个服务器时访问的是旧地址,自动跳转到新地址),302响应中的Header会有Location字段显示接下来要跳转到哪个网站
(8)301-Move Permanently:永久重定向(访问的旧地址和新地址之间的映射关系固定了,此时浏览器会缓存这样的结果),后续浏览器在访问时就可以直接构造新地址的请求,减少一次http访问

HTTPS协议

HTTPS协议本质上就是HTTP协议加了一个加密层,抛开加密层别的部分都是一样的。

HTTPS引入的背景是“运营商劫持事件”

给HTTP加密的过程涉及到几个密码学的概念:

明文:要传输的真正含义是什么

密文:加密之后得到的数据

密钥:用来加密和解密的重要道具

加密:明文通过密钥变成密文的过程

解密:密文通过密钥变成明文的过程

对称加密:加密和解密的密钥是同一个

非对称加密:密钥是一对(公钥&私钥),加密解密的时间变长,安全性更高;如果使用公钥加密那么就使用私钥解密,反之亦然。

对称加密

HTTP本身是一个不安全的协议,让它变成安全的协议最简单的做法可以使用对称加密来操作

这样就成功防止了黑客在中间劫持数据,但有个问题:对称密钥在有多个客户端时不能所有客户端使用同一个密钥,不然黑客的客户端不就也持有这个对称密钥了,所以应该每个客户端生成一个密钥再将这个密钥告诉服务器。

此时如果使用明文传输密钥那么黑客在中间也可以拿到密钥,使用对称加密传输这个密钥的话也需要先告诉服务器新的私钥是什么,事情陷入了死循环,此时就需要引入非对称加密来对我们的密钥进行加密。

引入非对称加密不是对后续传输的内容进行加密的(非对称加密的系统开销比对称加密大的多,所以不适合对业务数据进行加密),只是对对称密钥进行加密。

非对称加密

服务器生成公钥和私钥,当客户端连上服务器,服务器会将公钥发给每个客户端,而私钥只有服务器自己持有;

接下来客户端自己生成对称密钥,将对称密钥使用服务器公钥进行加密,再将带有对称密钥的密文发送给服务器

黑客此时只能拿到被公钥加密的对称密钥数据,公钥需要私钥来解密,黑客是无法对数据进行解密的。

上述场景是非对称加密的思路,实际黑客还是有办法获取到原始数据的。

中间人攻击

黑客冒充服务器伪造一些看似正确的信息

关键环节:黑客自己生成一对公钥和私钥,拿着私钥针对刚才传输给客户端的公钥进行解密,从这里拿到客户端的对称密钥,继续把对称密钥用服务器的公钥进行加密并传输给服务器。

此时黑客面对客户端是服务器的角色,面对服务器是客户端的角色,双方都不知道黑客的存在,对称密钥已经泄露意味着后续的数据都会泄露。

解决中间人攻击

关键在于让客户端辨别出当前公钥是否是服务器的公钥,引入第三方认证机构,公证机构会对公钥进行公正,客户端看到这个公钥被公正了就可以知道是合法的了。

客户端和服务器建立连接后客户端会先收到服务器的公正证书,证书中会包含发证机构/证书有效期/服务器公钥/证书的所有者/持有者的网路主域名/数字签名这些字段,通过这些字段计算出校验和1;

接下来客户端开始针对数字签名进行解密,数字签名是公证机构拿着私钥进行加密的,进行解密就需要公证机构的公钥来解密,这个公钥如果在网络上传播肯定是有风险的,所以这些公证机构的公钥都会内置在操作系统中,这样就可以拿着系统内置的公钥来对数字签名解密得到校验和2;

比较校验和1和校验和2,如果相等就说明整个证书没有被篡改过,此时证书既然是有效的,那么里面的公钥自然也是可信的服务器公钥。

对于黑客来说针对公证机构的数字签名进行解密是很容易的(黑客系统也可以内置公钥),但黑客如果修改了公钥但是不修改数字签名,此时客户端进行校验时就会发现校验和不一致,会标记为不信任网站;如果黑客修改了公钥并且自己重新计算校验和,重新加密得到数字签名,因为黑客不知道公证机构的私钥是什么,只能拿着自己的私钥进行加密,这样客户端拿到数字签名后拿着公证机构的公钥进行解密是会解密失败的,也可以判定非法

感谢观看

道阻且长,行则将至

相关文章:

JavaEE-HTTPHTTPS

目录 HTTP协议 一、概念 二、http协议格式 http请求报文 http响应报文 URL格式 三、认识方法 四、认识报头 HTTP响应中的信息 HTTPS协议 对称加密 非对称加密 中间人攻击 解决中间人攻击 HTTP协议 一、概念 HTTP (全称为 "超⽂本传输协议") 是⼀种应⽤…...

iLogtail 开源两周年:社区使用调查报告

作者:玄飏 iLogtail 作为阿里云开源的可观测数据采集器,以其高效、灵活和可扩展的特性,在可观测采集、处理与分析领域受到了广泛的关注与应用。在 iLogtail 两周年之际,我们对 iLogtail 开源社区进行了一次使用调研,旨…...

Ubuntu 比较两个文件夹

比较两个文件夹下的大量文件是否一致,可以通过以下几种方式完成: 1. 使用 diff 命令 diff 命令不仅可以比较文件,还能递归比较文件夹。可以使用 -r 选项来递归比较两个目录下的文件: diff -r /path/to/dir1 /path/to/dir2 如…...

两数之和--力扣1

两数之和 题目思路C代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们…...

vue原理分析(三)new()创建Vue实例

今天我们来分析Vue实例的创建 代码如下: Vue.config.productionTip falsenew Vue({render: h > h(App),}).$mount(#app) Vue.config.productionTip false 这个配置成false,是阻止启动生产消息 new Vue({render: h > h(App),}).$mount(#app)…...

Spring MVC: 构建Web应用的强大框架

Spring MVC: 构建现代Web应用的强大框架 1. MVC设计模式简介 MVC (Model-View-Controller) 是一种广泛使用的软件设计模式,它将应用程序的逻辑分为三个相互关联的组件: Model (模型): 负责管理数据、业务逻辑和规则。View (视图): 负责用户界面的展示,将数据呈现给用户。Con…...

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-Gigabi…...

动态规划-最长回文子串

题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 对于该题使用中心扩展法在某些情况下可以比动态规划方法更优&#xff0c;尤其是在处理较长字符串时。这是因为中心扩展法具有更好的空间复杂度&#xff0c;并且在实际应用中可能具有更快的运行速度&#xf…...

海康威视 嵌入式 面经 海康威视嵌入式软件 嵌入式硬件总结面试经验 面试题目汇总

标题海康威视 嵌入式 面经 海康威视嵌入式软件 嵌入式硬件总结面试经验 面试题目汇总 整理总结了海康威视嵌入式的面试题目&#xff01;&#xff0c;可以供大家面试参考 标题海康威视 嵌入式 面经 五月底投递&#xff0c;六月初面试&#xff0c;一场技术面&#xff0c;一场H…...

使用图论技巧——有遍数限制的最短路

给定一个 n个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c; 边权可能为负数。 请你求出从 11 号点到 n 号点的最多经过 k 条边的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;输出 impossible。 注意&#xff1a;图中可能 存在负权回路…...

flume 使用 exec 采集容器日志,转储磁盘

flume 使用 exec 采集容器日志&#xff0c;转储磁盘 在该场景下&#xff0c;docker 服务为superset&#xff0c;flume 的sources 选择 exec &#xff0c; sinks选择 file roll 。 任务配置 具体配置文件如下&#xff1a; #simple.conf: A single-node Flume configuration#…...

459重复的子字符串

给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 public repeatedSubstringPattern(String s){int n s.length();for(int i 1; i < n / 2; i){if(n % i ! 0) continue;// substring获取子字符串是左闭右开的String ss s.substring(0,…...

【HarmonyOS NEXT】实现截图功能

【HarmonyOS NEXT】实现截图功能 【需求】 实现&#xff1a;实现点击截图按钮&#xff0c;实现对页面/组件的截图 【步骤】 编写页面UI Entry Component struct Screenshot {BuildergetSnapContent() {Column() {Image().width(100%).objectFit(ImageFit.Auto).borderRadi…...

小皮面板webman ai项目本地启动教程

1.前置条件 下载小皮面板 下载后&#xff0c;双击安装&#xff0c;一路next&#xff08;下一步&#xff09;&#xff0c;无需更改配置。 2.安装必须软件 在小皮面板的软件管理页&#xff0c;安装编号①②③④下面四个软件。 3.启动本地服务 进入到小皮面板的首页&#x…...

从零实现诗词GPT大模型:实现多头自注意力

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 在上一篇文章的最后,我们已经介绍了为什么要使用多头注意力了,本篇文章我们主要来实现多头自注意力,然后综合我们之前实现的FFN和TransformerBlock其实就差不多完成了整个GPT模型的实现了。 在开始实现之…...

[rk3399 android11]关闭声卡

使用以下命令查看声卡&#xff0c;可以看到目前有三个声卡 cat /proc/asound/cards 修改设备树 diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-jw-d039.dts b/kernel/arch/arm64/boot/dts/rockchip/rk3399-jw-d039.dtsindex 515334c127..5b592a852f 100755--- a/…...

项目实战 ---- 商用落地视频搜索系统(7)---预处理二次优化

目录 背景 要解决的问题 技术理念与落地思路 完整代码 另外的问题与解决 优化运行效果 log 效果图 背景 作为商用落地系统,我们当然希望搜索视频的关联度或者说准确性与我们希望查询的视频相关度越高越好。为此,除了在query 层面上优化,我们还需要注重我们的录入数…...

【干货分享】央企国企的群面、半结构面试复习方法和经验总结

目录 0.前言1.个人背景介绍2.行业选择心路历程3.求职历程3.1 网申如何准备&#xff1f;3.2 笔试考什么&#xff1f;如何准备3.2.1 笔试考什么&#xff1f;3.2.2 笔试如何准备4.面试如何准备&#xff1f;敲黑板&#xff01;重点&#xff01;4.1 面试题收集来源、我的准备方法4.…...

前端HTML基础笔记

HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用于创建网页的标准标记语言。它通过一系列的元素&#xff08;或称为标签&#xff09;来定义网页的结构和内容。HTML文档由一系列的元素组成&#xff0c;这些元素可以包含文本、图片、链…...

用三极管搭建简易电流源

目录 一、三极管搭建电流源设计思路二、实例及搭建仿真1.电阻分压偏置 2.齐纳二极管偏置 3.串联二极管偏置 一、三极管搭建电流源设计思路 设计思路&#xff1a;利用分压电路&#xff0c;可用多种方式给基极提供偏压&#xff0c;使三极管处于放大区&#xff0c;VB保持稳定电压&…...

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页&#xff1a;https://tangyuan96.github.io/minigpt_3d_project_page/ 代码&#xff1a;https://github.com/TangYuan96/MiniGPT-3D 论文&#xff1a;https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA&#xff0c;被ACM MM2024接收&#xff0c;只拥…...

Android Google Maps

Android 谷歌地图 前言正文一、设置Google Cloud 项目二、项目配置① 设置SDK② 配置API密钥③ 配置AndroidManifest.xml 三、添加地图四、定位当前① 请求定位权限② 我的位置控件③ 获取当前位置 五、配置地图① xml配置地图② 代码配置地图③ 地图点击事件④ 管理Marker 六、…...

Linux——进程概念

什么是操作系统 操作系统管理各种计算机硬件、为应用程序提供基础、并且充当计算机硬件与用户之间的中介。 冯诺依曼体系 这里的存储器指的是内存不考虑缓存情况&#xff0c;这里的CPU能且只能对内存进行读写&#xff0c;不能访问外设(输入或输出设备)外设(输入或输出设备)要…...

【H2O2|全栈】关于HTML(1)认识HTML

HTML相关知识 目录 前言 准备工作 WEB前端是什么&#xff1f; HTML是什么&#xff1f; 如何运行HTML文件&#xff1f; 标签 概念 分类 双标签和单标签 行内标签和块标签 HTML文档结构 预告和回顾 UI设计相关 Markdown | Md文档相关 项目合作管理相关 后话 前…...

Oracle(111) 如何使用RMAN备份数据库?

使用 RMAN&#xff08;Recovery Manager&#xff09;备份 Oracle 数据库是确保数据安全和可恢复性的关键步骤。下面是详细的指导和代码示例&#xff0c;展示如何使用 RMAN 进行数据库备份。 1. 准备工作 在开始备份之前&#xff0c;需要确保以下几点&#xff1a; 已安装并配…...

linux字符设备驱动程序

字符设备驱动程序简介  linux系统中万物皆文件&#xff0c;驱动程序加载后会在/dev目录下生成一 个对应的文件&#xff0c;如/dev/led。应用程序就是先用open打开该文件&#xff0c; 用write控制led的亮灭&#xff0c;用read读取led的亮灭&#xff0c;用完之后用close 关闭该…...

【pyhton】python如何实现将word等文档中的文字转换成语音

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

Claude Enterprise推出计划

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

【前端】CSS控制style样式失效

在CSS中&#xff0c;可以通过几种方式控制或禁用特定的style样式。 使用all: unset来重置所有可继承的属性&#xff0c;并清除所有的样式&#xff1a; .element {all: unset;} 使用inherit值来使属性获取其父元素的值&#xff1a; .element {color: inherit;font-size: inh…...

How can I load the openai api configuration through js in html?

题意&#xff1a;怎样在HTML中通过JavaScript加载OpenAI API配置 问题背景&#xff1a; I am trying to send a request through js in my html so that openai analyzes it and sends a response, but if in the js I put the following: 我正在尝试通过HTML中的JavaScript发…...