如何理解小运营商的302跳转请求
今天在DEBUG代码下载small时发现,我们的重定向存在奇怪的问题,导致目录树刷新失败:
1.错误的重定向地址。
2.重现向或链接的IP为美国或不存在的IP。
GET /boxlist/1/small_20110827020002.zip HTTP/1.1
Host: downlist.baofeng.net
Accept:*/*
User-Agent: Mozilla/4.0
Connection: Keep-Alive
Cache-Control: no-cache
IP地址: 159.161.112.114 来 自: 美国
233.120.192.210 未知IP
这两个IP都无法下载samll包数据。重定向这个偶尔会下载不了:
False + 0.531 0.017 s GET 302 238 text/html http://downlist.baofeng.net/boxlist/1/small_20110827020002.zip http://124.193.109.38/proxy/downlist.baofeng.net/boxlist/1/small_20110827020002.zip#ickey=1&t=1314437412
详细如图:
---------------------------------------------------
简单描述一下运营商的网络通信模型:
上述模型在通信中是没有问题,作为小运营商主要是充当一个代理转发的工作,架构简单,通信比较流畅,只要带宽没有瓶颈,基本只需要少量的服务器的硬件实施就可以完成了这个标准的网间通信。
但是,有个名词叫“网间流量”,小运营商的带宽计费模型是通过网间流量进行计费,也就是向后端网络请求的带宽量越高,那么本月的网间流量成本也就越多。
为了有效的解决及降低网间流量的成本,就有了节省流量的网间通讯模型。如下:
上述通信模型能够极大的降低网间通信的流量成本,但是无故增加了几次本不该出现的请求(上述1-6的请求、响应模型)
对于我们的下载URL,在原本脆弱的中国互联网实施上,又无故添加了几次失败的折损。
1)Request请求分析(错误可能:IP分配或解析错误)
2)302请求的跳转(错误可能:跳转的URL被截断,URL地址不正确等)
在调试代码中发现的问题基本上就是上述节省流量网间通信的真正问题。
URL:http://124.193.109.38/proxy/downlist.baofeng.net/boxlist/1/small_20110827020002.zip#ickey=1&t=1314437412
这是标准的转向mirror 的下载请求URL。
如何解决,我想这是大家最关心的问题:
解决办法其实比较简单,因为了解运营商的网间流量判定规则,其实就很容易解决问题了。我们的客户端HTTP请求中本身没有contentType字段,所以只需要在请求URL的文件后缀名上做文章就可以,运营商一般不敢截取的是JSP,PHP等文件后缀,否则运营商会被投诉的。