C로 간단한 HTTP 서버를 구축해야합니다. 지침이 있습니까? 연결? 샘플?
답변
나는 당신이 작은 httpd를 살펴볼 것을 제안한다 . 처음부터 작성하고 싶다면 RFC 2616 을 철저히 읽고 싶을 것 입니다. BSD 소켓 을 사용 하여 매우 낮은 수준에서 네트워크에 액세스하십시오.
답변
다음을 살펴 보시기 바랍니다. 클라이언트 및 서버 작성에 대한 실용적인 가이드
증분 단계에서 구현해야하는 것은 다음과 같습니다.
- 기본 TCP 소켓 계층을 실행합니다 (포트 / 포트에서 수신, 클라이언트 연결 허용 및 데이터 송수신).
- 한 번에 한 줄 (CRLF로 구분)을 읽을 수 있도록 버퍼 된 판독기를 구현합니다.
- 첫 번째 줄을 읽으십시오. 메서드, 요청 버전 및 경로를 구문 분석합니다.
- “Header : value”구문에 대한 헤더 구문 분석을 구현합니다. 접힌 헤더를 펼치는 것을 잊지 마십시오.
- 요청 방법, 콘텐츠 유형 및 콘텐츠 크기를 확인하여 본문을 읽는 방법 / 여부를 결정합니다.
- 콘텐츠 유형에 따라 콘텐츠 디코딩을 구현합니다.
- HTTP 1.1을 지원하려면 “100 Continue”, keep-alive, chunked transfer와 같은 것을 구현하십시오.
- 불완전한 요청 감지, 최대 클라이언트 수 제한 등과 같은 견고성 / 보안 조치를 추가합니다.
- 코드 축소 및 오픈 소스 🙂
답변
HTTP 서버는 개념적으로 간단합니다.
- 청취를 위해 포트 80을 엽니 다.
- 연락이 이루어지면 약간의 정보를 모으십시오 (주로 얻으십시오-나머지는 무시해도됩니다)
- 요청을 파일 요청으로 번역
- 파일을 열고 클라이언트에 다시 뱉어
지원하려는 HTTP의 양에 따라 더 어려워집니다. POST는 조금 더 복잡하고 스크립트, 여러 요청 처리 등입니다.
그러나 기본은 매우 간단합니다.
답변
Mongoose (이전의 Simple HTTP Daemon)는 꽤 좋습니다. 특히 Windows, Windows CE 및 UNIX에서 임베드 가능하고 컴파일됩니다.
답변
포트 80에서 TCP 소켓을 열고 새 연결 수신을 시작한 다음이를 구현 하십시오 . 목적에 따라 거의 모든 것을 무시할 수 있습니다. 가장 쉬운 방법은 소켓에 텍스트를 쓰는 것과 관련된 모든 요청에 대해 동일한 응답을 보낼 수 있습니다.
답변
nweb (Nigel의 웹 서버), “단지 200 줄의 C 소스 코드가있는 작고 안전한 웹 서버 […]”를보십시오.
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing
http://www.ibm.com/developerworks/systems/library/es-nweb/
이 기사에는 의사 코드, 설명 및 주석이 포함되어 있습니다.
편집 : IBM의 링크가 죽었습니다. 웹 페이지의 PDF를 Google 드라이브에 저장했습니다. 다음은 코드 다운로드입니다.
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal 은 몇 가지 사항을 변경하고 GitHub에 자신의 버전을 업로드했습니다.
https://github.com/ankushagarwal/nweb
답변
나는 당신이 사용할 수있는 내 자신을 썼습니다. 이 작업은 sqlite를 가지고 있으며 스레드로부터 안전하며 UNIX 용 C ++입니다.
분리하여 C 호환 코드를 사용할 수 있어야합니다.