利用服务器返回header来传输数据

在Ajax编程时,经常需要从服务端获取数据。通常情况下,我们是直接把要传输的数据放在response正文中,再用responseText或者responseXML来得到内容。最近偶然发现,有时候也可以把数据放在header里,而且一些情况下这样做更有优势。

header是服务器以HTTP协议传送HTML资料到浏览器前所送出的字符串,在php中我们可以这么发送自定义header:

header("author:Jerry Qu");

然后在客户端,正常的创建一个Ajax请求,所不同的地方是callback中获取数据改成:

var a = new Ajax();
a.get("test.php",function(){
    alert(a.req.getResponseHeader("author"));
});

这样就能取到author的值了。

Javascript中跟response header有关的就两个方法:

getResponseHeader 从响应信息中获取指定的http头 语法 strValue = oXMLHttpRequest.getResponseHeader(bstrHeader);

getAllResponseHeaders 获取响应的所有http头 语法 strValue = oXMLHttpRequest.getAllResponseHeaders();

通过header可以传多少数据呢?我测试了一下,在firefox中如果超过10232个英文字符,客户端就取不到数据了,IE中测试了100W个字符依然可以,所以基本还是够用的。另外,我也测试过一次发送1000个自定义header,IE和FF中都能正常取到值。如果你想得到http header的更多信息,建议阅读这篇文档

这样做的优点呢?通常如果用Ajax来post数据,服务端返回json格式字符串的情况下,在浏览器中输入request的地址,用户就会看到那堆奇怪的代码。在页面丢失js时这种现象很常见。但是把返回数据放在header里就不会有这个问题,反正header不会展示出来。正文里可以随意的放些什么内容,哪怕是放一段自动转向JS也没关系,这样用户体验要稍好一些。

查看本文示例

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 2984 天前,文中所描述的信息可能已发生改变,请谨慎使用。

Comments