admin管理员组

文章数量:1531443

大厂后台管理passportal鉴权登录的通行做法-之腾讯云研究

目录

大厂后台管理passportal鉴权登录的通行做法-之腾讯云研究

一、研究的目的

二、大厂通常的做法

2.1、导航器生效载入来源页面即刻携带Cookies发页面get请求

2.2、加载并执行页面中的link外部链接并相应执行对应的缓存策略

2.3、依次加载并执行页面body的元素及script脚本

2.4、导航器生效载入来源页面中script专门的js代码触发204请求

        而不是像Vue-Element-Admin默认那样做“401鉴权校验Token有效性” 

2.5、根据204请求结果将基本状态信息更新写入本地存储

2.6、当用户点击“登录”链接时方执行“OAuth2鉴权及登录”流程

2.7、返回“OAuth2鉴权登录”后的“控制台”页面


一、研究的目的

        通常,大厂在做前端的后台管理应用时,会充分考虑“用户体验”和“公开的信息的展示”,而不是一开始导航,就让用户“登录”进行“鉴权”作业流程;而且“鉴权与登录”通常会考虑“双因素验证法”(甚至多因素验证),比如:手机验证码加强鉴权、可信三方登录验证(比如QQ登录、微信登录):

二、大厂通常的做法

2.1、导航器生效载入来源页面即刻携带Cookies发页面get请求

<!DOCTYPE html>
<html lang="zh">
<head>
<!-- 1、与设备兼容性相关的centent-type的设置  : -->
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, maximum-scale=1">
<!-- 2、首次计时: -->
	<script>var timeStamps = [new Date()];</script>
<!-- 3、文档默认的字符集编码: -->
	<meta charset="utf-8">
<!-- 4、title的标准位置: -->
	<title>腾讯云 产业智变·云启未来 - 腾讯</title>
<!-- 5、一些其它的文档的meta原数据字段的键值对设置 : -->
	<meta name="keywords" content="腾讯云,云服务器,云主机,CDN,对象存储,域名注册备案,云存储,云数据库,互联网+解决方案,QQ云">
	<meta name="description" content="腾讯云为数百万的企业和开发者提供安全稳定的云计算服务,涵盖云服务器、云数据库、云存储、视频与CDN、域名注册等全方位云服务和各行业解决方案。">
	<meta property="og:title" content="腾讯云 - 产业智变 云启未来" />
	<meta property="og:description" content="腾讯云为数百万的企业和开发者提供安全稳定的云计算服务,涵盖云服务器、云数据库、云存储、视频与CDN、域名注册等全方位云服务和各行业解决方案。" />
	<meta property="og:image" content="https://cloudcache.tencent-cloud/open_proj/proj_qcloud_v2/gateway/shareicons/cloud.png" />
	<meta property="og:url" content="https://cloud.tencent" />
	<meta name="format-detection" content="telephone=no">
	<meta name="baidu-site-verification" content="Yqh6LFzxHs" />
	<meta name="google-site-verification" content="FLzxWYFG80Hk_XLvVz6GpBdsY-f7fdNfnucHDWWCr7k" />
	<meta name="shenma-site-verification" content="d33db0ae4613f827196c6e785aaeee4d_1593673238" />
	<meta name="360-site-verification" content="943b53dde1f410dc44724f15d9e11954" />
	<meta name="sogou_site_verification" content="j0R8AKzqAJ" />
	<meta name="bytedance-verification-code" content="" />

<!-- 6、开始加载各类“外部链接”,rel表示“关系(relationship,又称Link_types链接类型),href代表资源链接  : -->

<!-- 链接类型: https://developer.mozilla/zh-CN/docs/Web/HTML/Link_types -->

<!-- 假设后期需要使用的信息的“预下载及缓存(预请求):link rel="prefetch的两种类型",安全上下文,prefetch为“非标准请求”: -->
<!-- 6.1、假设后期需要使用的“DNS预请求”:link rel="dns-prefetch" href="//(子域名或)域名" :-->
	<link rel="dns-prefetch" href="//cloudcache.tencent-cloud">
	<link rel="dns-prefetch" href="//qzs.qq">
<!-- 6.2、假设后期需要使用的“网页链接预请求”:link rel="dns-prefetch" href="//(子域名或)域名"  :-->

<!-- 6.3、被于被创建站点图标 (比如PC端的“favicon”图标和移动设备上显示在主屏幕的图标)  :-->
	<link rel="icon" href="/favicon.ico?t=201902181234" type="image/x-icon"/>

