前端要以服务器的时间为准,有啥好用的库吗?

2021-03-24 12:10:48 +08:00
 vinsony

场景是大量客户端电脑时间都不准,也没有时间同步,只能在程序里请求后端时间接口获取真实时间。

现在想法是程序只取一次服务器时间,然后在客户端模拟一个时间出来,关键要能支持 new Date 获取这个模拟时间,而且这个模拟时间能一直自动继续走。

这样的需求有啥好用的库吗?

8036 次点击
所在节点    JavaScript
46 条回复
ligolas
2021-03-25 23:29:20 +08:00
@autoxbc 所以我前面指出你就没理解对 CORS 的设计目的。CORS 是浏览器行为,是为了防止在浏览器端发生泄漏,服务端只是配合。那么浏览器端怎么发生泄漏呢?那就是 js,也就是如果某一个 js 执行了一段代码,读取到了**被认为**可能泄漏隐私的消息,这时候再发起一个到第三方的请求(可以是 js,也可以是 img ),就相当于把信息传递出去了,这个过程就被认为发生了泄漏。那么浏览器怎么做呢?其中一点就是限制了默认情况下 js 可以读取的 response header 的字段,也就是给你的文章里面的那 6 个,其他的,就得服务器端配合配置了才能由 js 读取到,这里面就包括了 date 字段。(另外不要弄错了,你通过开发人员工具是能读到的,cors 保证的是 js 代码读取不到)
autoxbc
2021-03-26 00:35:00 +08:00
@ligolas #41 我觉得您可能认为 CORS 会同时作用于同域和跨域,并认为 CORS 是浏览器权限控制的全部内容,事实就如其名字,仅仅用来管理跨域访问

对于同域消息头的访问,有这几个概念
https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
这部分描述了哪些**请求**消息头是不能被脚本**修改**的

https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_response_header_name
这部分描述了哪些**响应**消息头是不能被脚本**修改**的

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders
这是与本文最相关的部分,描述了同域状态下,哪些消息头是不能被脚本**读取**的

事实上只有 Set-Cookie 和 Set-Cookie2 两个字段禁止读取,并不包含 Date

这里有一篇文章有比较详细的讲解
https://segmentfault.com/a/1190000004322487
g0thic
2021-03-26 09:54:13 +08:00
按 2 楼说的 上 https 时间不对 用不了 前端就抛出个错误提示就好了。
ligolas
2021-03-26 10:28:49 +08:00
@autoxbc 你是对的,我之前的实验有问题,执行的 js 是从 cdn 上取的,相当于没有测试过同源的情况。不过考虑到现在服务部署的方式,很多时候资源就是从 cdn 部署的,并不能保证跟主站同源,这个 CORS 还是很有可能需要的(就像我遇到的情况),非常感谢你指出了我的盲区。
autoxbc
2021-03-26 22:18:52 +08:00
@ligolas #44 讨论也加深了我对这块的理解。不过还是有点问题,跨域不是指**网页**和**脚本**在不同的域下,不同来源的脚本只要加载到页面里,有一致的完整的权限

跨域指**网页**和脚本访问的另一个**网页**是不是在同一个域下,当跨域时,受 CORS 的策略的管理
ligolas
2021-03-28 11:40:09 +08:00
@autoxbc 恩,在发完之后我继续回忆了我测试的场景,应该是主站(静态页),cdn 加载 js,然后 API,三个独立的域名,js 试图读取的是 API 的 response 的 header 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764592

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX