2011-09-18 40 views
2

我正在實現一個只處理C中GET/POST/HEAD的Web服務器。我想知道強大解析傳入http請求的一般策略是什麼?解析http請求「逐行」或「char by char」?

我應該怎麼做char by char or line by line

  • 燒焦成炭方法似乎是低效的,因爲我需要大量的代碼來跟蹤狀態,例如,當你看到一個「G」,檢查是否其次是「E」,然後「T」 ...

  • 逐行方法似乎不健壯。例如,客戶發送不完整的請求,例如缺少「\ r \ n」。另一個例子是,該請求可以在不同的順序​​代替GET /index.html HTTP/1.1

+5

如果客戶端發送格式錯誤的請求,請以錯誤請求回覆。你不應該處理畸形的請求。 – 2011-09-18 16:07:05

回答

3

首先,​​格式不正確 - 功能的名稱(例如GET)必須先來。按照WTP的建議,在這種情況下,我會返回'​​400錯誤請求'。

至於失蹤\ r \ n:想想如果這起案件合法發生,你會怎麼做;例如,如果客戶端開始發送數據,但只是沒有完成發送。
這種情況下的常見行爲是等待用戶完成發送HTTP請求,但保持超時,以便惡意或故障客戶端不會使您的服務器關閉。
如果請求未及時完成,請刪除整個請求,並返回'408請求超時'。

一旦這個問題得到處理,你最好用逐行解析。