当前位置: 首页 > 图文教程 > 网络编程 > ASP > WEB应用的缓存兼容性设计

ASP
嵌入式Web视频点播系统实现方法
GB与BIG5内码转换COM原代码
金额阿拉伯数字转换为中文的存储过程
利用 WSH 作定时工作流程
用InstallShield 进行 ASP 软件的打包和自动安装
服务器获得客户端时间的方法
关于如何读出图片的高度与长度的总结
按下回车键指向下一个位置的一个函数
一个不错的随机函数
一套加解密字符串的函数
一段加密函数(base64)
一段加密函数
使用asp实现支持附件的邮件系统(三)
使用asp实现支持附件的邮件系统(二)
使用asp实现支持附件的邮件系统(一)
检查当前目录下是否存在指定的文件,如果存在就重新命名
MD5加密的javascript实现例子
如何在服务器端调用winzip命令行对上传的多个文件打包压缩
MD5不可逆加密算法的ASP实现实例
看人家用使用InstallShield制作ASP安装程序(6)

ASP 中的 WEB应用的缓存兼容性设计


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 198 ::
收藏到网摘: n/a

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTD头信息中,增加了HTTP_X_FORWARDED_????信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址:

下面是2个例子,用于说明缓存兼容性应用的设计原则:

'对于一个需要服务器名的地址的ASP应用:不要直接引用HTTP_HOST/SERVER_NAME,判断一下是否有HTTP_X_FORWARDED_SERVER
  

以下为引用的内容:
   function getHostName ()
        dim hostName as String = ""
        hostName = Request.ServerVariables("HTTP_HOST")
        if not isDBNull(Request.ServerVariables("HTTP_X_FORWARDED_HOST")) then
            if len(trim(Request.ServerVariables("HTTP_X_FORWARDED_HOST"))) > 0 then
                hostName = Request.ServerVariables("HTTP_X_FORWARDED_HOST")
            end if
        end if
        return hostNmae
     end function

    //对于一个需要记录客户端IP的PHP应用:不要直接引用REMOTE_ADDR,而是要使用HTTP_X_FORWARDED_FOR,
   

以下为引用的内容:
  function getUserIP (){
        $user_ip = $_SERVER["REMOTE_ADDR"];
        if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
            $user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        }
    }

注意:HTTP_X_FORWARDED_FOR如果经过了多个中间代理服务器,有何能是逗号分割的多个地址,比如:200.28.7.155,200.10.225.77 unknown,219.101.137.3因此在很多旧的数据库设计中(比如BBS)往往用来记录客户端地址的字段被设置成20个字节就显得过小了。

经常见到类似以下的错误信息:

Microsoft JET Database Engine 错误 '80040e57' 字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。

/inc/char.asp,行236

原因就是在设计客户端访问地址时,相关用户IP字段大小最好要设计到50个字节以上,当然经过3层以上代理的几率也非常小。