关于IIS中Request.ServerVariables("SCRIPT_NAME")的bug

        写ASP程序的朋友都知道,Request.ServerVariables("SCRIPT_NAME") 返回当前页面的相对路径,比如说“http://localhost/bbs/post.asp”,那么返回的就是“bbs/post.asp”。但是我在调试ASP程序的时候偶尔发现一个bug,在 IIS5.1(XP自带)和 IIS6.0(2003自带)中,如果相对路径中包含不止一个“.asp”,返回值会从第一个“.asp”末端截断。比如说“http://localhost/iWebOffice.ocx.asp/DocumentList.asp”,预期返回的应该是“iWebOffice.ocx.asp/DocumentList.asp”,但实际返回的却是“iWebOffice.ocx.asp”。
        ASP程序中有时需要引用Request.ServerVariables("SCRIPT_NAME") 来自动获取某个文件的完整URL路径,因为这个问题我不得修改我的虚拟目录名称,使其不包含“.asp”,但总觉得这不是好的解决之道。无意中我想起了另一个变量 Request.ServerVariables("PATH_INFO"),在任何教程中都指出它和前者作用相同,都用于返回当前页面的路径信息,但我想从名称上看两者在获取信息的方式上至少有所差异吧?动手成“PATH_INFO”,果不其然,得到了预期的返回结果!这才是问题的正解
       这个故事告诉我们:要大胆假设,小心求证,,,人类失去联想,世界将会怎样。。
       顺便表达一下溢美之词,用了那么多的方法调试ASP程序,还是Response.Write()方法最好!
碟子 QQ:9997452
关注 - 0
粉丝 - 0
0
0
(请您对文章做出评价)
« 上一篇:关于VB中没有VSS菜单问题
» 下一篇:一些常用的ASP代码剪辑
posted @ 2005-12-24 10:23 碟子 QQ:9997452 阅读(1429) 评论(6) 编辑 收藏 所属分类: 编程开发

 回复 引用   
#1楼2006-11-23 14:40 | 雨中[未注册用户]
很喜欢您的文章和您喜欢的那句"最好的方式是将一件事情做到极致。
" 我是作网站建设的,能交个朋友吗 ??
qq:116613085

 回复 引用   
#2楼2006-11-28 11:20 | 碟子[匿名][未注册用户]
真不好意思,今天才看到你的消息,我加你了:)
 回复 引用   
#3楼2007-01-05 14:34 | Filly[未注册用户]
。。。。。。。。。
交个朋友啦。。。有点问题要请教你。。。
QQ:578881558

 回复 引用   
#4楼2008-12-15 16:56 | 网之乐章[未注册用户]
终于知道了两者的区别,也就是一个有BUG,另外一个没有……
调试ASP,我用得最多的就是:
response.write()
接着
response.end()

 回复 引用   
#5楼2009-05-04 20:45 | 军军
我觉得不应该是一个BUG。看你怎么用它
 回复 引用 查看   
#6楼2009-05-04 20:46 | 军军      
我觉得不应该是一个BUG。看你怎么用它
呵呵,如果说它不是BUG,那么就是我们受了中文教材的误导吧。

为了你这个观点,我专门查看了一下英文解释:
SCRIPT_NAME Returns a virtual path to the script being executed
返回正在被执行的脚本的虚拟路径
PATH_INFO Returns extra path information as given by the client
返回客户端提交的路径信息

根据这个意思,SCRIPT_NAME就是为了返回脚本的虚拟路径的,而IIS简单的以“.asp”作为了脚本的结束标志,才导致了非预期的结果,能说不是bug么?

至于bug是否能利用其特性在一些场合加以运用,那是见仁见智的事情。只是如果偏离了官方设计的初衷,那么未可知是否有一天这个特性就会消失掉。