HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 이때 메시지 타입은 두 가지 Request와 Response가 있다
Request는 클라이언트가 서버로 전달하는 메시지이고 Response는 이러한 Request에 대한 서버의 답변이다
HTTP 메시지는 ASCII 즉, 숫자 0, 1로 인코딩된 텍스트 정보이며 이러한 메시지는 설정파일 (프록시, 서버), API(브라우저 경우) 혹은 다른 기타의 인터페이스에 의해 가공되어 제공한다
출처 : https://deepwelloper.tistory.com/98
HTTP Request 구조
Start Line
Start Line에는 HTTP 메소드, Request target, HTTP version이 있다
HTTP Method - 요청시 보내는 HTTP 메소드 형태이며 요청의 의도를 담고 있는 GET, POST, PUT, DELETE 등이 있다. GET은 존재하는 자원에 대한 요청, POST는 새로운 자원을 생성, PUT은 존재하는 자원에 대한 변경, DELETE는 존재하는 자원에 대한 삭제와 같은 기능을 가지고 있다
Request Target - 어디에 보내는지에 대한 URI / HTTP Reques가 전송되는 목표 주소
HTTP version - version에 따라 Request 메시지 구조나 데이터가 다를 수 있어서 version을 명시
Header
Header에는 HTTP Request 그 자체에 대한 정보를 담고있다. key : value 형태로 이주어져 있다
Host : 요청하려는 서버 호스트 이름과 포트번호 (URL)
User-agent : 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다 (클라이언트 정보)
Referer : 바로 직전에 머물렀던 웹 링크 주소
Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열 (서버에서 해당 타입에 데이터를 보내달라고 요청)
If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.
Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header
Origin : 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.
Cookie : 쿠키 값이 key-value로 표현된다.
Body
HTTP Request 가 전송하는 데이터를 담고있다. 전송하는 데이터가 없으면 Body 부분은 비어있다
보통 POST 요청일 경우, HTML 폼 데이터가 포함되어있다
정리
- 요청 라인 : GET / HTTP/1.1
- 요청 메소드 : GET, POST, PUT, DELETE
- 요청 URL
- HTTP 버전
- 요청 헤더 : 키-값 방식으로 들어감
- 요청 바디(엔티티)
HTTP Response
HTTP Request가 요청한 요청의 Response의 구조
비슷하지만 담겨오는 정보가 약가 다르다
Start Line
Response의 Start Line에는 HTTP version, Status Code, Status Text가 있다
Status Code - Response 상태를 나타내는 코드. 요청 정상 처리를 나타내는 200이나 페이지가 이동되거나 없어졌을 때를 나타내는 404와 같은 코드로 응답한다
Status Text - Response 상태를 간략하게 글로 설명해 준다
Header
- Date - 응답 온 시간과 날짜이다
- Content-Type - 응답 데이터의 타입
- Cache-Control - 캐시용 헤더
Body
요청에 대한 응답 값
HTTP Request Body와 동일하며 전송하는 데이터가 없으면 비어있다
Status Code +
- 1xx : 정보
- 2xx : 성공
- 200 : OK. 요청 성공
- 201 : Created. 생성 요청 성공
- 202 : Accepted. 요청 수락(처리 보장X)
- 204 : 성공했으나 돌려줄게 없음
- 3xx : 리다이렉션
- 300 : Multiple choices. 여러 리소스에 대한 요청 결과 목록
- 301,302,303 : Redirect. 리소스 위치가 변경된 상태
- 304 : Not Modified. 리소스가 수정되지 않았음
- 4xx : 클라이언트 오류
- 400 : Bad Request. 요청 오류
- 401 : Unauthorized. 권한없음
- 403 : Forbidden. 요청 거부
- 404 : Not Found. 리소스가 없는 상태
- 5xx : 서버 오류
- 500 : Internal Server Error. 서버가 요청을 처리 못함
- 501 : Not Implemented. 서버가 지원하지 않는 요청
- 503 : Service Unavailable. 과부하 등으로 당장 서비스가 불가능한 상태
정리
- 응답 라인
- 버전
- 상태 코드
- 상태 메세지 : HTTP/1.1 200 OK
- 응답 헤더
- Content-Type : 바디 데이터의 타입
- Content-Length : 바디 데이터 크기
- Set-Cookie : 쿠키 설정
- ETag : 엔티티 태그
- 응답 바디 : HTML, JSON, Octet Stream 등이 있다.
출처 : 아래의 사이트들을 보면서 큰 공부 하였습니다
https://ohcodingdiary.tistory.com/5
https://programmer93.tistory.com/60
'Front-End > Web & 표준 & ETC' 카테고리의 다른 글
모듈과 번들러 (Module Bundler) 넌 누구니?! (0) | 2022.07.05 |
---|---|
[Web] SSR (서버사이드 렌더링) vs CSR (클라이언트 사이드 렌더링) (0) | 2022.03.15 |
[ETC] 웹 이미지 (0) | 2022.02.26 |
[Network] 웹 표준과 크로스 브라우징 (0) | 2022.02.26 |
[Network] TCP vs UDP (0) | 2022.02.26 |