As3当我使用Loader时,我总是得到httpstatus代码200事件,尽管google chrome中的httpstatus代码是304

时间:2014-12-16 08:07:46

标签: actionscript-3

在As3中,我使用

_loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatus);

检测Loader的httpstatus代码。在回调函数中,当google chrome中显示的httpstatus代码正好为304时,httpstatus代码为200。

2 个答案:

答案 0 :(得分:0)

实际上,这应该是相同的,因为这些状态是对Web服务器发送的请求的响应,但是当请求的文件位于缓存中时,Flash会一直处于200状态,因为在这种情况下,懒惰的Flash甚至没有向Web服务器发送请求,并给你一个假的200 HTTP状态。使用Air,情况有点不同,因为尽管Air每次都有真正的请求,但它为真实200和304 HTTP状态(未修改)提供了200个HTTP状态。

要验证我们可以使用这个简单的ActionScript代码:

var loader:URLLoader = new URLLoader();
    loader.addEventListener(
        HTTPStatusEvent.HTTP_STATUS, 
        function(e:HTTPStatusEvent):void {
            trace('http status : ' + e.status)
        } 
    )
    loader.load(new URLRequest('http://www.example.com'));

当然,Flash会为您提供可达内容的200 HTTP状态。您可以尝试使用在线网址,然后将您的计算机与互联网断开连接,您将获得相同的值:200。

对于Air,第一个请求它是真正的200,但第二个,如果文件是cachebal,你将获得200但实际上Air接收304响应。要验证这一点,您可以使用本地Web服务器,您会在其日志中找到Web服务器响应,第一个请求为200,第二个请求为304,或者您可以使用捕获网络流量工具Fiddler和您将直接看到Air应用程序收到的实际响应。

我希望现在对你来说更清楚。

答案 1 :(得分:0)

使用随机数生成“新”链接并避免缓存效果

    var loader:URLLoader = new URLLoader();
    var noCache:Number = Math.random()
    loader.addEventListener(
        HTTPStatusEvent.HTTP_STATUS, 
        function(e:HTTPStatusEvent):void {
            trace('http status : ' + e.status)
        } 
    )
    loader.load(new URLRequest('http://www.example.com?c='+noCache));