2009-11-29 40 views
0

我正在C++中製作HTTP服務器,我注意到apache的工作方式是如果您在最後沒有添加正斜槓的情況下請求目錄,firefox仍然知道它是一個你正在請求的目錄(這對於Firefox來說似乎是不可能的,這就是爲什麼我假設Apache正在做重定向)。如何在C++中執行HTTP重定向

那是假設嗎? apache是​​否檢查您是否正在請求一個目錄,然後使用正斜槓將http重定向到請求?如果這就是apache的工作方式,我該如何在C++中實現它?感謝任何回覆的人。

回答

3

確定是否資源表示一個目錄,如果是這樣一個答覆:

HTTP/1.X 301 Moved Permanently 
Location: URI-including-trailing-slash 

使用301允許用戶代理緩存重定向。

+0

謝謝,這正是我所做的,它的工作非常精美 – adhanlon 2009-12-01 05:33:10

1

如果你想做到這一點,您可以:在路徑

  1. 呼叫統計
  2. 決定了它是一個目錄
  3. 發送necesssary HTTP響應進行重定向

我不確定你需要這樣做。安裝Firefox的Web開發者附加組件,以確切地查看來回發生的事情。

0

您應該安裝Fiddler並觀察其他Web服務器發送的HTTP標頭。

您的問題不可能在沒有更多細節的情況下精確回答,但您希望發送帶有Location標頭的HTTP 3xx狀態代碼。

1

說真的,這不應該是一個問題。如何繼續,建議:

  • 獲取源代碼的Apache,看看它做什麼
  • 構建Apache的調試版本,並在這樣的情況下調試通過代碼;檢查哪些代碼可以運行。
  • 安裝Wireshark(網絡分析工具),Live HTTP Headers(Firefox擴展)等,並查看網絡上發生了什麼
  • 閱讀HTTP的相關RFC - 無論如何,如果您想要保留在枕頭下正在寫一臺服務器。

一旦你做完了這些事情,應該很明顯該怎麼做。如果你不能做這些事情,你不應該試圖用C++開發Web服務器。

1

該假設是正確的,並確保您的響應包含允許目錄列表和合法301/302第一行的URL的位置標頭。這不是一個C++問題,它更像是一個HTTP協議問題,因爲您正在嘗試編寫HTTP服務器,正如其他帖子所建議的那樣,請閱讀RFC。