<!-- 6.4、link 的 alternate 定义了一个可替换的样式表,它和第一个 link 元素同时使用,第一个定义了首选样式,而 alternate 则让用户可选择替换的样式。但这个替换操作需要 浏览器支持,但很多浏览器比如 IE 都是不支持的。所以使用到替换样式的网页,一般都用一些样式表切换的 JS,让用户可以自由切换界面样式。这个应该大家都见过,一些网站会给网页定义多种配色。 稍高阶的一些,还可以利用 JS 弄成随时间变化样式的,比如白天的时候显示成明色,晚上的时候显示成暗色  :-->

	<link rel="alternate" href="https://cloud.tencent/" hreflang="zh-Hans"/>
	<link rel="alternate" href="https://www.tencentcloud/zh/" hreflang="zh-Hant"/>
	<link rel="alternate" href="https://www.tencentcloud/jp/" hreflang="ja"/>
	<link rel="alternate" href="https://www.tencentcloud/ko/" hreflang="ko"/>
	<link rel="alternate" href="https://www.tencentcloud/pt/" hreflang="pt"/>
	<link rel="alternate" href="https://www.tencentcloud/ind/" hreflang="id"/>
	<link rel="alternate" href="https://www.tencentcloud/en/" hreflang="en"/>
	<link rel="alternate" href="https://www.tencentcloud/" hreflang="x-default"/>

<!-- 6.5、link 的 canonical 规范链接元素是一个 HTML 元素,它通过指定 web 页面的“规范”或“首选”版本作为搜索引擎优化的一部分,帮助网站管理员防止搜索引擎优化中出现重复内容问题  :-->
<!-- 来自维基百科: https://en.wikipedia/wiki/Canonical_link_element -->
<!-- 当可以从多个URL访问相同的内容时,会出现重复的内容问题。例如,http://www.example/page.html会被搜索引擎视为与http://www.example/page.html?parameter=1完全不同的页面,即使两个 URL 可能引用相同的内容。 -->

	<link rel="canonical" href="https://cloud.tencent/">

<!-- 6.6、preload预加载:表示用户十分有可能需要在当前浏览中加载目标资源,所以浏览器必须预先获取和缓存对应资源,preload值允许您在 HTML 中声明获取请求,指定页面很快需要的资源,您希望在页面生命周期的早期开始加载,在浏览器的主要渲染机制启动之前。这确保它们是更早可用并且不太可能阻塞页面的呈现,从而提高性能。即使名称包含术语load,它也不会加载和执行脚本,而只会安排它以更高的优先级下载和缓存。使用preload预加载的链接类型,必须同时声明href资源路径、和as资源类型。 https://html.spec.whatwg/multipage/links.html#link-type-preload 比如: -->
<!-- link rel="preload" href="style.css" as="style"  -->
<!-- link rel="preload" href="main.js" as="script"  -->
<!-- 注意,as属性可以采用的完整值列表受 Fetch 规范的约束————参阅请求目的地:https://fetch.spec.whatwg/#concept-request-destination  -->
<!-- preload预加载的好处:  
  1)、◆预加载了 CSS 和 JavaScript 文件,以便稍后在页面渲染需要它们时立即使用它们;发现的资源越晚并且需要使用它们时,这个资源其在本机体现出的文件就越大、内容越多;
  2)、◆as内容类型允许浏览器:更准确地优先加载资源;存储在缓存中以供将来的请求使用,并在适当的情况下重用资源;将正确的内容安全策略(csp)应用于资源https://developer.mozilla/en-US/docs/Web/HTTP/CSP ;为其设置正确的Accept请求标头(请求头的内容类型MIME types、内容协商机制content negotiation、响应头中的内容类型Content-Type) https://developer.mozilla/en-US/docs/Web/HTTP/Headers/Accept
    Accept请求头: 用来告知(服务器)客户端可以处理的内容类型,这种内容类型用MIME 类型来表示。借助内容协商机制, 服务器可以从诸多备选项中选择一项进行应用,并使用 Content-Type 应答头通知客户端它的选择。浏览器会基于请求的上下文来为这个请求头设置合适的值,比如获取一个 CSS 层叠样式表时值与获取图片、视频或脚本文件时的值是不同的。
    CSP内容安全策略:  https://developer.mozilla/en-US/docs/Web/HTTP/CSP
-->
<!-- 可能的as属性值是:audio、document(旨在由<frame>或嵌入的 HTML 文档<iframe>)、embed(要嵌入到<embed>元素中的资源)、fetch(通过 fetch 或 XHR 请求访问的资源,例如 ArrayBuffer、WebAssembly/WASM 二进制文件或 JSON 文件)、font、image、object(要嵌入到<object>元素中的资源)、script、style、track(WebVTT 文件)、video、worker(一个 JavaScript 网络worker或共享worker)  -->


<!-- 7、头部脚本明确文档级别的“域/源”的主机名:  -->

	<script>document.domain = 'cloud.tencent';</script>

<!-- 8、第2次计时开始(使用计时的时间类型数组): -->

	<script>timeStamps[1] = new Date();</script>

<!-- 等等.... -->

</head>

<!-- 等等.... -->

<body>

<!-- 等等.... -->

</body>

</html>

<!DOCTYPE html>
<html lang="zh">
<head>
<!-- 1、与设备兼容性相关的centent-type的设置  : -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, maximum-scale=1">
<!-- 2、首次计时: -->
    <script>var timeStamps = [new Date()];</script>
