시작줄 & 헤더블록 → 줄 단위로 분리된 아스키 문자열 (각 줄은 캐리지리턴(ACSII 13) & 개행문자(ACSII 10)로 구성된 두 글자의 줄바꿈 문자열(CRLF)로 끝난다)
본문 → 시작줄, 헤더블록과 달리 본문은 텍스트와 이진데이터(ex) 이미지나 동영상)를 포함할 수 있고, 그냥 비어있을 수도 있음
메시지 문법
모든 HTTP 메시지
요청: 웹 서버에 어떤 동작을 요구
응답: 요청의 수행 결과를 클라이언트에게 돌려줌 (상태정보와 결과 데이터 등)
⇒ 둘다 기본적 구조가 같음!
요청/응답 메시지 형식
요청 ```
<메서드> <요청 Url=""> <버전> <헤더> <엔터티 본문=""> ``` * 응답 ``` <버전> <상태 코드=""> <사유 구절=""> <헤더> <엔터티 본문=""> ``` - 메서드: 클라이언트 측에서 서버가 리소스에 대해 수행해주길 바라는 동작 - 요청 URL: 요청 대상이 되는 리소스를 지칭하는 완전한 URL 혹은 URL의 경로 구성요소다 - 버전: 메시지에서 사용 중인 HTTP의 버전이다. - 형식 - HTTP/<메이저>, <마이너> - 상태 코드: 요청 중에 무엇이 일어났는지 설명하는 3자리 숫자 - 사유 구절: 숫자로 된 상태 코드의 의미를 사람이 이해할 수 있게 설명해주는 짧은 문구 - 상태 코드 이후부터 줄바꿈 문자열까지가 사유 구절이다. 이는 오로지 사람에게 읽히기 위한 목적으로 존재한다. - 헤더: 이름, 콜론(:), 선택적인 공백, 값, CRLF가 순서대로 나타나는 0개 이상의 헤더들 - 엔터티 본문: 임의의 데이터 블록을 포함한다 ### 시작줄 모든 HTTP 메시지는 시작 줄로 시작한다. 메서드, 상태 코드, 사유 구절, 버전 번호 등이 포함된다. ### 헤더 HTTP 헤더 필드는 요청과 응답 메시지에 추가 정보를 더한다. 기본적으로 이름/값 쌍의 목록이다. ### 엔티티 본문 엔티티 본문은 이미지, 비디오, HTML 문서, 소프트웨어 애플리케이션, 신용카드 트랜잭션, 전자우편 등 여러 종류의 디지털 데이터를 실어 나를 수 있다. ## 메서드 1. GET * GET은 주로 서버에게 리소스를 달라고 요청하기 위해 쓰인다. 2. HEAD * HEAD 메서드는 정확히 GET 처럼 동작하지만, 서버는 응답으로 헤더만을 반환하며 엔티티 본문은 반환되지 않는다. * HEAD를 사용하는 이유 - 리소스를 가져오지 않고도 그에 대해 무엇인가를 알아낼 수 있다. - 응답의 상태코드를 통해 개체의 존재 여부를 확인할 수 있다. - 헤더를 확인하여 리소스가 변경되었는지 검사할 수 있다. 3. PUT * PUT 메서드는 서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나 이미 URL이 존재한다면 본문을 사용해서 교체한다. * PUT은 콘텐츠 변경을 하도록 해주므로, 웹 서버가 PUT을 수행하기 전에 사용자 인증을 해야한다. 4. POST * POST 메서드는 서버에 입력 데이터를 전송하기 위해 설계되었다. 5. TRACE * 클라이언트가 어떤 요청을 할 때, 그 요청은 방화벽, 프락시, 게이트웨이 등의 애플리케이션을 통과할 수 있다. 이들한테는 원래의 HTTP 요청을 수정할 수 있는 기회가 있으며, TRACE 메서드는 클라이언트에게 자신의 요청이 서버한테 도달했을 때 어떻게 보이는지 알려준다. * TRACE 메서드는 주로 진단을 위해 사용된다. 요청이 의도한 요청/응답 연쇄를 거쳐가는지 검사할 수 있으며, 프락시나 다른 애플리케이션들이 요청에 어떤 영향을 미치는지 확인해보고자 할 때도 좋은 도구다. 6. OPTIONS * OPTIONS 메서드는 웹 서버에게 여러가지 종류의 지원범위에 대해 물어본다. * 서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 물어볼 수 있다. 7. DELETE * DELETE 메서드는 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청한다. 마이너>메이저>엔터티>헤더>사유>상태>버전>엔터티>헤더>버전>요청>메서드>