附录6-5 黑马优购项目-我的与后端本地化

目录

1  我的

2  后端本地化


1  我的

tarbar我的 只有这两个页面

其中未登录页面中只有一键登录有用,其他都是写死的,一键登录的功能仅仅是切换到登录的页面

目前微信小程序和微信用户的信息是脱钩的(之前的wx.getUserProfile与wx.getUserInfo都不能正常使用了),你看一下其他的小程序也会发现这个问题,微信的昵称不会出现在小程序中了。目前一键登录一般是用服务商提供的本机一键登录功能,有特定的API。确认用户身份后你再使用你小程序的后台用户数据库信息

本机一键登录这个API会有费用,但是会很方便。还有下面两种登录方式

  1. 邮箱:可以用邮箱登录,邮箱的验证码是可以免费发的,缺点就是用户用起来麻烦些
  2. 手机验证码:API需要一些费用,相比本机一键登录还是一键登录更方便些

这个页面中除了退出登录按钮,其他所有都是写死的

wxml

<!--pages/my/my.wxml-->
<!-- 如果hasUserInfo为false不存在就展示登录 -->
<view class="my-container">
<view wx:if="{{!hasUserInfo}}"><view class="login-container"><!-- 提示登录的图标 --><image src="/src/login_logo.png" mode="" style="width:100px;height:100px;"/><!-- 登录按钮 --><button type="primary" class="btn-login" bind:tap="click_login_btn">一键登录</button><!-- 登录提示 --><view class="tips-text">登录后尽享更多权益</view></view><view style="height:30vh;background-color:white;"></view>
</view>
<!-- 如果hasUserInfo为true存在就展示用户信息 -->
<view wx:else><view class="my-userinfo-container"><!-- 头像昵称区域 --><view class="top-box"><image src="{{userinfo.avatar}}" class="avatar"></image><view class="nickname">{{userinfo.username}}</view></view><view class="panel-list"><!-- 第一个面板 --><view class="panel"><!-- panel 的主体区域 --><view class="panel-body"><!-- panel 的 item 项 --><view class="panel-item"><text>8</text><text>收藏的店铺</text></view><view class="panel-item"><text>14</text><text>收藏的商品</text></view><view class="panel-item"><text>18</text><text>关注的商品</text></view><view class="panel-item"><text>84</text><text>足迹</text></view></view></view><!-- 第二个面板 --><view class="panel"><!-- 面板的标题 --><view class="panel-title">我的订单</view><!-- 面板的主体 --><view class="panel-body"><!-- 面板主体中的 item 项 --><view class="panel-item"><image src="/src/my-icons/icon1.png" class="icon"></image><text>待付款</text></view><view class="panel-item"><image src="/src/my-icons/icon2.png" class="icon"></image><text>待收货</text></view><view class="panel-item"><image src="/src/my-icons/icon3.png" class="icon"></image><text>退款/退货</text></view><view class="panel-item"><image src="/src/my-icons/icon4.png" class="icon"></image><text>全部订单</text></view></view></view><!-- 第三个面板 --><view class="panel"><view class="panel-list-item"><text>收货地址</text><image src="/src/arrowright.png" mode="" style="width:15px;height:15px;"/></view><view class="panel-list-item"><text>联系客服</text><image src="/src/arrowright.png" mode="" style="width:15px;height:15px;"/></view><view class="panel-list-item" bind:tap="click_logout_btn"><text>退出登录</text><image src="/src/arrowright.png" mode="" style="width:15px;height:15px;"/></view></view></view></view>
</view>
</view>

wxss