<!-- 3、文档默认的字符集编码: -->
    <meta charset="utf-8">
<!-- 4、title的标准位置: -->
    <title>腾讯云 产业智变·云启未来 - 腾讯</title>
<!-- 5、一些其它的文档的meta原数据字段的键值对设置 : -->
    <meta name="keywords" content="腾讯云,云服务器,云主机,CDN,对象存储,域名注册备案,云存储,云数据库,互联网+解决方案,QQ云">
    <meta name="description" content="腾讯云为数百万的企业和开发者提供安全稳定的云计算服务,涵盖云服务器、云数据库、云存储、视频与CDN、域名注册等全方位云服务和各行业解决方案。">
    <meta property="og:title" content="腾讯云 - 产业智变 云启未来" />
    <meta property="og:description" content="腾讯云为数百万的企业和开发者提供安全稳定的云计算服务,涵盖云服务器、云数据库、云存储、视频与CDN、域名注册等全方位云服务和各行业解决方案。" />
    <meta property="og:image" content="https://cloudcache.tencent-cloud/open_proj/proj_qcloud_v2/gateway/shareicons/cloud.png" />
    <meta property="og:url" content="https://cloud.tencent" />
    <meta name="format-detection" content="telephone=no">
    <meta name="baidu-site-verification" content="Yqh6LFzxHs" />
    <meta name="google-site-verification" content="FLzxWYFG80Hk_XLvVz6GpBdsY-f7fdNfnucHDWWCr7k" />
    <meta name="shenma-site-verification" content="d33db0ae4613f827196c6e785aaeee4d_1593673238" />
    <meta name="360-site-verification" content="943b53dde1f410dc44724f15d9e11954" />
    <meta name="sogou_site_verification" content="j0R8AKzqAJ" />
    <meta name="bytedance-verification-code" content="" />

<!-- 6、开始加载各类“外部链接”,rel表示“关系(relationship,又称Link_types链接类型),href代表资源链接  : -->

<!-- 链接类型: https://developer.mozilla/zh-CN/docs/Web/HTML/Link_types -->

<!-- 假设后期需要使用的信息的“预下载及缓存(预请求):link rel="prefetch的两种类型",安全上下文,prefetch为“非标准请求”: -->
<!-- 6.1、假设后期需要使用的“DNS预请求”:link rel="dns-prefetch" href="//(子域名或)域名" :-->
    <link rel="dns-prefetch" href="//cloudcache.tencent-cloud">
    <link rel="dns-prefetch" href="//qzs.qq">
<!-- 6.2、假设后期需要使用的“网页链接预请求”:link rel="dns-prefetch" href="//(子域名或)域名"  :-->

<!-- 6.3、被于被创建站点图标 (比如PC端的“favicon”图标和移动设备上显示在主屏幕的图标)  :-->
    <link rel="icon" href="/favicon.ico?t=201902181234" type="image/x-icon"/>

<!-- 6.4、link 的 alternate 定义了一个可替换的样式表,它和第一个 link 元素同时使用,第一个定义了首选样式,而 alternate 则让用户可选择替换的样式。但这个替换操作需要 浏览器支持,但很多浏览器比如 IE 都是不支持的。所以使用到替换样式的网页,一般都用一些样式表切换的 JS,让用户可以自由切换界面样式。这个应该大家都见过,一些网站会给网页定义多种配色。 稍高阶的一些,还可以利用 JS 弄成随时间变化样式的,比如白天的时候显示成明色,晚上的时候显示成暗色  :-->

    <link rel="alternate" href="https://cloud.tencent/" hreflang="zh-Hans"/>
    <link rel="alternate" href="https://www.tencentcloud/zh/" hreflang="zh-Hant"/>
    <link rel="alternate" href="https://www.tencentcloud/jp/" hreflang="ja"/>
    <link rel="alternate" href="https://www.tencentcloud/ko/" hreflang="ko"/>
    <link rel="alternate" href="https://www.tencentcloud/pt/" hreflang="pt"/>
    <link rel="alternate" href="https://www.tencentcloud/ind/" hreflang="id"/>
    <link rel="alternate" href="https://www.tencentcloud/en/" hreflang="en"/>
    <link rel="alternate" href="https://www.tencentcloud/" hreflang="x-default"/>

<!-- 6.5、link 的 canonical 规范链接元素是一个 HTML 元素,它通过指定 web 页面的“规范”或“首选”版本作为搜索引擎优化的一部分,帮助网站管理员防止搜索引擎优化中出现重复内容问题  :-->
<!-- 来自维基百科: https://en.wikipedia/wiki/Canonical_link_element -->
<!-- 当可以从多个URL访问相同的内容时,会出现重复的内容问题。例如,http://www.example/page.html会被搜索引擎视为与http://www.example/page.html?parameter=1完全不同的页面,即使两个 URL 可能引用相同的内容。 -->

    <link rel="canonical" href="https://cloud.tencent/">

