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

ASP
Access 2000 数据库 80 万记录通用快速分页类
Microsoft JET Database Engine 错误 ''80004005'' 未指定的错误的完美解决方法
收藏的ASP常用的函数集
asp分页的一个类
ASP开发网页牢记注意事项
ASP下操作Excel技术总结分析
ASP数据岛操作类
ASP经典分页类
asp论坛在线人数统计研究
ASP调用SQL SERVER存储程序
asp输出bmp
ASP连接数据库的全能代码
ASP面向对象编程探讨及比较
web文件管理器的后续开发
一小偷类!!有兴趣的可以看看
利用ASP实现事务处理的方法
大数量查询分页显示 微软的解决办法
如何把ASP编写成DLL
asp实现树型结构
超级ASP大分页_我的类容我做主

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 244 ::
收藏到网摘: 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层以上代理的几率也非常小。