(인프런) 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 공부하고 리뷰한 글입니다.
5. HTTP 메시지(중요!)
1. 모든 것이 HTTP (복습)
HTTP 메시지에 모든 것을 전송
1) 거의 모든 형태의 데이터 전송 가능
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML(API)
2) 서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용
2. HTTP 요청 메시지와 HTTP 응답 메시지
보는 것과 같이, HTTP 요청 메시지와 HTTP 응답 메시지는 형태가 조금 다르다.
3. HTTP 메시지(HTTP 요청 메시지와 HTTP 응답 메시지)의 구조
3-1. HTTP 메시지 구조
1) start-line: 시작 라인
2) header: 헤더
3) empty line: 공백 라인 - 무조건 있어야 함
4) message body
HTTP 요청 메시지와 HTTP 응답 메시지는 start-line 부분만 차이가 있다.
요청은 request-line, 응답은 status-line
3-2. HTTP 요청 메시지 구조
1) start-line - http 메서드/path/query string/http 버전
2) header - 호스트(도메인명)
3) empty line
4) message body - 전송할 데이터가 없으면, 공백으로
HTTP 요청 메시지도 body 본문을 가질 수 있다!
3-3. HTTP 응답 메시지 구조
1) start-line - http 버전/
2) header -
3) empty line -
4) message body - html
4. 시작 라인(start-line) - 요청 메시지
start-line = request-line / status-line
request-line = method request-target HTTP-version CRLF(엔터)
- method: HTTP 메서드
- request-target: 요청 대상
- HTTP-version: HTTP 버전
1) 요청 메시지 - HTTP 메서드
서버가 수행해야 할 동작을 지정한다.
종류: GET, POST, PUT, DELETE...
- GET: 리소스 조회
- POST: 요청 내역 처리
2) 요청 메시지 - 요청 대상
absoulte-path[?query] (절대경로[?쿼리])
- 절대 경로 = "/" 로 시작하는 경로
(참고) *, http://...?x=y 와 같이 다른 유형의 경로지정 방법도 있음
3) 요청 메시지 - HTTP 버전
5. 시작 라인(start-line) - 응답 메시지
start-line = request-line / status-line
status-line = HTTP-version status-code reason-phrase CRLF(엔터)
1) HTTP-version(HTTP 버전)
2) status-code(HTTP 상태 코드) 중요!!
요청 성공/실패
- 200: 성공
- 400: 클라이언트 요청 오류
- 500: 서버 내부 오류
3) reason-phrase(이유 문구)
사람이 이해할 수 있는 짧은 상태 코드 설명글
6. HTTP 헤더
header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
- field-name은 대소문자 구분X, field-value는 대소문자 구분O
<용도>
HTTP 전송에 필요한 모든 부가정보
e.g. 메시지 바디 내용, 메시지 바디 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보...
- 표준 헤더가 너무 많음
- 필요시 임의의 헤더 추가 가능
7. HTTP 메시지 바디
<용도>
실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
<HTTP 정리>
- HTTP 메시지에 모든 것을 전송
- HTTP 역사: HTTP/1.1을 기준으로 학습(HTTP/2,3은 성능 최적화 부분)
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless)
- HTTP 메시지
- 단순함, 확장 가능
→ 지금은 HTTP 시대
3-5. HTTP 메시지
Q. field value는 대소문자를 구분한다고 했는데 실제로 브라우저에 URL을 GOOGLE.com 으로 입력해도 google.com 이 열리는 이유는?
A. field value는 대소문자를 구분하는 것이 맞다. 하지만 위 경우는 브라우저가 자동으로 소문자로 처리하여 google.com 으로 열리는 것이다.
[출처] https://www.inflearn.com/questions/120002
'Spring > 모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 04. HTTP 메서드 - GET, POST (0) | 2022.05.29 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 04. HTTP 메서드 - HTTP API를 만들어보자 (0) | 2022.05.27 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - 비 연결성(connectionless) (0) | 2022.05.27 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - Stateful, Stateless (2) | 2022.05.27 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 03. HTTP 기본 - 모든 것이 HTTP, 클라이언트 서버 구조 (0) | 2022.05.26 |