<!-- 6.6、preload预加载:表示用户十分有可能需要在当前浏览中加载目标资源,所以浏览器必须预先获取和缓存对应资源,preload值允许您在 HTML 中声明获取请求,指定页面很快需要的资源,您希望在页面生命周期的早期开始加载,在浏览器的主要渲染机制启动之前。这确保它们是更早可用并且不太可能阻塞页面的呈现,从而提高性能。即使名称包含术语load,它也不会加载和执行脚本,而只会安排它以更高的优先级下载和缓存。使用preload预加载的链接类型,必须同时声明href资源路径、和as资源类型。 https://html.spec.whatwg/multipage/links.html#link-type-preload 比如: -->
<!-- link rel="preload" href="style.css" as="style"  -->
<!-- link rel="preload" href="main.js" as="script"  -->
<!-- 注意,as属性可以采用的完整值列表受 Fetch 规范的约束————参阅请求目的地:https://fetch.spec.whatwg/#concept-request-destination  -->
<!-- preload预加载的好处:  
  1)、◆预加载了 CSS 和 JavaScript 文件,以便稍后在页面渲染需要它们时立即使用它们;发现的资源越晚并且需要使用它们时,这个资源其在本机体现出的文件就越大、内容越多;
  2)、◆as内容类型允许浏览器:更准确地优先加载资源;存储在缓存中以供将来的请求使用,并在适当的情况下重用资源;将正确的内容安全策略(csp)应用于资源https://developer.mozilla/en-US/docs/Web/HTTP/CSP ;为其设置正确的Accept请求标头(请求头的内容类型MIME types、内容协商机制content negotiation、响应头中的内容类型Content-Type) https://developer.mozilla/en-US/docs/Web/HTTP/Headers/Accept
    Accept请求头: 用来告知(服务器)客户端可以处理的内容类型,这种内容类型用MIME 类型来表示。借助内容协商机制, 服务器可以从诸多备选项中选择一项进行应用,并使用 Content-Type 应答头通知客户端它的选择。浏览器会基于请求的上下文来为这个请求头设置合适的值,比如获取一个 CSS 层叠样式表时值与获取图片、视频或脚本文件时的值是不同的。
    CSP内容安全策略:  https://developer.mozilla/en-US/docs/Web/HTTP/CSP
-->
<!-- 可能的as属性值是:audio、document(旨在由<frame>或嵌入的 HTML 文档<iframe>)、embed(要嵌入到<embed>元素中的资源)、fetch(通过 fetch 或 XHR 请求访问的资源,例如 ArrayBuffer、WebAssembly/WASM 二进制文件或 JSON 文件)、font、image、object(要嵌入到<object>元素中的资源)、script、style、track(WebVTT 文件)、video、worker(一个 JavaScript 网络worker或共享worker)  -->


<!-- 7、头部脚本明确文档级别的“域/源”的主机名:  -->

    <script>document.domain = 'cloud.tencent';</script>

<!-- 8、第2次计时开始(使用计时的时间类型数组): -->

    <script>timeStamps[1] = new Date();</script>

<!-- 等等.... -->

</head>

<!-- 等等.... -->

<body>

<!-- 等等.... -->

</body>

</html>

2.2、加载并执行页面中的link外部链接并相应执行对应的缓存策略

        如果页面不是“service worker”的上下文,而是普通“渲染主进程”的上下文:

        主要是一些style、icon图标、script、 图片、cdn三方加速等资源,及预加载preload、预下载prefetch等资源,和搜索引擎优化资源,并对其进行必要的“缓存”:

        “缓存”信息, 一般,<link>中的css、js和页面中即刻需要加载的图片,是直接缓存到“内存”(Memory Cache);<link>中的icon特殊,浏览器只对其进行一次404鉴定且统一缓存到磁盘(Disk Cache);而<link>中的其它图片等文件,首次均缓存到“内存”,二次刷新或重新打开,一般缓存到“磁盘”(Disk Cache)以节省内存;其它的,凡是与一般是缓存到“磁盘”(Disk Cache,因为它们直接与xhr等http、H5的fetch相关,所以也称为“Http Cache”)。而其它的以下的<body>中的js,若是文件,缓存到磁盘,直接脚本则缓存到内存,但这不是绝对的,而是取决于“脚本代码及后端服务具体的发送代码”:一般是缓存到“磁盘”(Disk Cache,因为它们直接与xhr等http、H5的fetch相关,所以也称为“Http Cache”):

2.3、依次加载并执行页面body的元素及script脚本

        其中,默认<script>块,整体是“阻塞”的,具体取决与其中的代码(是同步的还是异步请求):

<!DOCTYPE html>
<html lang="zh">
<head>

        <!-- 等等.... -->

</head>

<body>
        <!-- 等等,依次执行script脚本, 比如:.... -->
<script>
	window.ISMOBILE = false;
