SPDY网络协议中的请求和响应头(1)(2)
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 的使用情况。
评论暂时关闭