2015-05-03 41 views
0

tl; dr:錯誤配置的ASP.NET MVC服務器在應該404時返回「200 OK」。如何確定「200 OK」是否是錯誤配置的ASP.NET MVC自定義404頁面?

我正在建造a list of tech employeer career page links。我很沮喪地發現這樣的公司在他們的網站上列出了公開的職位是很常見的,但他們沒有任何關聯。也就是說,如果您訪問www.example.com,有時在整個網站上沒有任何地方可以找到www.example.com/jobs的鏈接。

爲了解決這個問題,手動建立索引後幾百點,我做了通用的URL路徑列表:

/careers 
/careers/ 
/careers.html 
/jobs.aspx 

我寫了一個簡單的Python腳本,當給予公司主頁的列表,使用pycurl - 圍繞libcurl的包裝 - 嘗試HTTP HEAD請求對於每個(主頁,urlpath)對:

http://www.example.com/careers 
http://www.example.com/jobs 
http://www.example.net/careers 
http://www.example.net/jobs 

This主要是作品。

但是,我收集的是ASP.NET MVC常見的配置錯誤問題,導致自定義404頁面在顯示自定義「未找到」頁面時產生200響應代碼。例如

http://www.microsoft.com/bill-gates-is-the-spawn-of-satan.html 

是的,這是正確的人:微軟錯誤配置了自己的服務器。 :-D

如果您使用Firefox的網頁開發工具,您可以看到上面的鏈接產生200 OK而不是404 Not Found。

我認爲這是一個普遍的問題,任何人誰處理刮或機器人:有沒有一個簡單的編程方式,我可以告訴上述鏈接應該產生404而不是200?

在我的特殊情況下,一個不太令人滿意的解決方案是注意我的鏈接都沒有產生404s,然後產生「無法找到」輸出。在這種情況下,我手動谷歌的職業生涯網頁:

http://www.google.com/search?q=site:microsoft.com+careers 

我在近期的目標是部分自動化爲我的技術指標僱主的聯繫的發現。我預計完全自動化它將是可解的;我希望自動化簡單的東西。

+0

我無法重現您的Microsoft示例。我嘗試了curl,chrome和firefox,並且所有人都返回了404狀態。你可能會在你的Python腳本中有一些錯誤嗎? – lagerone

+0

對於我來說,'curl -i http:// www.microsoft.com/bill-gates-is-a-philanthropist.html'給出了一個'HTTP/1.1 200 OK',包括'我們很抱歉,您請求的頁面無法找到。'。 – Joe

+0

也許它與用戶代理有關。我會更詳細地研究它。 –

回答

0

我不知道有什麼辦法從客戶端知道一個頁面是無效的,當服務器明確告訴客戶端頁面有效。我可以想出的第二個最佳解決方案是對通常在諸如「抱歉」和「未找到」等頁面上顯示的常見文本進行grep。當然,如果自定義錯誤頁面實際上是重定向到完全有效的頁面(比如主頁),那麼這對你來說什麼也不做。