</script>
<script>window.__language = 'zh'</script>
        <!-- 等等.... -->
<script>timeStamps[3] = new Date();</script>
<script>window.__CDN_DOMAIN = 'cloudcache.tencent-cloud'</script>
<script>window.__wxMfaQrcodeMode = 'weapp'</script>

<script src="//cloudcache.tencent-cloud/qcloud/main/scripts/release/common/vendors/babel/polyfill.6.26.min.js?max-age=31536000">
</script>

<script src="https://cdn-go/tam/aegis-sdk/latest/aegis.min.js"></script>
<script>
  if (window.Aegis) {
    var aegis = window.aegisIns = new Aegis({
      id: "dWOw9fv7jg4XmVzQ09", pagePerformance: true, onError: true,
      ext1: "dc154a2c81139d41e57d330503fb365d",
      beforeRequest: function (data) {
        // load js failed
        if (data.logType === 'log' && data.logs.level === '32' && data.logs.msg.indexOf('google') > -1) {
          return false;
        }
        if (/bot/i.test(navigator.userAgent)) {
          return false;
        }
      }
    })
  }
</script>

<script src="//cloudcache.tencent-cloud/qcloud/main/scripts/release/common/base.c9f6fc3ef1ac545931f6.js?max_age=31536000">
</script>
<script src="//cloudcache.tencent-cloud/qcloud/main/scripts/release/common/deps.419c3c4536f705cc9688.js?max_age=31536000">
</script>

		<script>
			window.__QCPortalContext__ = {
				version: "0.3.0",

				resource: {},

				$getCurrServerTime: (function(s, c) {return function(){return +new Date()+s-c;}})(1666573489075, +new Date()),
			}
		</script>
		<script src="https://cloudcache.tencent-cloud/qcloud/portal/kit/full.32fd7d003.js"></script>
		<script>
			if (window.QCPortalKit) {
				window.QCPortalKit.init({"topNav":{"theme":"air"},"version":2,"site":{"replaceUrlTLDScope":"page"},"footer":{"disable":false},"floatBar":{"disable":false}})
			}
		</script>

<script>
		window.__PAGE_CONFIG={"k7GPkhpuhT":{"schema":"heroSlide","data":{"title":"个人开发者上云福利","desc":"手把手教您从零开始搭建网站、Minecraft游戏服务器、图床、网盘、GPU渲染训练等,畅享云端新生活","link":{"text":"立即抢购","to":"https://cloud.tencent/act/pro/developer_business-scenario?from=18437"},"mobile":{"bgImage":"https://qcloudimg.tencent-cloud/raw/b76d2f1ec45a0b24eed058ee9f4348ce.png","desc":"1988元优惠券限量领!手把手教您从零开始搭建网站","title":"个人开发者上云福利"},"model":{"url":"https://qcloudimg.tencent-cloud/raw/2eb1238c5a116c572c6e8ca2ba58f2c8.glb","meshes":"{\"soft_light\":{\"roughness\":0.2,\"metalness\":1,\"color\":12897753,\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"glass_light\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}},\"soft_light1\":{\"roughness\":0.2,\"metalness\":1,\"color\":12897753,\"emissive\":\"#9daadd\",\"opacity\":1,\"transparent\":true},\"soft_mid1\":{\"roughness\":0.21,\"metalness\":1,\"color\":4686576,\"emissive\":\"#4d72e0\",\"opacity\":1,\"transparent\":true},\"soft_mid2\":{\"roughness\":0.2,\"metalness\":1,\"color\":9279914,\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_dark\":{\"roughness\":0.21,\"metalness\":1,\"color\":\"#70a2ff\",\"emissive\":\"#315cdd\",\"opacity\":1,\"transparent\":true},\"soft_mid\":{\"roughness\":0.2,\"metalness\":1,\"color\":9279914,\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_mid3\":{\"roughness\":0.2,\"metalness\":1,\"color\":14412543,\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_mid4\":{\"roughness\":0.2,\"metalness\":1,\"color\":12897753,\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"glass_mid\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.1,\"metalness\":0.2,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"}},\"glass_light_1\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}}}"},"activity":{},"image":"https://qcloudimg.tencent-cloud/raw/8287fcd77ec8665a22b89040790eb705.png","bgImage":"https://main.qcloudimg/trisys/assets/home/images/hero/demo-ani-bg.jpg"},
