蚊章汇 - PRISM
type: channel
link: https://linuxcn.bwsl.wang/tag/PRISM/
items: 每个 HTTP/2 连接会发送一条隐藏的秘密信息！

每个 HTTP/2 连接会发送一条隐藏的秘密信息！
type: item
date: 2015-12-02T01:55:00+08:00
description: 如果你监听过 HTTP/2 连接的建立过程，你也许会注意到在每个连接建立时都会发送一条这样的报文。如下：即以下文本：PRI * HTTP2.0 SM 如果将 HTTP2.0 以及换行从其中去掉，那么我们就得到了“PRISM”！——这是什么？是斯诺登所揭露的 NSA 的“棱镜计划”！只要是 HTTP/2.0 连接，都会在一开头就发送这样的报文。是你的 HTTP/2.0 连接被 NSA 监控了么？不是！这条消息代表了你的服务器真正支持了 HTTP/2.0，它是一个用于识别的魔法字符串。它在 RFC7540 Section 3.5 中描述如下：在 HTTP/2 中，每个端点都需要发送一个连接引语作为所用协议的最终确认，并用于建立 HTTP/2 连接的初始设置。客户端和服务器发送不同的连接引语。客户端的连接引语以24个字节开始，以16进制表示如下：0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a即以下列字符串开始： “PRI * **HTTP/2.0SM”**。事实上，这个魔法字符串原本是“FOOBA”：在 2013/5/29 发布的 draft-ietf-httpbis-http2-03 中它还是这个样子：“**FOO * HTTP/2.0BA**”。而在同年6月份斯诺登事件沸沸扬扬之后，7/8发布的 draft-ietf-httpbis-http2-04 中就变成了“**PRI * HTTP/2.0SM**”。所以，你知道了吧？这个古怪的字符串是互联网工程任务组（IETF）对 NSA 的嘲讽。