0

当我通过 wifi 向 Web 服务发出请求时,一切都运行良好,但在具有 WAP 连接的 GPRS 上进行时也是如此(我并没有强制连接为 WAP,这可能取决于运营商。在阿根廷完成测试)服务器正在接收 Content-Type 和 Content-Length 中的重复值。

下面是第一次通过 WiFi 和第二次通过 GPRS 在服务器上记录的相同请求。

通过 WiFi:

POST /ODP/Services.asmx HTTP/1.1 
User-Agent: kSOAP/2.0 
SOAPAction: http://temphost.org/RetrieveConfiguration 
Content-Type: text/xml 
Connection: close 
Content-Length: 464 
Host: temp.host.com 
Accept-Encoding: gzip 

通过 GPRS:

POST /ODP/Services.asmx HTTP/1.1 
Accept-Encoding: deflate, gzip, identity 
Content-Length: 464, 464 
Content-Type: text/xml, text/xml 
Host: temp.host.com 
SOAPAction: http://temphost.org/RetrieveConfiguration 
User-Agent: kSOAP/2.0 
X-WAP-WTLSEncryptiontype: NONE 
X-WAP-Bearerinfo: W-HTTPS=FALSE, bearertype=0 
Via: W-HTTP/1.1 wgw-fe6 EMIG 5.1 
x-msisdn: <User Phone number> 
x-up-calling-line-id: <User Phone number> 
x-technology-stack: Unknown 
TE: trailers 
Connection: TE 

我无法理解在 Content-Type 和 Content-Length 标头的请求中添加多个值的方式和位置。

有人可以告诉我 WAP 连接有什么问题,还是在修改对 WAP 的请求时将其添加到运营商端。

4

2 回答 2

2

如果由于其扩展,POST 被截断并需要多个数据包,则内容长度和内容类型字段将重复。

WGW 通过将它们合并到一个包含多个值的标头中以逗号分隔来解决这种情况,问题是这个包含多个值的标头会生成 HTTP 411 错误代码。

根据最新的 RFC 草案,必须使用错误代码 502 丢弃此流量,但可以使用一些解决方法来删除其中一个标头而不是合并它们以保持此交易的进行。

于 2012-12-05T15:11:06.870 回答
2

遗憾的是,客户端(客户/电话/浏览器)无事可做,但有一些可能的情况可以找到解决方案。如果您是 Web 开发人员(VASP 端),则需要注意 URL/URI 的大小,以防止 POST 需要多个数据包。如果您是 Web 服务器管理器(VASP/Telco 端),您可以定义这些特定标头(相等时)将接受多个值。在这种情况下,您需要注意您要将服务器置于HTTP 响应拆分攻击的风险。如果您是代理管理员(电信端),您可以调整您的 GW 以丢弃额外的标头,而不是将它们合并到一个包含多个值的标头中,但是,在这种情况下,您需要注意您将超出 RFC 建议.

于 2012-12-06T12:43:21.493 回答