"id":"k7GPkhpuhT","pid":"96OjuolXb3","pslot":"slides"},"1cWXgNxa1N":{"schema":"heroEntry","data":{"title":"云服务器 CVM","desc":"提供安全可靠的弹性计算服务","to":"https://cloud.tencent/product/cvm?from=13950","icon":"https://main.qcloudimg/trisys/assets/home/images/hero/entry-cvm.png","mobile":{"title":"云服务器"}},
"id":"TO2dEjDs6lJdQtxLeyXmP","pid":"96OjuolXb3","pslot":"slides"},"cGgBY3Z6BJM0sQpru12DJ":{"schema":"heroSlide","data":{"title":"即时通信升级低代码 UI 组件","desc":"支持 H5 / Web /小程序等多平台接入,30分钟搭建您的专属 IM 应用,IM 专业版89.9元/月起","link":{"text":"立即抢购","to":"https://cloud.tencent/act/pro/immini?from=18459"},"mobile":{"bgImage":"https://qcloudimg.tencent-cloud/raw/c37b0a9eb7c8f1b50623d44fa7db9c2e.jpg","desc":"支持多平台接入,IM 专业版89.9元/月起","title":"即时通信升级低代码 UI 组件"},"model":{"url":"https://qcloudimg.tencent-cloud/raw/96fc8f2e8b37fe27289b83f6e5ab12ad.glb","meshes":"{\"glass_light_ci\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}},\"soft_light_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light10_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light4_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light3_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light2_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light6_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#9099bb\",\"opacity\":1,\"transparent\":true},\"soft_light4_1_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_mid2_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#8d99aa\",\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_mid1_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#8091a8\",\"emissive\":\"#809ad6\",\"opacity\":0.99,\"transparent\":true},\"soft_light_1_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"glass_mid3_ci\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.1,\"metalness\":0.2,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"}},\"glass_light1_ci\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}},\"soft_light7_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#838db4\",\"opacity\":1,\"transparent\":true},\"soft_dark_ci\":{\"roughness\":0.21,\"metalness\":1,\"color\":\"#70a2ff\",\"emissive\":\"#315cdd\",\"opacity\":1,\"transparent\":true}}\n"},"activity":{},"image":"https://qcloudimg.tencent-cloud/raw/2b643a4438aa0a2b5c6c4eba2905645c.png","bgImage":"https://main.qcloudimg/trisys/assets/home/images/hero/demo-ani-bg.jpg"},"id":"cGgBY3Z6BJM0sQpru12DJ","pid":"96OjuolXb3","pslot":"slides"}}</script><script type="module" crossorigin src="https://cloudcache.tencent-cloud/qcloud/portal/home/assets/index.30e7f547.js">
</script>

