2010-08-10 60 views
5

经过几个月的搜索结果,每个主要的搜索引擎都消失后,我终于找到了一个可能的原因。HEAD请求在GET“200 ok”时收到“403禁止”?

我用WebBug来调查服务器头。查看请求是HEAD还是GET的区别。

HEAD发送的数据:

HEAD/HTTP/1.1 
Host: www.attu.it 
Connection: close 
Accept: */* 
User-Agent: WebBug/5.0 

HEAD接收的数据:

HTTP/1.1 403 Forbidden 
Date: Tue, 10 Aug 2010 23:01:00 GMT 
Server: Apache/2.2 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

获取发送数据:

GET/HTTP/1.1 
Host: www.attu.it 
Connection: close 
Accept: */* 
User-Agent: WebBug/5.0 

GET接收到的数据:

HTTP/1.1 200 OK 
Date: Tue, 10 Aug 2010 23:06:15 GMT 
Server: Apache/2.2 
Last-Modified: Fri, 08 Jan 2010 08:58:01 GMT 
ETag: "671f91b-2d2-47ca362815840" 
Accept-Ranges: bytes 
Content-Length: 722 
Connection: close 
Content-Type: text/html 

// HTML code here 

现在,默认浏览器发送GET请求(至少这是什么萤火说)。抓取工具是否有可能发送HEAD请求?如果是这样,为什么只有这台服务器响应一个403,而其他网站我所需要的其他服务器不会?

在情况下,它是很重要的,目前在.htaccess中唯一的行(除非我的客户改变了它,因为他们不想让我进入他们的服务器)

AddType text/x-component .htc 

UPDATE
谢谢@Ryk。 FireBug和Fiddler都发送GET请求,获得200(或300)个响应。如预期。所以我想这可能是服务器设置不当(即使主机来自拥有数百万客户端的大型公司,这很奇怪),或者它们放在.htaccess中。他们将不得不让我看看他们的账户。

我的问题的第二部分是,如果这可能是网站没有出现在任何搜索引擎的原因(网站:www.attu.it没有给出结果)。任何想法?

UPDATE 2
后一些摆弄周围,原来有phpMyAdmin的机器人阻挡在根目录中,导致从机器人的任何请求的.htaccess与禁止

+0

这是一个服务器的错误,客户希望它修复,他们应该给你至少一些访问权限。至少,问问他们是否可以看到当前.htaccess的副本。 – 2010-08-11 00:25:48

回答

1

403被发送回我会建议安装Fiddler并仔细查看请求。我有时看到,在需要认证的文件夹中的页面上的图标会导致返回403。

Fiddler会给你一个好主意,你也可以尝试Firefox并安装FireBug插件并检查错误页面。

看着这个网站,我收到了一堆404的favicon.ico,但除此之外,当我做一个简单的GET请求时,我得到了200 OK,但是当我做了HEAD的时候,我也得到了403。现在看看它。

更新:我认为它可能是Apache服务器上的配置,但不是100%确定。http://hc.apache.org/httpclient-3.x/methods/head.html

UPDATE2:读这个http://www.pubbs.net/200811/httpd/17210-usershttpd-how-to-reject-head-request.html让我相信你的Apache服务器可以设置为拒绝HEAD请求。在这种情况下,它会返回一个403

+0

@mjsarfatti - 我不确定,但是如果抓取工具/机器人使用HEAD请求来抓取网站,那么是的,您将遇到问题。 – Ryk 2010-08-13 01:20:26

+0

我发现卷曲比提琴更容易 – 2018-01-14 20:26:13

1

一些管理员在httpd.conf

<界限put DELETE COPY MOVE写道>
订单拒绝,允许
所有
拒绝从10.0
允许< /限制>

< LimitExcept中PUT DELETE COPY MOVE>
订单拒绝,允许
从拒绝所有
</LimitExcept中>

这产生 “禁止”,以HEAD请求。你应该检查这个。

1

我有这个确切的问题,因为我使用签名的URL。

每个签名的URL只适用于一种方法(例如GET或HEAD)。如果你想使用多种方法,你将不得不拥有多个URL。

+0

我认为这是我目前使用我的Gradle构建的问题:https://stackoverflow.com/questions/48253755/gradle-failing-to-download-dependency-when-head-request -fails。你有什么想法如何解决这个问题? – 2018-01-14 20:26:59