Muscardinus
3장 HTTP 메세지 본문
메세지의 흐름
메세지는 항상 인바운드에서 아웃바운드로 이동한다
메세지의 각 부분
HTTP 메세지는 부분적으로 나뉘어져 있다
HTTP/1.0 200 OK // 시작줄
---------------------------
Content-type: text/plain // 헤더
Content-length: 10
---------------------------
Hi I'm a message! // 본문
전체적으로 시작줄은 HTTP 프로토콜과 status를 명시하고
헤더에는 본문에 담긴 Content의 종류와 길이
그리고 본문에는 내용을 명시하고 있다.
메서드 (Method)
HTTP를 요청하기 위해서는 메서드라는 것이 존재하는데
메서드 | 설명 | 메세지 본문이 있는가? |
GET | 서버에서 어떤 문서를 가져온다 | 없음 |
HEAD | 서버에서 어떤 문서에 대한 헤더만 가져온다 | 없음 |
POST | 서버가 처리해야 할 데이터를 보낸다 | 있음 |
PUT | 서버에 요청 메세지의 본문을 저장한다 | 있음 |
TRACE | 메세지가 프락시를 거쳐 서버에 도달하는 과정을 추적한다 | 없음 |
OPTIONS | 서버가 어떤 메서드를 수행할 수 있는지 확인한다 | 없음 |
DELETE | 서버에서 문서를 제거한다 | 없음 |
위 메서드 중에서, 안전한 메서드가 있는데
- GET: 서버에게 Resource를 요청하기 위한 메서드
- HEAD: 정확하게 GET 처럼 행동하지만, 본문은 없고 헤더만 반환한다
그 외로는
- PUT: 클라이언트가 요청의 본문을 들고 요청하는데, 요청 URL 대로 새 문서를 만들거나, 기존의 문서를 교체하는데 사용한다
- POST: 클라이언트가 서버에 입력 데이터를 전송하기 위해서 사용한다
- TRACE: 주로 진단을 위해 사용되며, 요청한 요청이 어떠한 연쇄 요청/응답을 거쳐가는지 알 수 있다
- OPTIONS: 어떤 요청 메서드가 있는지 서버에게 질문하는 용도로 많이 쓴다
- DELETE: 서버에게 요청 URL을 삭제해달라고 하지만, 삭제가 수행되는 것을 보장하지 못한다
추가로, 확장메서드라는 것이 있지만, 다음과 같은 규칙을 꼭 따른다
엄격하게 보내고, 관대하게 받아들여라 |
상태코드
메서드는 서버에게 무엇을 하라고 말해주는 것처럼,
상태코드는 서버가 클라이언트에게 무엇이 일어났는지 말해준다
전체 범위 | 정의된 범위 | 분류 |
100 - 199 | 100 - 101 | 정보 |
200 - 299 | 200 - 206 | 성공 |
300 - 399 | 300 - 305 | 리다이렉션 |
400 - 499 | 400 - 415 | 클라이언트 에러 |
500 - 599 | 500 - 505 | 서버 에러 |
주로 쓰이는 상태코드
100 - 199
|
200 - 299 (성공 상태코드)
|
300 - 399 (리다이렉션 코드)
|
400 - 499 (클라이언트 에러 상태 코드)
|
500 - 599 (서버 에러 상태코드)
|
헤더
응답 코드에서 응답 헤더도 매우 중요하다
일반 헤더
헤더 | 설명 |
Connection | 클라이언트와 서버가 요청/응답 연결에 대한 옵션을 정할 수 있게 해준다 |
Date | 메세지가 언제 만들어졌는지에 대한 시간 |
MIME-Version | 발송자가 사용한 MIME의 버젼을 알려준다 |
Transfer-Encoding | 수신자에게 안전한 전송을 위해 어떠한 인코딩이 적용되었는지 알려준다 |
Upgrade | 발송자가 업그레이드 하길 원하는 프로토콜 버젼 |
Cache-Control | 메세지와 함께 캐시 지지자를 전달하기 위해 사용 |
요청 헤더
헤더 | 설명 |
Client-IP | 클라이언트가 실행된 컴퓨터의 IP 주소 |
Host | 요청의 대상이 되는 서버의 호스트 명과 포트 |
User-Agent | 요청을 보낸 어플리케이션의 이름을 서버에게 알려준다 |
Referer | 현재의 요청 URI가 들어있었던 문서의 URL을 제공한다 |
Accept 관련 헤더
헤더 | 설명 |
Accept | 서버에게 서버가 보내도 되는 미디어 종류를 알려준다 |
Accept-Charset | 서버에게 서버가 보내도 되는 문자집합을 알려준다 |
Accept-Encoding | 서버에게 서버가 보내도 되는 인코딩을 말해준다 |
Accept-Language | 서버에게 서버가 보내도 되는 언어를 말해준다 |
Tranfer-Encoding | 서버에게 서버가 보내도 되는 확장 전송 코딩을 말해준다 |
조건부 요청 헤더
헤더 | 설명 |
Except | 클라이언트가 요청에 필요한 서버의 행동을 열거할 수 있게 해준다 |
Range | 서버가 범위 요청을 지원한다면, 리소스에 대한 특정 범위를 요청한다 |
요청 보안 헤더
헤더 | 설명 |
Authorization | 클라이언트가 서버에게 제공하는 인증 그 자체에 대한 정보를 담고 있다 |
Cookie | 클라이언트가 서버에게 토큰을 전달할 때 사용한다 |
Cookie2 | 요청자가 지원하는 쿠키의 버젼을 알려줄 때 사용한다 |
응답 헤더
헤더 | 설명 |
Age | 응답이 얼마나 오래되었는지 |
Public | 서버가 특정 리소스에 대해 지원하는 요청 메서드의 목록 |
Retry-After | 현재 리소스가 사용 불가능한 상태일 때, 언제 가능한지 알려주는 날짜 혹은 시간 |
Server | 서버 애플리케이션에 대한 이름과 버젼 |
Vary | 서버가 확인해 보아야하고 그렇기 때문에 응답에 영향을 줄 수 있는 헤더들의 목록 |
엔티티 헤더
헤더 | 설명 |
Allow | 이 엔티티에 대하여 수행할 수 있는 요청 메서드들 |
Location | 클라이언트에게 해당 엔티티가 실제로 어디있는지 알려주는 헤더 |
Content-Encoding | 본문에 적용된 인코딩 |
Content-Length | 본문의 길이나 크기 |
Content-Location | 리소스가 실제 어디에 위치하는지 |
Content-Range | 전체 리소스에서 이 엔티티가 해당하는 범위를 바이트 단위로 표현 |
Content-Type | 이 본문이 어떤 종류의 객체인지 |
Expires | 이 엔티티가 유효하지 않을 때 원본을 다시 받아와야 하는 일시 |
'네트워크 > HTTP 완벽가이드' 카테고리의 다른 글
4장 커넥션 관리 (0) | 2022.10.05 |
---|---|
2장 URL 과 리소스 (0) | 2022.10.05 |
1장 웹의 기초 (0) | 2022.10.05 |