CPP로 웹서버 만들기 - 2

JaeGu Jeong·2022년 11월 20일
0

RFC 7231기준으로 작성

HTTP

하이퍼텍스트 전송 프로토콜.
분산, 협업, 하이퍼텍스트 정보 시스템에 대한 상태없는 응용계층 프로토콜이다. 원래 분산객체 시스템에 대한 인터페이스로 사용할 수 있도록 설계되어있다.

URI

서버는 클라이언트로부터 요청이 수신되면 uri를 유효한 요청 uri로 재구성한다. http설계 목적에 요청에서 리소스식별을 분리해야한다 . 즉, uri는 자원만을 식별하는데 사용하고 제어는 메소드로 해야한다.

Location과 Content-Location헤더

Location헤더는 협상이 가능한 경로 /index
Content-Location헤더는 협상이 끝난 경로 /index.html (html로 처리되지않고 php로 처리되었다면 /index.php)

Method

메소드 토큰은 대소문자를 구분하는 시스템에 사용될 수 있으므로 대소문자를 구분한다. 자원을 변경하지 않는 요청을 'safe'로 간주하며, GET, HEAD, OPTION, TRACE가 이에 해당한다. 'safe'를 구분하는 목적은 성능 최적화 등을 위해 캐시같은 기능을 사용할 때 잠재적인 위해 및 변경처리(신뢰가 낮은 컨텐츠 처리)에 사용자가 적절한 제약조건을 적용하기 위해서이다.

Method Description

GET : 대상 자원 전송.
HEAD : GET과 동일하지만 바디를 빼고 전송.
POST : 페이로드(BODY)에서 구체적인 자원 처리 수행.
PUT : 대상(자원)을 페이로드(BODY)로 대체.
DELETE : 대상 자원을 모두 제거.
CONNECT : 대상 자원으로 식별된 서버에 대한 터널 설립.
OPTION : 대상 자원에 대한 통신옵션 설명.
TRACE : 대상 자원의 경로에 따라 메시지 루프백 테스트 수행.

서버 지원 범위

모든 범용서버는 GET, HEAD method를 지원해야 하며, 그 외의 method는 선택사항이다. 만약 서버가 인식 할 수 없는 메소드는 501상태코드로 응답해야한다. 서버가 인식해서 자원에 접근 할 수 있더라도 해당자원이 메소드를 허용하지 않으면 405상태코드로 응답한다.

캐시 사용가능 메소드

기본적으로 GET, HEAD가 cacheable로 정의되며 POST도 가능은하지만 대부분 앞의 두 메소드만 지원한다.

profile
BackEnd Developer

0개의 댓글