SPDY 请求 / 响应实例

通过 Chrome 开发工具的网络面板,可以看到请求 / 响应头的相关信息。通过 chrome://net-internals/#events 界面,我们可以看到更多信息。我这里摘录了访问我博客的一段日志,并加上了注释,大家可以对照前面的介绍看看。

BASHt=2111847 [st = 1] SPDY_SESSION_SYN_STREAM 客户端发送请求】
--> fin = true fin 标记表示这是当前流最后一帧】
--> :host: www.imququ.com 请求头】
:method: GET
:path: /post/devtool-in-chrome32.html
:scheme: https
:version: HTTP/1.1
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
accept-encoding: gzip,deflate,sdch
accept-language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2,de;q=0.2,zh-TW;q=0.2
cache-control: max-age=0
cookie: [172 bytes were stripped]
dnt: 1
referer: https://imququ.com/
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.60 Safari/537.36
--> spdy_priority = 0 优先级,0 最高】
--> stream_id = 1 流id,客户端创建的流 id 是奇数】
--> unidirectional = false
t=2111980 [st = 134] SPDY_SESSION_SYN_REPLY 服务端返回响应】
--> fin = false fin 为false,表示后续还有数据帧】
--> :status: 200 OK 响应头】
:version: HTTP/1.1
content-encoding: gzip
content-type: text/html; charset=utf8
date: Sat, 15 Mar 2014 06:08:47 GMT
server: nginx
strict-transport-security: max-age=31536000
x-cache: HIT from cache.ququ
x-powered-by: thinkjs-0.4.1
--> stream_id = 1
t=2111981 [st = 135] SPDY_SESSION_RECV_SETTINGS 各种控制帧】
--> clear_persisted = true
--> host = "www.imququ.com:443"
t=2111981 [st = 135] SPDY_SESSION_RECV_SETTING
--> flags = 0
--> id = 4
--> value = 100
t=2111981 [st = 135] SPDY_SESSION_UPDATE_STREAMS_SEND_WINDOW_SIZE
--> delta_window_size = 2147418111
...
t=2112105 [st = 259] SPDY_SESSION_RECV_DATA 数据帧】
--> fin = true 当前流最后一帧】
--> size = 0
--> stream_id = 1
t=2112208 [st = 362] SPDY_SESSION_SYN_STREAM 新的请求】
--> fin = true
--> :host: www.imququ.com
:method: GET
:path: /static/css/theme/the-bizness_datauri_178bc.css
:scheme: https
:version: HTTP/1.1
accept: text/css,*/*;q=0.1
accept-encoding: gzip,deflate,sdch
accept-language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2,de;q=0.2,zh-TW;q=0.2
cache-control: max-age=0
cookie: [172 bytes were stripped]
dnt: 1
if-modified-since: Mon, 10 Feb 2014 15:08:22 GMT
pragma: no-cache
referer: https://imququ.com/post/devtool-in-chrome32.html
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.60 Safari/537.36
--> spdy_priority = 1 优先级为1】
--> stream_id = 3 客户端创建的流 id 为奇数,且连续】
--> unidirectional = false
...

如何部署 SPDY 3.1

Chrome 很快就会移除对 SPDY 2 的支持,Firefox 28 也不支持 SPDY 2 了。如果你还在使用 SPDY 2,是时候升级了。

2014 年 2 月 4 日,Nginx 发布了 1.5.10 版,开始提供对 SPDY 3.1 的支持。下载 nginx 最新的 1.5.11 源码包后,再去 openssl 官网下一个最新的 openssl 库,就可以编译了。configure 时需要启用 spdy、ssl 模块,另外需要指定前面下载到的 openssl 库,这样才能确保使用最新的 ssl:

./configure --with-openssl=/home/jerry/tmp/openssl-1.0.1e/ --with-http_spdy_module --with-http_ssl_module

有了支持 SPDY 3.1 的 nginx,接下来在站点配置里启用就可以了,由于 SPDY 协议必须使用 HTTPS,所以端口默认是 443,证书什么的也需要提前配好。

BASHserver {
server_name www.imququ.com;
server_tokens off;
listen 443 ssl spdy;
ssl_certificate /home/jerry/ssl/server.crt;
ssl_certificate_key /home/jerry/ssl/server.key;
spdy_headers_comp 6;
add_header Strict-Transport-Security max-age=31536000;
... ...
}

一切 OK 后,打开 Chrome 的这个页面:chrome://net-internals/#spdy,可以查看 SPDY 的使用情况。

 spyd3.1




相关内容