遇到一个问题:
我写的程序用HTTP POST方式 接收到的数据时采用gzip压缩
发送请求头内容如下:
...
Accept-Encoding gzip
...
接收到的协议头正常来说如下:
HTTP/1.1 200 OK
Date: ...
Server: Apache-Coyote/1.1
Content-Encoding: gzip
Content-Type: text/xml;charset=UTF-8
Content-Language: zh-CN
Connection: close
Transfer-Encoding: chunked
用PC上的客户端测试如上,是正常的--协议头正确,内容是gzip压缩的内容。
但是,一样的代码,我用windows mobile的手机测试却反回这样的头:
HTTP/1.1 200 OK, Success
Content-length: 47579
Content-Type: text/xml;charset=UTF-8
Date: Thu, 04 Mar 2010 03:11:12 GMT
Server: Apache-Coyote/1.1
Content-Language: zh-CN
而收到的协议体是正常的没经过gzip压缩的文本。
总结如下:
手机在上cmwap的情况下, 移动的wap服务器检测到应用服务器反回中有 Content-Encoding: gzip ,那么移动的wap网关会解压缩
然后计算出大小,修改HTTP头,将解压后的文本传给手机客户端。
这样的原因是:cmwap不让传二进制流。
用了一天时间,最后在三位同事的帮助下明白了。 在此表示感谢。
附加记录一下c++代码:
给协议添加头:
pHeaders = _T("Accept-Encoding: gzip");
::HttpAddRequestHeaders(hReq, pHeaders, len, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE) ;
解析头:
const TCHAR buf[] = { _T("Content-Encoding") };
::HttpQueryInfo(hReq, HTTP_QUERY_CUSTOM, buf, &len, NULL);