HTTP 메시지 구조

시작 라인

- 요청 : HTTP메서드, 요청 대상, HTTP버전

- 응답 : HTTP버전, HTTP 응답 코드(200 성공, 400 클라이언트 요청 오류, 500 서버 오류), 이유 문구

 

헤더

- HTTP 메시지 전송을 위해 필요한 부가정보들

- 압축, 인증, 쿠키, 클라이언트의 정보, 캐시 관리, 메시지 바디의 길이/형식 등등

 

바디

- 실제로 전송할 데이터

- Byte로 표현할 수 있는 모든 데이터를 전송할 수 있음 (HTML, 이미지, 영상, JSON, XML, TEXT)

 


 

HTTP메서드

- GET : 리소스를 조회,? 와&를 활용한 쿼리 파라미터로 서버에 데이터를 보냄(/search? q=hello&lc=ko), HTTP메시지 바디를 사용하지 않음 

- POST : 요청 데이터를 처리(주로 등록), HTTP메시지 바디를 사용하여 서버에 데이터를 보냄, HTMP Form처리, 게시글/댓글 작성, 리소스 생성(상품등록), 다른 HTTP메서드로 처리하기 애매한 경우 POST로 처리함

- PUT : 특정 리소스가 있으면 덮어쓰고, 없으면 새로 생성함, 특정 리소스에 대해 작동하므로 클라이언트가 리소스를 식별해줘야 함

- PATCH : 특정 리소스 부분 변경

- DELETE : 특정 리소스 삭제

 

클라이언트 → 서버 데이터 전달 방법

1. 쿼리 파라미터 : GET (검색, 정렬 등)

2. 메시지 바디에 넣어서 : POST, PUT, PATCH (상품 등록/주문, 리소스 등록/변경, 회원 가입)

 

1) 정적 데이터를 조회 : 텍스트, 이미지

2) 동적 데이터 조회 : 게시글, 검색, 쿼리 파라미터 사용

3) HTML Form 전송 : POST로 전송, 메시지 파디에 쿼리 파라미터가 들어감(GET의 쿼리 파라미터와 형식 동일함 = Content-Type: application/x-www-form-urlencoded), 회원가입, 주문

4) HTTP API :  메시지 바디 활용, 서버 to서버 통신, Ajax, 주로 JSON을 많이 사용(Content-Type: application/json)

 


 

HTTP 상태 코드

1xx : 처리 중

2xx : 정상 처리

200 요청 성공 (특정 데이터 조회 성공) GET
201 새로운 리소스 생성 완료 POST, Location헤더로 위치 알려줌
202 요청 접수했으나, 미처리 중, 배치처리
204 요청은 성공, 응답 페이로드 본문에 보낼 데이터 없음, 문서 저장버튼

3xx : 리다이렉션, 응답 메시지의 헤더에 Location이 있으며 Location에 지정된 위치로 이동함

ex )

HTTP/1.1 301 Moved Permanently

Location : /new-page

=> /new-page를 서버에 GET 요청하여 이동함

300 Multiple Choices, 안씀
301 Moved Permanently, 영구적으로 이동, redirect시 GET요청
302 Found, 일시적으로 이동, redirect시 GET요청, 많이 사용
303 See Other, 일시적으로 이동, redirect시 GET요청
304 Not Modified, 캐시, 리소스가 수정되지 않았음을 클라이언트에 알려줌 => 클라이언트는 캐시로 리다이렉트
307 Temporary Redirect, 일시적으로 이동, redirect시 HTTP메서드 본문 유지
308 Permanent Redirect, 영구적으로 이동, redirect시 HTTP메서드 본문 유지

PRG : POST > REDIRECT > GET

- 상품 등록(POST) 후, 새로고침해서 또 POST를 날리면 중복 등록이 될 수 있음

- PRG : 상품 주문 후, 주문 상세 화면으로 Redirect 시킨 후, GET 요청 

 

4xx : 클라이언트 요청 오류

400 Bad Request, 요청 구문 오류, 잘못된 API요청
401 Unauthorized, 인증X, WWW-Authenticate헤더로 인증방법 설명
403 Forbidden, 접근 권한 없음
404 Not Found, 요청한 리소스가 서버에 없음, 클라이언트에 숨길 리소스

5xx : 서버 내부 오류

500 Internal Server Error, 대부분 이거 사용
503 Service Unavailable, 일시적인 사용 불가

 


 

HTTP 헤더

- HTTP 메시지 전송을 위해 필요한 부가정보들

- 압축, 인증, 쿠키, 클라이언트의 정보, 캐시 관리, 메시지 바디의 길이/형식 등등

표현 Content-Type 표현 데이터(메시지 바디) 형식, 미디어 타입, 문자 인코딩 text/html; charset=utf-8,
application/json,
image/png
Content-Encoding 표현 데이터 압축 방식,
주는 쪽은 압축 후 헤더 추가
→ 받는 쪽은 인코딩 헤더 정보로 압축 해제
gzip, deflate, identity
Content-Language 표현 데이터 언어 ko, en, en-US
Content-Length 표현 데이터 길이, Byte단위 Content-Length: 123
협상
(요청만)
Accept 클라이언트가 선호하는 미디어 타입 전달, 
구체적인게 우선순위 높음
text/*, text/plain, */*
Accept-Charset 클라이언트가 선호하는 문자 인코딩  
Accept-Encoding 클라이언트가 선호하는 압축 인코딩  
Accept-Language 클라이언트가 선호하는 자연 언어
q는 우선순위(0~1, 클수록 높음)
ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
전송
방식
Content-Length 단순 전송, 전달하는  HTTP 메시지 바디 데이터의 길이 Content-Length: 123
Contect-Encoding 압축 전송 Content-Encoding: gzip
Transfer-Encoding 분할 전송 Transfer-Encoding: chunked
Content-Range 범위 전송 Content-Range: bytes 1001~2000 / 2000
일반
정보
From 유저 에이전트의 이메일  
Referer 이전 웹 페이지 주소, 유입 경로 분석 가능, 요청만  
User-Agent 유저 에이전트 애플리케이션 정보, 요청만 user-agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54
Server 요청을 처리하는 서버의 SW정보, 응답만 Server: nginx
Date 메시지 생성일, 응답만  
특수
정보
Host 요청을 한 도메인 정보, 한 서버에 여러 도메인 Host: www.naver.com
Location 리다이렉션  
Allow 허용하는 HTTP 메서드  
Retry-After 사용자가 다음 요청까지의 대기해야하는 시간  
인증 Authorization 클라이언트의 인정 정보를 서버에 전달함  
WWW-Authentication 리소스 접근시 필요한 인증 방법  
쿠키 Cookie 클라이언트가 쿠키저장소에서 쿠키를 서버에 전달 Cookie: userid=ABC
Set-Cookie 서버가 클라이언트에게 쿠키 전달
expired : 쿠키 만료일
max-age : 쿠키 유효 시간 (초)
Set-Cookie: userid=ABC

 

 

'WEB > http' 카테고리의 다른 글

[HTTP] 퍼센트 인코딩/URLEncoder  (0) 2021.07.01