【发布时间】:2015-03-05 16:43:10
【问题描述】:
我在运行最新 OSX 的 Mac 上通过 macports 安装了 nginx (nginx version: nginx/1.7.9)。
我配置了一个使用 SCGI 的 URI:
location /server {
include /Users/ruipacheco/Projects/Assorted/nginx/conf/scgi_params;
scgi_pass unix:/var/tmp/rpc.sock;
#scgi_pass 127.0.0.1:9000;
}
当我在 127.0.0.1/server 上执行 GET 请求时,我在我的 SCGI 服务器上看到以下内容:
633:CONTENT_LENGTH0REQUEST_METHODGETREQUEST_URI/serverQUERY_STRINGCONTENT_TYPEDOCUMENT_URI/serverDOCUMENT_ROOT/opt/local/htmlSCGI1SERVER_PROTOCOLHTTP/1.1REMOTE_ADDR127.0.0.1REMOTE_PORT62088SERVER_PORT80SERVER_NAMElocalhostHTTP_HOST127.0.0.1HTTP_CONNECTIONkeep-aliveHTTP_CACHE_CONTROLmax-age=0HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,图片/webp,/;q=0.8HTTP_USER_AGENTMozilla/5.0 (Macintosh;英特尔 Mac OS X 10_10_2)AppleWebKit/537.36(KHTML,如 壁虎)铬/40.0.2214.115 Safari/537.36HTTP_DNT1HTTP_ACCEPT_ENCODINGgzip,放气, sdchHTTP_ACCEPT_LANGUAGEen-US,en;q=0.8,文件结束
问题是网络字符串的长度 633 与解释不匹配。如果我正确理解了spec 的网络字符串,633 应该是第一个 : 和最后一个 , 之间的字符长度:
任何 8 位字节的字符串都可以编码为 [len]":"[string]","。这里 [string] 是字符串, [len] 是 ASCII 数字的非空序列,以十进制表示 [string] 的长度。 ASCII 数字是 表示 0, 表示 1,以此类推直到 表示 9。禁止 [len] 前面的额外零:[len] 以 开头,恰好在 [ string] 为空。
例如,字符串hello world!被编码为31 32 3a 68 65 6c 6c 6f 20 77 6f 72 6c 64 21 2c,即12:hello world!,。
所以,我弄错了长度。这怎么解释?
【问题讨论】:
-
您应该考虑尝试将 SCGI 服务器移动到虚拟机并使用 tcpdump 来查看 nginx 从服务器请求的确切内容。