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

4103次阅读  |  发布于5年以前

在Ajax编程时,经常需要从服务端获取数据。通常情况下,我们是直接把要传输的数据放在response正文中,再用responseText或者response XML来得到内容。最近偶然发现,有时候也可以把数据放在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也没关系,这样用户体验要稍好一些。

查看本文示例

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8