<script type="module">
!function(){try{new Function("m","return import(m)")}catch(o){console.warn("vite: loading legacy build because dynamic import is unsupported, syntax error above should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}}();
</script>

<script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
  <script nomodule id="vite-legacy-polyfill" src="https://cloudcache.tencent-cloud/qcloud/portal/home/assets/polyfills-legacy.7aa5233f.js"></script>
  <script nomodule id="vite-legacy-entry" data-src="https://cloudcache.tencent-cloud/qcloud/portal/home/assets/index-legacy.7c78ca3b.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))

</script>

<script>timeStamps[4] = new Date();</script>
<script>
	
	$(document).ready(function() {
		timeStamps[5] = new Date();
	});
	$(window).load(function() {
		timeStamps[6] = new Date();
		window.timeStat && window.timeStat(7822, 13, 37, timeStamps, 0);
		window.TCISD && window.TCISD.performanceTimeStat([7822, 13, 2], 10);
	});
</script>

        <!-- 等等.... -->

        <!-- 等等.... -->

</body>

</html>

<!DOCTYPE html>
<html lang="zh">
<head>

        <!-- 等等.... -->

</head>

<body>
        <!-- 等等,依次执行script脚本, 比如:.... -->
<script>
    window.ISMOBILE = false;
</script>
<script>window.__language = 'zh'</script>
        <!-- 等等.... -->
<script>timeStamps[3] = new Date();</script>
<script>window.__CDN_DOMAIN = 'cloudcache.tencent-cloud'</script>
<script>window.__wxMfaQrcodeMode = 'weapp'</script>

<script src="//cloudcache.tencent-cloud/qcloud/main/scripts/release/common/vendors/babel/polyfill.6.26.min.js?max-age=31536000">
</script>

<script src="https://cdn-go/tam/aegis-sdk/latest/aegis.min.js"></script>
<script>
  if (window.Aegis) {
    var aegis = window.aegisIns = new Aegis({
      id: "dWOw9fv7jg4XmVzQ09", pagePerformance: true, onError: true,
      ext1: "dc154a2c81139d41e57d330503fb365d",
      beforeRequest: function (data) {
        // load js failed
        if (data.logType === 'log' && data.logs.level === '32' && data.logs.msg.indexOf('google') > -1) {
          return false;
        }
        if (/bot/i.test(navigator.userAgent)) {
          return false;
        }
      }
    })
  }
</script>

<script src="//cloudcache.tencent-cloud/qcloud/main/scripts/release/common/base.c9f6fc3ef1ac545931f6.js?max_age=31536000">
</script>
<script src="//cloudcache.tencent-cloud/qcloud/main/scripts/release/common/deps.419c3c4536f705cc9688.js?max_age=31536000">
</script>

        <script>
            window.__QCPortalContext__ = {
                version: "0.3.0",

                resource: {},

                $getCurrServerTime: (function(s, c) {return function(){return +new Date()+s-c;}})(1666573489075, +new Date()),
            }
        </script>
        <script src="https://cloudcache.tencent-cloud/qcloud/portal/kit/full.32fd7d003.js"></script>
        <script>
            if (window.QCPortalKit) {
                window.QCPortalKit.init({"topNav":{"theme":"air"},"version":2,"site":{"replaceUrlTLDScope":"page"},"footer":{"disable":false},"floatBar":{"disable":false}})
            }
        </script>

<script>
        window.__PAGE_CONFIG={"k7GPkhpuhT":{"schema":"heroSlide","data":{"title":"个人开发者上云福利","desc":"手把手教您从零开始搭建网站、Minecraft游戏服务器、图床、网盘、GPU渲染训练等,畅享云端新生活","link":{"text":"立即抢购","to":"https://cloud.tencent/act/pro/developer_business-scenario?from=18437"},"mobile":{"bgImage":"https://qcloudimg.tencent-cloud/raw/b76d2f1ec45a0b24eed058ee9f4348ce.png","desc":"1988元优惠券限量领!手把手教您从零开始搭建网站","title":"个人开发者上云福利"},"model":{"url":"https://qcloudimg.tencent-cloud/raw/2eb1238c5a116c572c6e8ca2ba58f2c8.glb","meshes":"{\"soft_light\":{\"roughness\":0.2,\"metalness\":1,\"color\":12897753,\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"glass_light\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}},\"soft_light1\":{\"roughness\":0.2,\"metalness\":1,\"color\":12897753,\"emissive\":\"#9daadd\",\"opacity\":1,\"transparent\":true},\"soft_mid1\":{\"roughness\":0.21,\"metalness\":1,\"color\":4686576,\"emissive\":\"#4d72e0\",\"opacity\":1,\"transparent\":true},\"soft_mid2\":{\"roughness\":0.2,\"metalness\":1,\"color\":9279914,\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_dark\"

:{\"roughness\":0.21,\"metalness\":1,\"color\":\"#70a2ff\",\"emissive\":\"#315cdd\",\"opacity\":1,\"transparent\":true},\"soft_mid\":{\"roughness\":0.2,\"metalness\":1,\"color\":9279914,\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_mid3\":{\"roughness\":0.2,\"metalness\":1,\"color\":14412543,\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_mid4\":{\"roughness\":0.2,\"metalness\":1,\"color\":12897753,\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"glass_mid\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.1,\"metalness\":0.2,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"}},\"glass_light_1\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}}}"},"activity":{},"image":"https://qcloudimg.tencent-cloud/raw/8287fcd77ec8665a22b89040790eb705.png","bgImage":"https://main.qcloudimg/trisys/assets/home/images/hero/demo-ani-bg.jpg"},
"id":"k7GPkhpuhT","pid":"96OjuolXb3","pslot":"slides"},"1cWXgNxa1N":{"schema":"heroEntry","data":{"title":"云服务器 CVM","desc":"提供安全可靠的弹性计算服务","to":"https://cloud.tencent/product/cvm?from=13950","icon":"https://main.qcloudimg/trisys/assets/home/images/hero/entry-cvm.png","mobile":{"title":"云服务器"}},

        <!-- 等等.... -->

        <!-- 等等.... -->

"id":"TO2dEjDs6lJdQtxLeyXmP","pid":"96OjuolXb3","pslot":"slides"},"cGgBY3Z6BJM0sQpru12DJ":{"schema":"heroSlide","data":{"title":"即时通信升级低代码 UI 组件","desc":"支持 H5 / Web /小程序等多平台接入,30分钟搭建您的专属 IM 应用,IM 专业版89.9元/月起","link":{"text":"立即抢购","to":"https://cloud.tencent/act/pro/immini?from=18459"},"mobile":{"bgImage":"https://qcloudimg.tencent-cloud/raw/c37b0a9eb7c8f1b50623d44fa7db9c2e.jpg","desc":"支持多平台接入,IM 专业版89.9元/月起","title":"即时通信升级低代码 UI 组件"},"model":{"url":"https://qcloudimg.tencent-cloud/raw/96fc8f2e8b37fe27289b83f6e5ab12ad.glb","meshes":"{\"glass_light_ci\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}},\"soft_light_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light10_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light4_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light3_ci\":

        <!-- 等等.... -->

        <!-- 等等.... -->

{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light2_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_light6_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#9099bb\",\"opacity\":1,\"transparent\":true},\"soft_light4_1_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"soft_mid2_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#8d99aa\",\"emissive\":\"#7d88ba\",\"opacity\":0.99,\"transparent\":true},\"soft_mid1_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#8091a8\",\"emissive\":\"#809ad6\",\"opacity\":0.99,\"transparent\":true},\"soft_light_1_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#7b83a3\",\"opacity\":1,\"transparent\":true},\"glass_mid3_ci\":{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.1,\"metalness\":0.2,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#d6dcfa\"}},\"glass_light1_ci\":

        <!-- 等等.... -->

        <!-- 等等.... -->

{\"frontMaterial\":{\"side\":0,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.97,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"},\"backMaterial\":{\"side\":1,\"transparent\":true,\"roughness\":0.01,\"metalness\":0.01,\"transmission\":0.71,\"reflectivity\":1,\"envMapIntensity\":2,\"color\":\"#98a0e1\"}},\"soft_light7_ci\":{\"roughness\":0.2,\"metalness\":1,\"color\":\"#c4cdd9\",\"emissive\":\"#838db4\",\"opacity\":1,\"transparent\":true},\"soft_dark_ci\":{\"roughness\":0.21,\"metalness\":1,\"color\":\"#70a2ff\",\"emissive\":\"#315cdd\",\"opacity\":1,\"transparent\":true}}\n"},"activity":{},"image":"https://qcloudimg.tencent-cloud/raw/2b643a4438aa0a2b5c6c4eba2905645c.png","bgImage":"https://main.qcloudimg/trisys/assets/home/images/hero/demo-ani-bg.jpg"},"id":"cGgBY3Z6BJM0sQpru12DJ","pid":"96OjuolXb3","pslot":"slides"}}</script><script type="module" crossorigin src="https://cloudcache.tencent-cloud/qcloud/portal/home/assets/index.30e7f547.js">
</script>

<script type="module">
!function(){try{new Function("m","return import(m)")}catch(o){console.warn("vite: loading legacy build because dynamic import is unsupported, syntax error above should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.οnlοad=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}}();
</script>

<script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
  <script nomodule id="vite-legacy-polyfill" src="https://cloudcache.tencent-cloud/qcloud/portal/home/assets/polyfills-legacy.7aa5233f.js"></script>
  <script nomodule id="vite-legacy-entry" data-src="https://cloudcache.tencent-cloud/qcloud/portal/home/assets/index-legacy.7c78ca3b.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))

</script>

<script>timeStamps[4] = new Date();</script>
<script>
    
    $(document).ready(function() {
        timeStamps[5] = new Date();
    });
    $(window).load(function() {
        timeStamps[6] = new Date();
        window.timeStat && window.timeStat(7822, 13, 37, timeStamps, 0);
        window.TCISD && window.TCISD.performanceTimeStat([7822, 13, 2], 10);
    });
</script>

        <!-- 等等.... -->

        <!-- 等等.... -->

</body>

</html>

        js中的具体代码:

        以上及以下的文章描述,涉及到相关“存储和缓存”的规则,参考本人另外一篇专门的博客:

https://blog.csdn/pulledup/article/details/127395106

2.4、导航器生效载入来源页面中script专门的js代码触发204请求

        而不是像Vue-Element-Admin默认那样做“401鉴权校验Token有效性” 

        <script>代码中,页面oncreate即触发204请求,检查来自协议安全的跨域第三方安全页面的“204请求”,进行登录状态的验证(而不是像Vue-Element-Admin默认那样做“401鉴权校验Token有效性” 并缓存相关信息

        页面oncreate时首先触发检查“204”请求,查询用户的“登录”状态。204请求(http rfc2616):

10.2.5 204 No Content无内容

   The server has fulfilled the request but does not need to return an
   entity-body, and might want to return updated metainformation. The
   response MAY include new or updated metainformation in the form of
   entity-headers, which if present SHOULD be associated with the
   requested variant.
服务器已完成请求,但不需要返回实体主体,并且可能希望返回更新的元信息。
这个响应可能包括以下形式的新的或更新的元信息实体标头,如果存在,则应与请求的变量进行关联。

   If the client is a user agent, it SHOULD NOT change its document view
   from that which caused the request to be sent. This response is
   primarily intended to allow input for actions to take place without
   causing a change to the user agent's active document view, although
   any new or updated metainformation SHOULD be applied to the document
   currently in the user agent's active view.
如果客户端是用户代理,则不应更改从导致请求被发送的消息的文档视图。
此响应是主要目的是允许在没有导致更改用户代理的活动文档视图的情况下进行输入操作,
尽管任何新的或更新的元信息都应当被应用于文档当前在用户代理的活动视图中。

   The 204 response MUST NOT include a message-body, and thus is always
   terminated by the first empty line after the header fields.
204响应:不得包含消息正文message-body,因此始终由标题字段header fields之后的第一空行终止。

2.5、根据204请求结果将基本状态信息更新写入本地存储

2.6、当用户点击“登录”链接时方执行“OAuth2鉴权及登录”流程

        过程:

2.7、返回“OAuth2鉴权登录”后的“控制台”页面

喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:

《浏览器Disk Cache磁盘缓存及其协商缓存、及原生App和浏览器实现缓存的差异》:

https://blog.csdn/pulledup/article/details/127395106

本文标签: 腾讯后台管理做法passportal