티스토리 뷰
반응형
HTTP 메시지
- HTTP에서 교환하는 정보
- 리퀘스트 메시지와 리스폰스 메시지가 있음
- 여러 줄의 텍스트 데이터로 구성
- 메시지 헤더와 메시지 바디로 구성
- 개행문자로 헤더와 바디를 구분 (개행문자는 CRLF를 사용)
- 바디가 없을 수도 있음
💡 CRLF
CR과 LF의 조합
CR(\r): Carriage Return
LF(\n): Line Feed
메시지 헤더
리퀘스트 메시지 헤더
리퀘스트 라인 |
리퀘스트 헤더 필드 |
일반 헤더 필드 |
엔티티 헤더 필드 |
etc. |
리스폰스 메시지 헤더
상태 라인 |
리스폰스 헤더 필드 |
일반 헤더 필드 |
엔티티 헤더 필드 |
etc. |
- 리퀘스트 라인
- 리퀘스트에 사용하는 메서드
- 리퀘스트 URI
- 사용하는 HTTP 버전
- 상태 라인
- 리스폰스 결과의 상태 코드 & 설명
- 사용하는 HTTP 버전
- 헤더 필드
- 리퀘스트와 리스폰스의 여러 조건과 속성
인코딩
사용자가 입력한 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것
- 전송 효율이 높아짐
- 다량의 액세스를 효율적으로 처리
- 인코딩을 위해서 리소스를 소비함
메시지 & 엔티티 차이
- 메시지
- HTTP 통신의 기본 단위
- 8비트(Octet sequence)로 구성
- 통신을 통해 전송
- 엔티티
- 페이로드(payload)로 전송되는 정보
- 엔티티 헤더와 엔티티 바디로 구성
💡 페이로드
사용에 있어서 전송되는 데이터. 전송의 근본적이 목적이 되는 데이터. 전송 행위의 본래 의도.
컴퓨터 보안에서 페이로드는 그 소프트웨어가 주는 피해를 뜻함.
HTTP 메시지 바디의 역할은 엔티티 바디를 운반하는 역할을 한다.
Content Codings
- 용량을 줄이기 위해 파일을 압축하는 것
- 엔티티에 적용하는 인코딩
- 콘텐츠 코딩된 엔티티는 클라이언트 측에서 디코딩
Chunked Transfer Coding
- 엔티티 바디를 청크(덩어리)로 분할하여 전송하는 것
- 16진수로 다음 청크 사이즈 표시
- 엔티티 바디 끝은 0(CRLF)
- 클라이언트에서 원래의 엔티티 바디로 복원
Multipart
- 메시지 바디 내부에 여러 개의 엔티티(텍스트나 이미지 등)를 포함시켜 보내기 위한 기능
- HTTP 메시지로 멀티파트를 사용할 때는 Content-type 헤더 필드를 사용
멀티파트의 종류
- multipart/form-data: 파일 업로드에 사용
- multipart/byteranges: 상태 코드 206 리스폰스 메시지가 복수의 내용을 포함할 때 사용
💡 MIME(Multipurpose Internet Mail Extensions)
메일에서 텍스트, 이미지 등의 다른 종류의 데이터를 다루기 위한 기능
Range Request
- resume(재개) 기능
- 중간에 연결이 끊긴 다운로드를 재개하기 위해서 사용
- 다운로드를 재개하기 위해서 범위를 지정하여 다운로드
- 범위를 지정하여 리퀘스트 하는 것
Range Request에 대한 리스폰스 메시지
- 206 리스폰스 메시지가 수신
- 복수 범위: multipart/byteranges
- 서버가 range request를 지원하지 않을 대: 200 OK 메시지
리퀘스트 형식
5001 ~ 10000 바이트
Range: bytes = 5001-10000
5001 바이트 이상
Range: bytes = 5001-
처음부터 3000바이트까지와 5000~7000 바이트
Range: bytes = -3000, 5000-7000
Content Negotiation
- URI에서 리소스의 서로 다른 버전을 서브하기 위해 사용되는 메커니즘
- 클라이언트와 서버가 제공하는 리소스의 내용에 대해 교섭하는 것
- 클라이언트에 더 적합한 리소스 제공 (나라마다 다른 언어의 웹 페이지를 전송)
적합한 리소스를 판단하기 위한 기준
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
content negotiation 종류
- Server-driven Negotiation
- 서버 측에서 사용하는 방식
- 서버 측에서 리퀘스트 헤더 필드의 정보를 참고하여 처리
- 브라우저가 보내는 정보이기 때문에 유저에게 적절하다고 보장할 수 없음
- Agent-driven Negotiation
- 클라이언트 측에서 사용하는 방식
- 브라우저의 선택지 중에서 선택
- Javascript를 통해서 자동으로 정할 수도 있음
- Transparent Negotiation
- Server-driven과 Agent-driven의 혼합
- 서버와 클라이언트가 각각 하는 방식
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩테스트
- java
- graphql
- 확장 함수
- squash merge
- downTo
- git
- DGS Framework
- string
- Basic Type
- 1차 인터뷰
- 주생성자
- mysql
- hashcode
- go 특징
- 네이버 2022 공채
- postman
- Kotlin
- Squash and merge
- Kotlin In Action
- postman collection
- postman tests
- github
- python3
- pm.expect
- pm.test
- 코틀린
- Python
- solidity
- 2차 인터뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함