본문 바로가기

Job Notes/Programming

HTTP Protocol

아래 내용은 네이버 카페 'VC++ 삽질공간' 의 제온 님의 글 중 퍼온 것입니다.

[출처] HTTP Protocol|작성자 함박웃음


HTTP
프로토콜

 

HTTP 서버를 구현하려면 HTTP 프로토콜을 지원하여야 것입니다.

 

이곳에 가면 HTTP 프로토콜에 대한 문서를 보실 있습니다.

http://www.w3.org/Protocols/rfc2616/rfc2616.html

 

이곳에는 HTTP 프로토콜 문서를 한국어로 번역해놓은 문서가 있습니다. 이곳에서 번역해 놓은 문서는 HTTP/1.0 버전입니다. (위에 있는 문서는 HTTP/1.1 버전입니다.)

http://www.initech.com/%7Eqkim/HTTP/http10v3.html

 

제가 구한 자료에서는 HTTP 프로토콜을 알기쉽게 요약해 놓은 것이 있습니다. 자료는 저작권 문제상 함부로 업로드해놓지는 않을 것입니다만(하지만 인터넷에서 약간의 검색으로 구한 자료이니 맘만 먹으면 쉽게 구하실 있을 겁니다.), HTTP 프로토콜에 대한 설명만 살짝 ^^; 가져다 보여드리면 다음과 같습니다.

 

HTTP Protocol

TCP/IP 애플리케이션 계층의 프로토콜인 HTTP 메시지는 요청라인과 상태라인에 의해서 요청 메시지와 응답메시지로 나눌 있다.  


사용자 삽입 이미지

l        요청라인


사용자 삽입 이미지

메소드 (Method)

요청 메시지는 메소드에 의해 분류되는데 다음과 같은 메서드를 가진다.

Method

GET

클라이언트가 URL 정의되어 있는 문서를 검색

오류가 없을 경우 메시지의 BODY 문서의 내용을 저장하여 응답

HEAD

GET 유사하나 응답메세지에 BODY 포함하지 않음

POST

클라이언트가 서버로 정보를 입력 ( 제공 )

PUT

URL 위치에 문서를 저장할 사용

PATCH

변경사항의 목록을 가진다는 점을 제외하고 PUT 유사함

COPY

파일을 다른 위치로 복사할 사용. 원본파일은 URL 에서 표기되고, 목적지는 헤더에서 주어짐

MOVE

파일을 다른 위치로 이동할 사용. 원본파일은 URL 에서 표기되고, 목적지는 헤더에서 주어짐

DELETE

서버에서 문서를 제거하기 위해 사용

LINK

링크를 생성할 사용

UNLINK

LINK 에서 생성한 링크를 삭제할 사용

OPTION

클라이언트가 서버에게 사용 가능한 옵션을 질의하기 위해 사용

 

URL

예를 들면, "http://www.abc.com/abc" 같이 나타냄

 

HTTP 버전 (HTTP version)

HTTP 버전은 "HTTP/1.x" 같은 표현으로 표시됨

 

 

l        응답라인(상태라인)


사용자 삽입 이미지

HTTP 버전 (HTTP version)

요청라인의 HTTP version 필드와 동일

 

상태코드

Code

Phrase

Description

Informational

100

Continue

The initial part of the request has been received and the client may continue with its request

101

Switching

The server is complying with a client request to switch protocols defined in the upgrade header

Success

200

OK

The request is successful

201

Created

A new URL is created

202

Accepted

The request is accepted, but it is not immediately acted upon

204

No content

There is no content in the body

Redirection

301

Multiple choices

The requested URL refers to more than one resource

302

Moved permanently

The requested URL is no longer used by the server

304

Moved temporarily

The requested URL has moved temporarily

Client Error

400

Bad request

There is a syntax error in the request

401

Unauthorized

The request lacks proper authorization

403

Forbidden

Service is denied

404

Not found

The document is not found

405

Method not allowed

The method is not supported in this URL

406

Not acceptable

The format requested is not acceptable

Server Error

 

 

500

Internal server error

There is an error, such as a crash, in the server site

501

Not implemented

The action requested cannot be performed

503

Service unavailable

The service is temporarily unavailable, but may ve requested in the future

 

상태구문 (Status phrase)

문자로 상태코드를 설명하는데 상태코드의 Description 부분임

 

 

음냐하지만 학습을 목적으로 만드는 간단한 http 서버에서 프로토콜들을 모두 지원할 필요는 없지 않을까요? -_-;

프로젝트의 목적은 프로토콜을 모두 지원하여 제대로 HTTP 서버를 만드는 것이 아니라, 간단한 HTTP 서버를 구현해보고 전체적인 아키텍쳐를 이해하고자 하는 것입니다. 문제를 -간단화시키기 위해 많은 클라이언트로부터의 요청 라인의 메소드 GET 만을 지원할 것입니다. 그것도 다음과 같은 초간단 형태로 말입니다.

 

GET http-path-to-file\r\n\r\n

 

GET http-path-to-file 이외의 모든 클라이언트로부터의 요청 정보는 깔끔하게.. 무시할 것입니다. -_-;

 

응답 라인에서는 클라이언트로부터의 요청 메소드가 GET 아니라면 405, 요청된 문서가 발견되지 않았다면 404, 성공적으로 요청된 문서를 보낼 때는 200 클라이언트에게 보낼 것입니다.