UML软件工程组织

Ajax基础教程 - 4.2 读取响应首部
作者:(美)阿斯利森 舒塔   出处:csdn

4.2 读取响应首部

你有时可能需要从服务器获取一些内容,例如,可能想“ping”一下服务器,验证服务器是否正常运行。此时,你也许只想读取服务器发出的响应首部,而忽略内容。通过读取响应首部,可以得出Content-Type(内容类型)、Content-Length(内容长度),甚至Last- Modified(最后一次修改)的日期。

如果只关注响应首部,完成这样一个请求的标准做法是使用HEAD请求,而不是前面讨论的GET或POST请求。当服务器对HEAD请求做出响应时,它只发送响应首部而忽略内容,即使可以向浏览器返回所请求的内容,也不会真的把内容返回。由于忽略了内容,对HEAD请求的响应比对GET或POST的响应就小得多。

代码清单4-3展示了从XMLHttpRequest对象获取响应首部的多种方法,并介绍了这些方法在实际中的使用。这个页面有4个链接,分别对应从XMLHttpRequest对象读取响应首部的各个方法。

代码清单4-3 readingResponseHeaders.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Reading Response Headers</title>

 

<script type="text/javascript">

var xmlHttp;

var requestType = "";

 

function createXMLHttpRequest() {

    if (window.ActiveXObject) {

        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

    }

    else if (window.XMLHttpRequest) {

        xmlHttp = new XMLHttpRequest();

    }

}

 

function doHeadRequest(request, url) {

    requestType = request;

    createXMLHttpRequest();

    xmlHttp.onreadystatechange = handleStateChange;

    xmlHttp.open("HEAD", url, true);

    xmlHttp.send(null);

}

 

function handleStateChange() {

    if(xmlHttp.readyState == 4) {

        if(requestType == "allResponseHeaders") {

            getAllResponseHeaders();

        }

        else if(requestType == "lastModified") {

            getLastModified();

        }

        else if(requestType == "isResourceAvailable") {

            getIsResourceAvailable();

        }

    }

}

 

function getAllResponseHeaders() {

    alert(xmlHttp.getAllResponseHeaders());

}

 

function getLastModified() {

    alert("Last Modified: " + xmlHttp.getResponseHeader("Last-Modified"));

}

 

function getIsResourceAvailable() {

    if(xmlHttp.status == 200) {

        alert("Successful response");

    }

    else if(xmlHttp.status == 404) {

        alert("Resource is unavailable");

    }

    else {

        alert("Unexpected response status: " + xmlHttp.status);

    }

}

 

</script>

</head>

 

<body>

  <h1>Reading Response Headers</h1>

 

  <a href="javascript:doHeadRequest('allResponseHeaders',

                 'readingResponseHeaders.xml');">Read All Response Headers</a>

 

  <br/>

  <a href="javascript:doHeadRequest('lastModified',

                  'readingResponseHeaders.xml');">Get Last Modified Date</a>

 

  <br/>

  <a href="javascript:doHeadRequest('isResourceAvailable',

                    'readingResponseHeaders.xml');">Read Available Resource</a>

 

  <br/>

  <a href="javascript:doHeadRequest('isResourceAvailable',

                     'not-available.xml');">Read Unavailable Resource</a>

 

</body>

</html>

页面上第一个链接展示了XMLHttpRequest对象的getAllResponseHeaders()方法。这个方法只是将所有响应首部获取为一个串。在这个例子中,响应首部显示在警告框中。getAllResponseHeaders()方法的用途很有限,因为它把所有响应首部放在一起作为串返回。要想使用getAllResponseHeaders()方法来获取单个的响应首部,就需要解析返回的串,查找所关注的响应首部。

getResponseHeader方法可以通过只返回一个响应首部的值解决这个问题。这个方法取一个串参数,该参数表示所需响应首部的名字(就是你想得到这个响应首部的值)。这个例子使用getResponseHeader方法将Last-Modified首部显示在警告框中。在实际应用中,getResponseHeader方法很可能用于以某个间隔轮询服务器资源。只有自最近一次轮询服务器资源以来Last-Modified响应首部发生变化时,浏览器才会根据服务器资源更新其内容。

页面上的后两个链接使用了XMLHttpRequest对象的另一种能力,即检查服务器返回的HTTP状态码。XMLHttpRequest对象的status属性把HTTP状态作为一个整数返回。如果状态码为200,指示这是正常的成功服务器响应。相反,如果状态码是500,则指示服务器处理请求时出现了某种内部错误。

这个例子使用HTTP状态码来确定服务器资源是否可用。HTTP状态码404指示没有所请求的资源。页面上的Read Available Resource(读取可用资源)链接请求位于服务器上的简单的XML文件。因为服务器上有这个文件,所以HTTP状态码为200,指示这是成功的响应。页面上最后一个链接是Read Unavailable Resource(读取不可用资源),它请求服务器上没有的文件。服务器会用HTTP状态码404做出响应。JavaScript事件处理程序检查服务器响应,看到404状态码,显示警告框指示所请求的资源不可用。

代码清单4-4显示了readingResponseHeaders.xml。

代码清单4-4 readingResponseHeaders.xml

<?xml version="1.0" encoding="UTF-8"?>

<readingResponseHeaders>

</readingResponseHeaders>

显示所有响应首部的结果如图4-3所示。图4-4显示了读取Last-Modified首部的结果,图4-5显示了确定Web资源是否可用的结果。

图4-3 显示所有响应首部

图4-4 读取一个响应首部,在这里是Last-Modified首部

图4-5 确定Web资源是否可用

上一页     首页    下一页

 

版权所有:UML软件工程组织