2013-01-24 55 views
0

我需要解析標頭以從http請求中提取絕對URL。 我只關心的方法只有GET,POST和HEAD。我想確認以下簡單的邏輯/僞代碼將是足以覆蓋大多數情況下,C:HTTP標頭解析

1 url = extract the url from the first request line; 
2 if (url[0] == '/') { 
3 //relative url, keep reading until HOST or end of the header 
4 while (nextline != "\r\n\r\n") { 
5  if (nextline starts with HOST) { 
6   host = extract the host value; 
7   return (host+url); 
8  } else { 
9   continue; 
10  } 
11  
12 } 
13 return bad_req; 
14 } else { 
15 //absolute url, return directly, ignore HOST 
16 return url; 
17 } 

1)是否有任何情況下離開了?

2)第2行足以說明它是相對URL還是絕對URL?

3)編碼問題?

4)其他可能的故障?

順便說一句,性能是一個非常重要的因素,我需要考慮。

+0

你可以做這個算法更常見,例如[here](https://sourceforge.net/projects/ccgilib/)是我的CGI庫。 –

回答

0

nextline!= 「\ r \ n \ r \ n」 個< ----這不起作用用C

嘗試在(STRCMP(nextline, 「\ r \ n \ r \ n」) == 0)

如果(nextline與主機開始)

如果(STRNCMP(nextline 「http://www.frogs.com」,strlen的(nextline))== 0)

== 0表示匹配。如果不匹配,則結果小於或大於0.以上行取決於下一行的字符串長度> =「http://www.frogs.com」的字符串長度。 「

」順便說一句,性能是一個非常重要的因素,我需要考慮。「

C具有裸機性能=「光速」。編寫低性能C代碼需要大量的技能,並且具有足夠高的能力來編寫C代碼,這些C代碼在沒有警告的情況下編譯並且不會崩潰。

+0

謝謝指出。它只是爲了僞代碼。我更擔心如果我遺漏了一些角落案例,例如,「奇怪的」HTTP標頭,編碼等等。 – wei