Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 지네릭스
- 데베
- 리액트 네이티브
- 팀플회고
- 모두의네트워크
- 깃 터미널 연동
- 모두를위한딥러닝
- 백준 4358 자바
- 깃허브 로그인
- 자바
- 깃 연동
- 문자열
- SQL
- 네트워크
- 데이터베이스
- 깃허브 토큰 인증
- HTTP
- 리액트 네이티브 프로젝트 생성
- 정리
- 머신러닝
- 리액트 네이티브 시작하기
- 스터디
- 모두의 네트워크
- 백준 4358번
- 백준
- 딥러닝
- React Native
- 백준 4949번
- 백준 5525번
- 모두를 위한 딥러닝
Archives
- Today
- Total
솜이의 데브로그
3장 ) HTTP 정보는 HTTP 메시지에 있다 본문
Reference : 그림으로 배우는 Http&Network Basic
HTTP 메시지
- HTTP에서 교환하는 정보를 HTTP 메시지라고 한다.
- HTTP 메시지는 복수 행의 데이터로 구성된 텍스트 문자열이다.
- 메시지 헤더와 메시지 바디로 구성되어 있다.
- 최초에 나타나는 개행 문자 (CR+LF)로 메시지 헤더와 바디를 구분.
리퀘스트 메시지와 리스폰스 메시지의 구조
(위 그림 참고)
- 리퀘스트 라인 : 리퀘스트에 사용하는 메소드와 리퀘스트 URI와 사용하는 HTTP 버전이 포함됨.
- 상태 라인 : 리스폰스 결과를 나타내는 상태코드와 설명, 사용하는 HTTP 버전 포함.
- 헤더 필드 : 리퀘스트와 리스폰스의 여러 조건과 속성 등을 나타내는 각종 헤더 필드 포함. (일반 헤더 필드, 리퀘스트 헤더 필드, 리스폰스 헤더 필드, 엔티티 헤더 필드 등)
- 그 외 : HTTP의 RFC에는 없는 헤더 필드(쿠키 등)가 포함.
인코딩으로 전송 효율을 높이다
- 전송 시 인코딩을 하면 다량의 액세스를 효율 좋게 처리할 수 있다.
- 인코딩 처리를 해야하기 때문에 CPU등의 리소스를 많이 소비함.
- 메시지 : HTTP 통신의 기본 단위로, 옥텟 시퀀스로 구성되며 통신을 통해 전송된다.
- 엔티티 : 리퀘스트랑 리스폰스의 페이로드로 전송되는 정보로 엔티티 헤더 필드와 엔티티 바디로 구성된다.
- 기본적으로 메시지 바디와 엔티티 바디는 같지만 전송 코딩이 적용된 경우 엔티티 바디의 내용은 변화하므로 메시지 바디와 달라진다.
콘텐츠 코딩
- 엔티티에 적용하는 인코딩
- 엔티티 정보를 유지한 채로 압축한다.
- 콘텐츠 코디된 엔티티는 수신한 클라이언트 측에서 디코딩한다.
청크 전송 코딩
- 엔티티 바디를 청크(덩어리)로 분해한다.
- 청크 사이즈를 16진수로 사용해서 단락을 표시하고 엔티티 바디 끝에 "0(CR+LF)"를 기록한다.
- 청크 전송 코딩된 엔티티 바디는 수신한 클라이언트 측에서 디코딩한다.
- 이런식으로 사이즈가 큰 데이터를 전송 시 엔티티 바디를 분할하여 전송.
여러 데이터를 보내는 멀티파트
- MIME : 이미지 등의 바이너리 데이터를 아스키 문자열에 인코딩하는 방법과 데이터 종류를 나타내는 법 등을 규정.
- 멀티 파트 : 여러 다른 종류의 데이터를 수용하는 방법
- HTTP도 멀티파트에 대응하고 있어 하나의 메시지 바디 내부에 엔티티를 여러개 포함하여 보낼 수 있다. 주로 이미지나 텍스트 파일 등을 업로드 할 때 사용.
- multipart/form-data : Web 폼으로부터 파일 업로드에 사용
- multipart/byteranges : 상태코드 206 리스폰스 메시지가 복수 범위의 내용을 포함할 때 사용
- HTTP 메시지로 멀티파트를 사용할 때는 Content-type 헤더 필드를 사용한다.
- 멀티파트 각각의 엔티티를 구분하기 위해 boundary 문자열 사용
- 파트마다 헤더 필드 포함.
일부분만 받는 레인지 리퀘스트
- resume (리줌) : 대용량 이미지와 데이터를 다운로드 시 커넥션이 끊어졌을 때의 문제 해결하기 위해 이전 다운로드 한 곳에서부터 다운로드를 재개할 수 있는 기능.
- 엔티티의 범위를 지정해서 다운로드. 범위를 지정하여 리퀘스트.
- Range 헤더 필드를 사용해 리소스 바이트 레인지를 지정.
- ex)5001~10000byte
Range: bytes = 5001-10000
- 레인지 리퀘스트에 대한 리스폰스는 상태코드 206 Partial Content라는 리스폰스 메시지가 되돌아온다.
- 서버가 레인지 리퀘스트에 지원하지 않는 경우 상태코드 200OK라는 리스폰스 메시지로 완전한 엔티티가 돌아온다.
최적의 콘텐츠를 돌려주는 콘텐츠 네고시에이션
- 네고시에이션 : 같은 내용이지만 여러 개의 페이지를 지닌 웹 페이지의 경우, 최적의 콘텐츠를 표시하는 구조. ex : 영어,한국어 중 브라우저의 언어에 맞는 페이지를 표시.
- 콘텐츠 네고시에이션 : 클라이언트와 서버가 제공하는 리소스의 내용에 대해 교섭하는 것. 클라이언트에 더욱 적합한 리소스를 제공하기 위한 구조.
- 언어와 문자 세트, 인코딩 방식 등을 기준으로 판단.
- 판단 기준은 리퀘스트 메시지에 포함된 리퀘스트 헤더 필드.
- 서버 구동형 네고시에이션 : 서버 측에서 콘텐츠 네고시에이션을 함. 서버 측에서 리퀘스트 헤더 필드의 정보를 참고해 자동적으로 처리
- 에이전트 구동형 네고시에이션 : 클라이언트 측에서 콘텐츠 네고시에이션. 브라우저에 표시된 선택지 중에서 유저가 수동으로 선택. JS 사용해 웹페이지에서 자동적으로 정하기도 함. ex) 스마트폰용 웹페이지 자동 전환
- 트랜스페어런트 네고시에이션 : 서버구동형과 에이전트 구동형을 혼합.
'CS > Network' 카테고리의 다른 글
4장 ) 결과를 전달하는 HTTP 상태코드 (0) | 2021.09.30 |
---|---|
4장 ) 데이터링크 계층 (0) | 2021.09.30 |
3장 ) 물리계층 (0) | 2021.09.22 |
2장 ) 간단한 프로토콜 HTTP (0) | 2021.09.18 |
2장 ) 네트워크 기본 규칙 (0) | 2021.09.18 |