HTTP/2 头部压缩技术介绍

我们知道,HTTP/2 协议由两个 RFC 组成:一个是 RFC 7540,描述了 HTTP/2 协议本身;一个是 RFC 7541,描述了 HTTP/2 协议中使用的头部压缩技术。本文将通过实际案例带领大家详细地认识 HTTP/2 头部压缩这门技术。[...]

继续阅读 »

使用 Wireshark 调试 HTTP/2 流量

我们知道,HTTP/2 引入了二进制分帧层(Binary Framing),将每个请求和响应分割成为更小的帧,并对它们进行了二进制编码。与此同时,HTTP/2 沿用了之前 HTTP 版本中的绝大部分语义,上层应用基本上感知不到 HTTP/2 的存在,这一点可以通过浏览器的网络调试工具得到验证。以下是使用 Chrome 访问 HTTP/2 网站的截图,网络面板中显示的内容与 HTTP/1 网站相比,只有一些细微的区别(头部字段都是小写,多了一些冒号开头的头部等)。[...]

继续阅读 »

H2O 中的 Cache-Aware Server Push 简介

几个月前,我在《HTTP/2 中的 Server Push 讨论》这篇文章中写到: Server Push 会在客户端请求页面 HTML 时,新建一个流将最重要的资源一并返回。同时,如果服务端要推送的资源浏览器已经缓存过,客户端会发送 RST_STREAM 帧来终止流,服务端收到这个信号之前所传输的数据就造成了带宽浪费。 简而言之,HTTP/2 中的 Server Push 技术使得服务端收到页面请求后,能够将页面所需资源(CSS、JS)通过 PUSH_PROMISE 帧推送给浏览器,从而减少延迟。但这带来一个问题:PUSH_PROMISE 帧和对应的 DATA 帧离开服务端的时机非常早,如果要推送的资源浏览器本地已经有了缓存,会导致流量的浪费。[...]

继续阅读 »

使用 BoringSSL 优化 HTTPS 加密算法选择

前不久,一位朋友在我博客评论中,问到:类似于 Google 那样电脑访问使用 AES,手机访问使用 CHACHA20 的算法是怎么实现的(详情)。最近我研究了一下这个问题,现在我的博客也支持这个特性了。今天抽空介绍一下我的实现步骤,供喜欢折腾的朋友们参考。[...]

继续阅读 »

Disqus,我又回来了!

上个月底,我将博客用了几年的 Disqus 评论系统替换成了国内的多说,还写了一篇「让多说评论框完美支持 HTTPS」的文章,列举了我对多说的改造。然而,不到一个月的时间,我却决定再次换回 Disqus。我的博客代码托管于自建 Gitlab,回滚起来倒也方便,只是这番倒腾之后,所有评论的层级关系、用户信息全部丢失了。这里先向给我留过言的朋友们说声抱歉,你们又变成默认头像啦(包括我自己)。[...]

继续阅读 »

AMP,来自 Google 的移动页面优化方案

更新:本站正文页已于 2017-03-08 上线 AMP 版,将 URL 中的 /post/ 改为 /amp/post/ 即可。例如这是本文的 AMP 版:https://mailseason.com/amp/post/amp-project.html。 Web 性能优化(Web Performance Optimization,WPO)是一个老生常谈的话题,我也写过很多关于「性能优化」的文章。最近 Google 某个团队推出了一项名为 Accelerated Mobile Pages(AMP)的技术,号称能大大加快移动端页面呈现速度,提高整体体验。本文就带大家认识一下这项新技术。[...]

继续阅读 »

window.opener.location 安全风险讨论

上篇文章中我介绍了 Content Security Policy Level 2,之前我还介绍过 Subresource Integrity、Referrer Policy 等其它与 Web 安全或用户隐私有关的协议。由于精力有限,我所写的只是新增协议中很小的一部分,但已经可以由此感受到现代浏览器在安全上所作出的努力。然而,一个我认为比较严重的安全隐患,却始终存在于各大浏览器之中。甚至到目前为止,仍然没有一个正式标准出来指导浏览器和开发者完美解决这个问题。这让我十分困惑,我将在本文讨论这个问题。[...]

继续阅读 »

Content Security Policy Level 2 介绍

两年前,我写过一篇介绍 Content Security Policy(CSP)的文章(详情),CSP 是一个用来定义页面可以加载或执行哪些资源的协议,目前已经发展到了 Level 2(协议地址)。我在本站之前的文章中已经多次提到过 CSP2,这篇文章也早就躺在我的草稿箱,只是断断续续写了好久才写完。[...]

继续阅读 »

让多说评论框完美支持 HTTPS

我的博客之前一直部署在 Linode,使用 Disqus 提供的评论服务。Disqus 作为第三方社会化评论的鼻祖,无论功能还是体验,都堪称完美。虽然之前 Disqus 经常加载失败,我也一直在坚守。最近我的 Linode 持续无法访问,几番折腾之后还是换到国内云主机并备案了。借着这次机会,我也把评论从 Disqus 迁移到了国内的多说。多说官方对 HTTPS 的支持并不完美,本文记录我对它的几处改造。[...]

继续阅读 »

使用 SRI 增强 localStorage 代码安全

在上篇介绍 Subresource Integrity(SRI)的文章最后,我提出一个问题:现在广泛被大家使用的「将 JS 代码缓存在本地 localStorage」方案有很大的安全隐患。网站出现任何 XSS,都有可能被用来篡改缓存在 localStorage 中的代码。之后即使 XSS 被修复,localStorage 中的代码依然是被篡改过的,持续发挥作用。本文接着讨论这个话题。[...]

继续阅读 »