关于cmwap和gzip

遇到一个问题: 

我写的程序用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);

 

 

你可能感兴趣的:(关于cmwap和gzip)