2013-01-24 2 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)는 상대 URL인지 아니면 절대 URL인지를 충분히 알려주는 2 행입니까?

3) 인코딩이 중요합니까?

4) 다른 가능한 글리치?

btw, 성능은 내가 고려해야 할 매우 중요한 요소입니다.

+0

[here] (https://sourceforge.net/projects/ccgilib/)와 같은 알고리즘이 더 일반적 일 수 있습니다. 내 CGI 라이브러리입니다. –

답변

0

꽵! = "\ 연구 \ n \ 연구 \ n"< ----이 C

시도에서 작동하지 않는 동안 (STRCMP (꽵, "\ 연구 \ n \ 연구 \ n을") == 0)

경우 (꽵 호스트 시작)

경우 (strncmp (꽵 "http://www.frogs.com"나 strlen (꽵)) == 0)

== 0은 일치를 의미합니다. 일치하지 않으면 결과는 0보다 작거나 같습니다. 위의 행은 "http://www.frogs.com"의> = 문자열 길이 인 다음 행의 문자열 길이에 따라 다릅니다.

"btw는 성능을 고려해야 할 매우 중요한 요소입니다."

C는 베어 메탈 성능 = "가벼운 속도"를가집니다. 저 성능 C 코드를 작성하고 경고없이 컴파일하고 충돌하지 않는 C 코드를 작성할 수있는 역량 수준을 갖추려면 엄청난 기술이 필요할 것입니다.

+0

감사합니다. 단지 의사 코드 일뿐입니다. 예를 들어, "이상한"HTTP 헤더, 인코딩 등과 같은 일부 모서리가 빠져있는 것이 더 걱정됩니다. – wei