百科问答小站 logo
百科问答小站 font logo



用 // 代替 http:// 有什么好处? 第1页

  

user avatar   zhihusucks 网友的相关建议: 
      

如果你做过「全站 HTTPS 升级改造」,就不会有什么疑问了。

我给全站做 HTTPS 升级的时候,真的想把写 http:// 的人砍死。尤其是数据库里的链接和 JS 里拼接出来的 url。期间用了各种正则,还要人工核查。

奈何写 http:// 的程序员太多,只能作罢。


有人还在评论里问原因,原因就是如果你全写 //,我就不用改造数据库里的数据和源码了,直接升级 https 就行了。你可能会说 https 改造这种事情很少发生吧,巧了,我在腾讯和阿里都遇到了 https 改造 ಥ_ಥ 而且在阿里的时候我要负责 1688 整站(个别部门自行改造)的前端代码改造(不只是 HTML,还有 CSS 、JS、Velocity 模板等!简直就是脏活累活,我 TM 为什么要接这个活儿),你猜我骂写 http:// 的人骂了多少次?

有的前端还直接在 JS 里写 http,沿用一下当前页面的协议你会死啊?

还有的前端用正则判断 url 时居然只接受 http:// 和 https:// 不接受 //,真的是没常识。

太多程序员,太智障了。也有可能是因为他们没听说过 HTTPS 而已。



如果你还不懂,我就问你几个问题:

  1. 如果你用 http:// ,那你就是默认当前页面是 http 协议了,你一个前端凭什么决定当前页面的协议?难道你不知道 http 链接在 https 页面里会报错啊?你应该沿用当前页面的协议,所以你要写 //
  2. 如果你用 https://,也是一样的问题,你怎么知道三年后会不会出现一个 httpshe://,难道到时候你再全部改成 httpshe:// ?
  3. 不要做任何明显是错误的假设!你根本就不知道当前页面会用什么协议打开!所以你要用 // 啊!

类似的错误假设还有很多,比如很多中国程序员都以为电话号码只含数字和括号,不含字母。

真的是这样吗?

那些程序员深信不疑的谣言

那些前端程序员深信不疑的谣言(HTML篇)


这种事情,被坑一次你才会长记性。

或者被我怼几次,看你还写不写 http://




有人说全局替换不就完了吗?

举例说明吧,假设淘宝要升级 https

于是你将 http:// 全部替换成 //

第一个 bug:你把 <a href="http://tmail.com"> 替换成了 <a href="//tmail.com"> ,然而当时 tmail.com 还不支持 https

于是你将一定范围内的域名替换,http://(taobao|taobao2|taobao3).com 替换成 //$1.com

第二个 bug:有些 JS 是这样写的 url = "http://" + location.hostname + '/' + path,还有写 JS 是这样写的 /^http:///.test(input)。

你说这个就没法用正则了,在所有 JS 里全局搜索 http 然后人工审查吧。你知道淘宝有多少 JS 文件吗…… 而且这些文件是缓存十年的……就算你改了,也不一定能更新。而且一旦你改错了,影响用户下单,马云损失一个亿你赔得起吗?

第三个 bug:有些数据根本就不在代码里,在数据库里,比如 user.image 的值是 http 开头的。

于是你将 user.image 写成 user.image.replace('http://', '//') 或者你直接改数据库里的数据(当数据量很大的时候,这基本是不可能的)

第四个 bug:你忘了改 nginx、crossdomain 里面的域名

第五个 bug:你忘了改配置系统里面的 base_url

第六个 bug:你的 https 页面嵌入了一个外部的 http iframe……你就哭吧,这很难解决,运气好直接改成 // (外部支持 https 即可),运气不好就要改页面逻辑了。

第 N 个 bug……

HTTPS 升级就是脏活累活,你说简单你来做,你开始做就知道牵连的地方有多少了。


最好的方案还是把协议做成很容易变更的方式,比如遵循当前页面,或者用变量,反正写死 http:// 肯定不好。


有些程序员写代码的时候,明明知道有 HTTPS 却不去兼容,心理想着「反正我在这个公司呆两年就走了,HTTPS 至少还有三年呢」然后就写出了垃圾代码。




  

相关话题

  JavaScript(V8,Node) 的开发效率比 Java(JVM,Vert.x) 高在哪里? 
  有哪些短小却令人惊叹的 JavaScript 代码? 
  如何看待React.js 官方文档支持乌克兰 ,释放了哪些信息? 
  大公司实习经历对下一份工作能带来多少帮助? 
  JavaScript 最失败的设计是 arguments 吗? 
  当一个人说自己“精通JavaScript, CSS3, HTML5”时应该如何理解? 
  Markdown 标准化的阻碍在哪里? 
  如何看待鸿蒙应用开发框架采用JavaScript作为开发语言? 
  为什么有的高级程序员很讨厌甚至禁止使用 setTimeout? 
  为什么都说富文本编辑器是天坑? 

前一个讨论
女权主义者为什么总喜欢提不婚不育保平安,这样做对她们有现实的好处吗?
下一个讨论
如何评价王小波的《一只特立独行的猪》?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利