/* pages/my/my.wxss */
.login-container {/* 登录盒子的样式 */height: 70vh;display: flex;flex-direction: column;align-items: center;justify-content: center;background-color: #f8f8f8;position: relative;overflow: hidden;
}.login-container::after {content: ' ';display: block;position: absolute;width: 100%;height: 40px;left: 0;bottom: 0;background-color: white;border-radius: 100%;transform: translateY(50%);
}.login-container .btn-login {width: 90%;border-radius: 100px;margin: 15px 0;background-color: #c00000;
}.login-container .tips-text {font-size: 12px;color: gray;
}page{background-color: #f4f4f4;
}/* 用户信息样式 */
.my-userinfo-container {height: 100%;/* 为整个组件的结构添加浅灰色的背景 */background-color: #f4f4f4;/* background-color: green; */
}
.my-userinfo-container .top-box {height: 400rpx;background-color: #c00000;display: flex;flex-direction: column;align-items: center;justify-content: center;
}
.my-userinfo-container .top-box .avatar {display: block;width: 90px;height: 90px;border-radius: 45px;border: 2px solid white;box-shadow: 0 1px 5px black;
}.my-userinfo-container .top-box .nickname {color: white;font-weight: bold;font-size: 16px;margin-top: 10px;
}/* 第一个面板的样式 */
.panel-list {padding: 0 10px;position: relative;top: -10px;
}
.panel-list .panel {background-color: white;border-radius: 3px;margin-bottom: 8px;
}
.panel-list .panel .panel-body {display: flex;justify-content: space-around;
}.panel-list .panel .panel-body .panel-item {display: flex;flex-direction: column;align-items: center;justify-content: space-around;font-size: 13px;padding: 10px 0;
}/* 第二个面板的样式 */
.panel-list {padding: 0 10px;position: relative;top: -10px;
}
.panel-list .panel {background-color: white;border-radius: 3px;margin-bottom: 8px;
}
.panel-list .panel .panel-title {line-height: 45px;padding-left: 10px;font-size: 15px;border-bottom: 1px solid #f4f4f4;
}.panel-list .panel .panel-body {display: flex;justify-content: space-around;
}
.panel-list .panel .panel-body .panel-item {display: flex;flex-direction: column;align-items: center;justify-content: space-around;font-size: 13px;padding: 10px 0;
}
.panel-list .panel .panel-body .panel-item .icon {width: 35px;height: 35px;
}/* 第三个面板区域的样式 */
.panel-list-item {height: 45px;display: flex;justify-content: space-between;align-items: center;font-size: 15px;padding: 0 10px;
}

js

// pages/my/my.js
import {createStoreBindings} from 'mobx-miniprogram-bindings'
import {store} from '../../store/store.js'Page({/*** 页面的初始数据*/data: {hasUserInfo: false,},click_login_btn() {this.setData({hasUserInfo:true,'userinfo':{username:'电话号',avatar:'/src/login_logo.png'}})wx.setStorageSync('userinfo', {username:'电话号',avatar:'/src/login_logo.png'})if (this.data.need_navigate_back) {wx.showToast({title: '登录成功',mask:true,icon:'none'})setTimeout(()=>{wx.hideToast()wx.switchTab({url: '/pages/cart/cart',success:()=>{this.cancel_need_navigate_back()}})},800)}},click_logout_btn() {wx.showModal({title: '提示',content: '确认退出登录吗',complete: (res) => {if (res.cancel) {}if (res.confirm) {this.setData({hasUserInfo:false,userinfo:''})wx.setStorageSync('userinfo', '')}}})},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.storeBindings = createStoreBindings(this, {store,fields:['need_navigate_back'],actions: ['set_cart_tabBar_badge','cancel_need_navigate_back']})},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {// 设置购物车tabBar上的徽标this.set_cart_tabBar_badge()},/*** 生命周期函数--监听页面显示*/onShow() {this.setData({userinfo:wx.getStorageSync('userinfo') || ''})if (!Boolean(this.data.userinfo.username)) {this.setData({hasUserInfo:false})}else {this.setData({hasUserInfo:true,username:this.data.userinfo.username,avatar:this.data.userinfo.avatar})}},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

2  后端本地化

网上的接口可能会挂掉,搞一个本地方便看小程序的样式,我用的是django做后端框架

urls.py

"""
URL configuration for Appendix6_heima_shop project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import pathfrom . import viewsurlpatterns = [path("admin/", admin.site.urls),# 子页面path("api/public/v1/goods/qsearch/", views.get_search_suggest_view),path("api/public/v1/goods/detail/", views.get_goods_deteal_view),path("api/public/v1/goods/search/", views.get_goods_list_view),# 首页path("api/public/v1/home/swiperdata/", views.get_home_swiper_data_view),path("api/public/v1/home/catitems/", views.get_home_navigation_data_view),path("api/public/v1/home/floordata/", views.get_home_floor_data_view),# 分类path("api/public/v1/categories/", views.get_category_data_view),
]

views.py

原本是应该把数据都搞下来放数据库里,那样就能100%复现,不过那样比较费时间。最后就只写死了一部分用于保留样式,有的接口内容不比较多,这里我仅展示一部分

from django.http import HttpResponse
from .settings import SERVER_SOCKET
import jsonprotocol_IP_port = 'http://' + SERVER_SOCKETdef get_search_suggest_view(request):return HttpResponse(json.dumps({"message": [{"goods_id": 50708,"goods_name": "小白熊奶瓶电子蒸汽消毒锅婴儿奶瓶消毒器高温蒸汽奶瓶消毒HL-0603"},{"goods_id": 50707,"goods_name": "yeaspring 婴儿奶瓶消毒器带烘干 多功能消毒锅 紫外线 奶瓶消毒柜 粉色"},{"goods_id": 50704,"goods_name": "格朗 奶瓶消毒锅 烘干器 尚品 GL X-6"},{"goods_id": 50702,"goods_name": "保修一年小白熊奶瓶消毒器带烘干/消毒锅HL-0681+多功能婴儿暖奶器HL-0607组合装"},{"goods_id": 50701,"goods_name": "安心妈妈奶瓶消毒器带烘干宝宝多功能蒸汽奶瓶消毒锅婴儿消毒柜"},{"goods_id": 50700,"goods_name": "小白熊奶瓶消毒器HL-0603 宝宝煮奶瓶消毒锅 婴儿奶瓶消毒器"},{"goods_id": 50699,"goods_name": "舒氏奶瓶消毒器 树枝状蒸汽通道消毒锅 环绕式杀菌智能烘干"},{"goods_id": 50698,"goods_name": "【新品上市】格朗奶瓶消毒器烘干蒸汽消毒锅 婴儿多功能宝宝消毒柜 GL X-11"},{"goods_id": 50697,"goods_name": "小白熊婴儿奶瓶消毒器带烘干婴儿奶瓶消毒锅小白熊奶瓶消毒 HL-0681"},{"goods_id": 50696,"goods_name": "小白熊 液晶版奶瓶消毒器 带烘干婴儿消毒锅 HL-0871"},{"goods_id": 50695,"goods_name": "飞利浦新安怡(AVENT)3合1电子蒸汽消毒锅"},{"goods_id": 50694,"goods_name": "Yeaspring宝宝奶瓶消毒器带烘干 消毒锅紫外线奶瓶消毒柜 内置烘干功能 蓝色"},{"goods_id": 50693,"goods_name": "phyll必尔紫外线婴儿奶瓶消毒器玩具宝宝消毒柜带烘干韩国进口多功能消毒锅"},{"goods_id": 50692,"goods_name": "bellecare宝宝奶瓶暖奶消毒器带烘干煮奶瓶锅消毒锅婴儿蒸汽杀菌不锈钢全自动烘干机"},{"goods_id": 50691,"goods_name": "【苏宁自营】 海尔(Haier)奶瓶消毒器 奶瓶奶嘴消毒 婴儿消毒锅 蒸煮温食 HBS-C03"},{"goods_id": 50690,"goods_name": "小白熊奶瓶消毒柜宝宝消毒锅 婴儿紫外线奶瓶消毒器带烘干HL-0636"},{"goods_id": 50689,"goods_name": "Goodbaby 好孩子 奶瓶蒸汽消毒锅 嫩芽绿"},{"goods_id": 50687,"goods_name": "新贝奶瓶消毒器带烘干 XB-8600 宝宝多功能暖奶蒸汽消毒锅婴儿消毒柜"},{"goods_id": 50686,"goods_name": "【赠13件】小白熊 宝宝奶瓶消毒器带烘干 奶瓶蒸汽消毒锅大容量HL-0681"},{"goods_id": 50685,"goods_name": "【苏宁自营】GL 格朗婴儿奶瓶消毒锅带烘干 多功能蒸气消毒锅 大容量宝宝消毒器 尚品X-6"}],"meta": {"msg": "获取成功","status": 200}
},ensure_ascii=False))def get_goods_list_view(request):return HttpResponse(json.dumps({"message": {"total": 5,"pagenum": "1","goods": [{"goods_id": 43983,"cat_id": 5,"goods_name": "Amoi夏新曲面电视机55英寸 4K全高清安卓系统智能语音无线WiFi网络 48/50蓝光夜晶3D数字彩电 家用超薄窄边","goods_price": 3078,"goods_number": 100,"goods_weight": 100,"goods_big_logo": "","goods_small_logo": "","add_time": 1516509839,"upd_time": 1516509839,"hot_mumber": 0,"is_promote": False,"cat_one_id": 1,"cat_two_id": 3,"cat_three_id": 5},{"goods_id": 43982,"cat_id": 5,"goods_name": "TCL 65Q960C 65英寸 哈曼卡顿 人工智能 金属超薄 64位34核 4K+HDR 原色量子点 曲面电视(灰色)","goods_price": 9988,"goods_number": 100,"goods_weight": 100,"goods_big_logo": ""+ protocol_IP_port +"/static/get_goods_list_view/000000000826147951_1_800x800.jpg","goods_small_logo": ""+ protocol_IP_port +"/static/get_goods_list_view/000000000826147951_1_400x400.jpg","add_time": 1516509836,"upd_time": 1516509836,"hot_mumber": 0,"is_promote": False,"cat_one_id": 1,"cat_two_id": 3,"cat_three_id": 5},{"goods_id": 43972,"cat_id": 5,"goods_name": "红麒 32英寸电视 底座+上门安装调试 费用产品(本店电视安装专用)智能电视 曲面电视 高清(1366×768)","goods_price": 120,"goods_number": 100,"goods_weight": 100,"goods_big_logo": "http://image2.suning.cn/uimg/b2c/newcatentries/0070164812-000000000705355314_1_800x800.jpg","goods_small_logo": ""+ protocol_IP_port +"/static/get_goods_list_view/000000000646151601_1_400x400.jpg","add_time": 1516509757,"upd_time": 1516509757,"hot_mumber": 0,"is_promote": False,"cat_one_id": 1,"cat_two_id": 3,"cat_three_id": 5},{"goods_id": 43971,"cat_id": 5,"goods_name": "海尔(Haier)LQ55AL88S51 55英寸4K超高清智能网络曲面电视 语音智能遥控","goods_price": 3999,"goods_number": 100,"goods_weight": 100,"goods_big_logo": "http://image4.suning.cn/uimg/b2c/newcatentries/0000000000-000000000646151601_1_800x800.jpg","goods_small_logo": ""+ protocol_IP_port +"/static/get_goods_list_view/0070164812-000000000705355314_1_400x400.jpg","add_time": 1516509754,"upd_time": 1516509754,"hot_mumber": 0,"is_promote": False,"cat_one_id": 1,"cat_two_id": 3,"cat_three_id": 5},{"goods_id": 43970,"cat_id": 5,"goods_name": "Amoi夏新曲面电视机32英寸 特价 智能无线WiFi网络 曲屏3d蓝光数字电视 高清LED液晶彩电 30显示器卧室家用","goods_price": 1059,"goods_number": 100,"goods_weight": 100,"goods_big_logo": "http://image2.suning.cn/uimg/b2c/newcatentries/0070161385-000000000621507039_2_800x800.jpg","goods_small_logo": ""+ protocol_IP_port +"/static/get_goods_list_view/000000000621507039_2_400x400.jpg","add_time": 1516509726,"upd_time": 1516509726,"hot_mumber": 0,"is_promote": False,"cat_one_id": 1,"cat_two_id": 3,"cat_three_id": 5}]},"meta": {"msg": "获取成功","status": 200}
},ensure_ascii=False))

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

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

相关文章

企业气候风险披露、报表词频、文本分析数据集合(2007-2022年)

01、数据介绍 企业气候风险披露是指企业通过一定的方式&#xff0c;将气候变化对其影响、自身采取的应对措施等信息披露出来。这有助于投资者更准确地评估企业价值&#xff0c;发现投资机会&#xff0c;规避投资风险。解企业在气候风险方面的关注度和披露情况。 可以帮助利益…

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…

【yolov8】yolov8剪枝训练流程

yolov8剪枝训练流程 流程&#xff1a; 约束剪枝微调 一、正常训练 yolo train model./weights/yolov8s.pt datayolo_bvn.yaml epochs100 ampFalse projectprun nametrain二、约束训练 2.1 修改YOLOv8代码&#xff1a; ultralytics/yolo/engine/trainer.py 添加内容&#…

R语言4版本安装mvstats(纯新手)

首先下载mvstats.R文件 下载mvstats.R文件点此链接&#xff1a;https://download.csdn.net/download/m0_62110645/89251535 第一种方法 找到mvstats.R的文件安装位置&#xff08;R语言的工作路径&#xff09; getwd() 将mvstats.R保存到工作路径 在R中输入命令 source(&qu…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中&#xff0c;反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…

创新指南|如何通过用户研究打造更好的人工智能产品

每个人都对人工智能感到兴奋&#xff0c;但对错过机会 (FOMO) 的恐惧正在驱使公司将人工智能嵌入到每个产品功能中。这可能会导致以技术为中心的方法&#xff0c;从而掩盖产品开发的基本目标&#xff1a;创建真正解决用户问题并满足他们需求的解决方案。本文将介绍通过用户研究…

HawkEye—高效、细粒度的大页管理算法

文章目录 HawkEye—高效、细粒度的大页管理算法1.作者简介2.文章简介与摘要3.简介(1).当时的SOTA系统概述LinuxFreeBSDIngensHawkEye 4.动机(1).地址翻译开销与内存膨胀(2).缺页中断延迟与缺页中断次数(3).多处理器大页面分配(4).如何测算地址翻译开销&#xff1f; 5.设计与实现…

大长案例 - 通用的三方接口调用方案设计

文章目录 引言身份验证防止重复提交数据完整性和加密回调地址安全事件响应可用性 设计方案概述1. API密钥生成2. 接口鉴权3. 回调地址设置4. 接口API设计 权限划分权限划分概述1. 应用ID&#xff08;AppID&#xff09;2. 应用公钥&#xff08;AppKey&#xff09;【&#xff08;…

安装VMware Tools报错处理(SP1)

一、添加共享文件 因为没有VMware Tools&#xff0c;所以补丁只能通过共享文件夹进行传输了。直接在虚拟机的浏览器下载的话&#xff0c;自带的IE浏览器太老了&#xff0c;网站打不开&#xff0c;共享文件夹会方便一点&#xff0c;大家也可以用自己的方法&#xff0c;能顺利上…

【Go语言快速上手(六)】管道, 网络编程,反射,用法讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; GO快速上手 1. 前言2. 初识管道3. 管…

清新优雅、功能强大的后台管理模板 | 开源日报 No.238

soybeanjs/soybean-admin Stars: 7.0k License: MIT soybean-admin 是一个基于 Vue3、Vite5、TypeScript、Pinia、NaiveUI 和 UnoCSS 的清新优雅且功能强大的后台管理模板。 使用最新流行的技术栈&#xff0c;如 Vue3、Vite5 和 TypeScript。采用清晰的项目架构&#xff0c;易…

Mac M2 本地下载 Xinference

想要在Mac M2 上部署一个本地的模型。看到了Xinference 这个工具 一、Xorbits Inference 是什么 Xorbits Inference&#xff08;Xinference&#xff09;是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&…

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时&#xff0c;又名 容器管理器。简单来说&#xff0c;它是一个守护进程&#xff0c;在单个主机上管理完整的容器生命周期&#xff1a;创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…

screen服务使用解析

一、为什么要使用screen服务 当我们在进行一些常见的远程操作时&#xff0c;通常首先会先进行远程ssh登录 或者telnet连接到远程服务器上&#xff0c;然后执行相关操作&#xff0c;或程序启动等。 1、程序所需的执行时间过长&#xff0c;可能需要挂载几天的那种&#xff0c;可…

Linux(ubuntu)—— 用户管理user 用户组group

一、用户 1.1、查看所有用户 cat /etc/passwd 1.2、新增用户 useradd 命令&#xff0c;我这里用的是2.4的命令。 然后&#xff0c;需要设置密码 passwd student 只有root用户才能用passwd命令设置其他用户的密码&#xff0c;普通用户只能够设置自己的密码 二、组 2.1查看…

基于ROS从零开始构建自主移动机器人:仿真和硬件

书籍&#xff1a;Build Autonomous Mobile Robot from Scratch using ROS&#xff1a;Simulation and Hardware 作者&#xff1a;Rajesh Subramanian 出版&#xff1a;Apress 书籍下载-《基于ROS从零开始构建自主移动机器人&#xff1a;仿真和硬件》您将开始理解自主机器人发…

aic8800 linux

编译方法参考 http://t.csdnimg.cn/epR89 aic8800 源码在 github 里。同样需要 cfg80211 和 mac80211 aic_load_fw/aic_load_fw.ko aic8800_fdrv/aic8800_fdrv.ko都放到放 .ko 的地方 src/USB/driver_fw/drivers/aic8800 就是源码&#xff0c;没有蓝牙的型号不需要aic_btusb …

ip地址与硬件地址的区别是什么

在数字世界的浩瀚海洋中&#xff0c;每一台联网的设备都需要一个独特的标识来确保信息的准确传输。这些标识&#xff0c;我们通常称之为IP地址和硬件地址。虽然它们都是用来识别网络设备的&#xff0c;但各自扮演的角色和所处的层次却大相径庭。虎观代理小二将带您深入了解IP地…

6.k8s中的secrets资源

一、Secret secrets资源&#xff0c;类似于configmap资源&#xff0c;只是secrets资源是用来传递重要的信息的&#xff1b; secret资源就是将value的值使用base64编译后传输&#xff0c;当pod引用secret后&#xff0c;k8s会自动将其base64的编码&#xff0c;反编译回正常的字符…

HTTP/1.1、HTTP/2、HTTP/3 的演变

HTTP/1.1、HTTP/2、HTTP/3 的演变 HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f;HTTP/2 做了什么优化&#xff1f;HTTP/3 做了哪些优化&#xff1f; HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f; HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接的…