Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript XMLHTTP/HTTPRequest在自定义错误页请求上返回404响应_Vbscript_Asp Classic_Http Headers_Xmlhttprequest_Httprequest - Fatal编程技术网

Vbscript XMLHTTP/HTTPRequest在自定义错误页请求上返回404响应

Vbscript XMLHTTP/HTTPRequest在自定义错误页请求上返回404响应,vbscript,asp-classic,http-headers,xmlhttprequest,httprequest,Vbscript,Asp Classic,Http Headers,Xmlhttprequest,Httprequest,我有一个程序,它使用XMLHTTPRequest从另一个网页收集内容。 问题是,该网页具有隐藏自定义错误设置(即,/thisurl在其web服务器上不作为文件存在,它是由自定义404错误文件生成的。),因此它不会返回在浏览器中显示的页面,而是显示来自该自定义错误页面的默认404错误响应,在我的HTTPRequest响应中 通过使用这个网站,我缩小了问题的范围,但我不知道如何解决它 Web嗅探器有3个不同的版本来提交请求: HTTP version: HTTP/1.1

我有一个程序,它使用XMLHTTPRequest从另一个网页收集内容。 问题是,该网页具有隐藏自定义错误设置(即,
/thisurl
在其web服务器上不作为文件存在,它是由自定义404错误文件生成的。),因此它不会返回在浏览器中显示的页面,而是显示来自该自定义错误页面的默认404错误响应,在我的HTTPRequest响应中

通过使用这个网站,我缩小了问题的范围,但我不知道如何解决它

Web嗅探器有3个不同的版本来提交请求:

    HTTP version: HTTP/1.1 
                  HTTP/1.0 (with Host header) 
                  HTTP/1.0 (without Host header)`
当我使用HTTP/1.1或HTTP/1.0(带有主机头)时,我从页面获得正确的响应(html)。但是当我使用HTTP/1.0(不带主机头)时,它不会返回内容,而是返回404错误脚本(显示自定义错误页面)

因此,我得出的结论是,问题可能是由于请求中不存在
Host

但我使用的是
MSXML2.XMLHTTP.3.0
,无法使用
HTTP/1.1
HTTP/1.0(带主机头)
阅读页面。代码如下所示:

    Set objXML = Server.CreateObject("MSXML2.XMLHTTP.3.0")      
    objXML.Open "GET", URL, False
    objXML.setRequestHeader "Host", MyDomain '< Doesnt work with or w/out this line
    objXML.Send     
Set objXML=Server.CreateObject(“MSXML2.XMLHTTP.3.0”)
objXML.Open“GET”,URL,False
objXML.setRequestHeader“主机”,MyDomain“<不与此行一起使用或不在此行中使用
发送
即使在请求中添加了
Host
头之后,我仍然会在响应中获得由该自定义错误脚本返回的404错误模板,与web嗅探器站点上的
HTTP/1.0(无主机头)
选项相同。这应该返回200 OK,就像在web嗅探器的前两个选项上一样,就像在web浏览器中一样

所以我想我的问题是,哪个网站(web sniffer.net)能够通过前两个HTTP版本选项获得正确的响应,这样我就可以在我的应用程序中模拟它了。我想得到正确的页面,但它只返回404错误从他们的404错误模板


作为对回答者的回应,我提供了下面两个单独的cUrl请求的屏幕截图,其中一个来自我的每个服务器


我执行了相同的cURL命令,相同的url(指向主主机上的一个站点),即
cURL-v-iwww.site.com/doppedfile
。但是看起来它不能在主服务器上工作,而主服务器需要在主服务器上工作。这不可能是一个自驻留的问题,因为从一个辅助到另一个辅助,它工作得很好,这两个应用程序/站点都是相同的,只是不同的ip/主机名。这似乎是一个内部问题,可能与应用程序无关。

我对MSXML2.XMLHTTP.3.0一无所知。但从您的问题陈述中,我了解到问题肯定是由于在您的请求中错误设置或遗漏了某个HTTP头字段造成的

默认情况下,HTTP 1.1客户端设置主机头。例如,如果您正在连接到google.com,那么请求将如下所示

GET / HTTP/1.1
Host: google.com
“主机”标头应具有请求的资源所在的服务器的域名。如果“主机:”标题不存在,则具有虚拟主机的服务器将变得混乱。如果您没有指定主机头,则groups.yahoo.com会发生这种情况

$ nc groups.yahoo.com 80
GET / HTTP/1.1

HTTP/1.1 400 Host Header Required
Date: Fri, 06 Dec 2013 05:40:26 GMT
Connection: close
Via: http/1.1 r08.ycpi.inc.yahoo.net (ApacheTrafficServer/4.0.2 [c s f ])
Server: ATS/4.0.2
Cache-Control: no-store
Content-Type: text/html; charset=utf-8
Content-Language: en
Content-Length: 447

这应该是你面临的同一个问题。还要确保您正在发送您试图从中获取资源的服务器的域名。主机头应该有一个冒号“:”来分隔像“Host:www.example.com”这样的值

由于缓存和其他一些缺点,不建议在服务器应用程序中使用XMLHTTP。在这种情况下,您可能会从缓存中得到响应。请在阅读整篇文章,并使用ServerXMLHTTP进行相同的测试,以确定问题是否为XMLHTTP。那么您认为有人应该使用什么来解决此问题?谢谢您的回答。它在请求中发送主机头,它与请求URL中的主机/域相同。所以,我不确定还能是什么。奇怪的是,当我跨域(从我的暂存服务器请求生产服务器)执行此操作时,它实际上可以工作,但当我在同一服务器上执行此操作时(生产对生产),它会给出404错误。奇怪。调试的最好方法是使用curl命令行实用程序。从暂存服务器和prod对服务器执行curl调用,打开verbose模式,这样它也会打印所有请求头。通过这种方式,您可以确定导致此问题的原因。。“curl-vL”并发布结果将更有帮助。好的,我下载了curl并拍摄了屏幕截图。请看最新的问题。你知道吗,我知道了。这是因为我的自定义错误被设置为提供本地请求的详细错误,并且由于请求是自驻留的,它是本地的,并且提供404错误而不是自定义错误。无论如何,用卷发帮我找到答案,谢谢。