티스토리 뷰
728x90
반응형
서론
- HTTP 프로토콜이 배달원이라면 HTTP 메시지는 배달원이 배송하는 소포와 같습니다.
- 이번 장에서는 메시지가 어떻게 흘러가는지와 HTTP 메시지의 구성 요소, 요청 메시지와 응답 메시지의 차이를 살펴보겠습니다.
메시지의 흐름
- 메시지는 클라이언트, 프록시, 서버 사이를 흐릅니다.
- 인바운드, 아웃바운드, 업스트림, 다운스트림은 메시지의 방향을 의미하는 용어입니다.
💡 인바운드
- 클라이언트의 요청이 서버로 진입하는 것을 말합니다.
- 우리가 서버에 파일이나 이미지를 저장할 때, 업스트림이라고도 합니다.
💡 아웃바운드
- 클라이언트의 요청을 서버가 처리하고 , 메시지를 서버에서 클라이언트로 보내는 것을 말합니다.
- 우리가 서버로부터 파일이나 이미지를 다운로드 받을 때, 다운 스트림이라고도 할 수 있습니다.
메시지의 구성 요소
- 메시지는 시작줄, 헤더, 본문 이렇게 구성이 되어 있습니다.
- 시작줄은 이것이 어떤 메시지인지 서술하며, 헤더는 속성을, 본문은 데이터를 담고 있습니다. 또한 본문은 없을 수도 있습니다.
💡 Request Message
start line
- start line은 method, target url, http version을 포함하고 있습니다.
GET /test.html HTTP/1.1
[HTTP Method] [Request target] [HTTP version]
headers
- headers은 요청에 대한 추가 정보를 담고 있습니다.
- headers도 크게 general headers, request headers, entity headers로 나뉩니다.
Host: naver.com
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
body
- 클라이언트가 전송하고자 하는 데이터를 담고 있습니다. 만약 전송하고자 하는 데이터가 없다면 비어있습니다.
💡 Response Message
- Request Message와 비교하여 시작줄만 다르고, headers, body는 비슷합니다.
status line
- HTTP Version, Status Code, Status Text를 포함하고 있습니다.
HTTP/1.1 200 OK
[HTTP version] [Status Code] [Status Text]
Header
- 헤더에는 특정 종류의 메시지에만 사용할 수 있는 헤더와, 일반 목적으로 사용할 수 있는 헤더, 그리고 요청과 응답 메시지 양쪽 모두에서 정보를 제공하는 헤더가 있습니다. 이러한 헤더는 크게 5가지로 분류될 수 있습니다.
💡 일반 헤더(General Headers)
- 일반 헤더는 클라이언트와 서버 양쪽 모두 사용합니다. 이러한 일반 헤더는 메시지의 기본적인 정보를 제공합니다.(ex: Date)
일반 캐시 헤더
- HTTP/1.0은 HTTP 애플리케이션에게 매번 원 서버로부터 객체를 가져오는 대신 로컬 복사본으로 캐시할 수 있도록 해주는 최초의 헤더를 도입하였습니다.
💡 요청 헤더(Request Headers)
- 클라이언트가 서버에게 받고자 하는 데이의 타입이 무엇인지와 같은 부가 정보를 제공합니다.
Accept 관련 헤더
- 클라이언트는 Accept 관련 헤더들을 사용해 서버에게 자신의 선호와 능력을 알려줄 수 있습니다.
- Accept 헤더를 사용함으로써 클라이언트가 사용할 수 없는 것을 판별하여 전송하는데 시간과 대역폭의 낭비를 줄일 수 있습니다.
헤더 | 설명 |
Accept | 클라이언트는 자신이 원하는 미디어 타입을 알려줍니다. |
Accept-Encoding | 클라이언트는 자신이 원하는 인코딩 방식을 알려줍니다. |
Accept-Language | 클라이언트는 자신이 원하는 가능한 언어를 알려줍니다. |
Accept-Charset | 클라이언트는 자신이 원하는 문자 집합을 알려줍니다. |
조건부 요청 헤더
- 때때로 클라이언트는 요청에 몇몇 제약을 넣기도 합니다. 예를들어 클라이언트가 이미 어떤 문서의 사본을 가지고 있는 상태라면, 클라이언트는 서버에게 그 문서를 요청할 때, 자신이 가지고 있는 사본과 다를 때만 전송해달라고 요청할 수 있습니다.
요청 보안 헤더
- HTTP는 자체적으로 요청을 위한 간단한 인증요구/응답 체계를 가지고 있습니다. 이러한 인증요구/응답 체계는 클라이언트가 특정 리스소에 접근하기 전 자신을 인증하게 함으로써 트랜잭션을 조금 더 안전하게 만들고자 합니다.
- Authorization, Cookie 등이 있습니다.
💡 응답 헤더(Response Headers)
- 응답 헤더는 클라이언트에게 부가 정보를 제공합니다. 누가 응답을 보내고 있는지, 혹은 응답자의 능력은 어떻게 되는지 알려주며 응답에 대한 특별한 설명도 제공할 수 있습니다.
헤더 | 설명 |
Age | 응답이 얼마나 오래되었는지 알려줍니다. |
Public | 서버가 특정 리소스에 대해 지원하는 요청 메서드의 목록입니다. |
Retry-After | 현재 리소스가 사용 불가능한 상태일 때, 언제 가능해지는지 알려줍니다. |
Server | 서버 애플리케이션의 이름과 버전을 알려줍니다. |
Title | HTML 문서에서 주어진 것과 같은 제목 |
Warning | 사유 구절에 있는것보다 더 자세한 경고 메시지 |
협상 헤더
- 서버에 영어와 일본어로 번역된 HTML 문서가 있는 경우와 같이 여러 가지 표현이 가능한 상황이라면, HTTP/1.1은 서버와 클라이언트가 어떤 표현을 선택할 것인가에 대한 협상을 할 수 있도록 지원합니다.
💡 엔티티 헤더(Entity Headers)
- 엔티티 헤더란 엔티티 본문에 대한 헤더를 말합니다. 예를들어 엔티티 헤더는 엔티티 본문에 들어가 있는 데이터의 타입이 무엇인지 말해줄 수 있습니다.
콘텐츠 헤더
- 콘텐츠 헤더는 엔티티의 콘텐츠에 대한 구체적인 정보를 제공합니다.
헤더 | 설명 |
Content-Type | 자원의 형식을 명시 |
Content-Encoding | 자원에 대한 데이터의 인코딩 방식 |
Content-Language | 자원을 이해할 수 있는 자연어 |
Content-Length | 자원의 크기나 길이 |
Content-Location | 해당 자원이 실제 어디에 위치했는지 알려줌 |
엔티티 캐싱 헤더
- 일반 케시 헤더는 언제 어떻게 캐시 되어야 하는지에 대한 지시자를 제공합니다. 하지만 엔티티 캐싱 헤더는 엔티티 캐싱에 대한 정보를 제공합니다.
- 예를들어 리소스에 대한 캐시된 사본이 아직 유효한지에 대한 정보와 캐시된 리소스가 더 이상 유효하지 않게 되는 시점을 더 잘 추정하기 위한 단서 같은 것입니다.
728x90
반응형
'Network' 카테고리의 다른 글
TCP 커넥션 관리 (0) | 2023.04.04 |
---|---|
URL과 리소스 (0) | 2023.03.18 |
HTTP에 대해 (0) | 2023.03.18 |
Network - TCP-UDP란(feat. 3 way hand shake, 4 way hand shake) (2) | 2022.01.04 |
Network - HTTP 메서드와 안정성, 캐시가능성 그리고 멱등성 (0) | 2022.01.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- redis sorted set으로 대기열 구현
- transactional outbox pattern
- pipe and filter architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- redis sorted set
- service based architecture
- spring boot excel download paging
- spring boot redisson destributed lock
- spring boot redisson 분산락 구현
- JDK Dynamic Proxy와 CGLIB의 차이
- 서비스 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- java ThreadLocal
- 공간 기반 아키텍처
- redis 대기열 구현
- pipeline architecture
- java userThread와 DaemonThread
- polling publisher spring boot
- spring boot redis 대기열 구현
- spring boot 엑셀 다운로드
- spring boot redisson sorted set
- @ControllerAdvice
- 레이어드 아키텍처란
- 자바 백엔드 개발자 추천 도서
- microkernel architecture
- space based architecture
- 람다 표현식
- spring boot excel download oom
- spring boot poi excel download
- transactional outbox pattern spring boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함