[네트워크] HTTP란?
HTTP
HTTP란?
HyperText Transfer Protocol의 약자로, HyperText 문서(HTML)의 리소스들을 가져오거나 보낼 때 사용하는 통신규약
TCP / IP 위에서 이루어짐
HTTP는 요청 & 응답 구조로 이루어져있다
Client가 Request & Server가 Response
HTTP의 특성
✅ Stateless하다!
각각의 요청(Request)와 응답(Response)는 독립적인 행위이다.
Ex) 클라이언트가 요청을 보낸 후 응답을 받고, 얼마 후에 또 다른 요청을 보낼 때 클라이언트와 서버는 둘 다 이전에 보냈던 요청 / 응답에 대해 기억하지 못한다.
Stateless하기 때문에 다수의 Request가 서버로 들어와도 부하를 줄일 수 있다. (연결 정보를 저장할 필요가 없기 때문)
그러면 어떻게?
- 쿠키, 세션, 캐시 등을 사용해 유지될 필요가 있는 데이터들을 저장하고 관리한다
- Ex) 로그인 된 상태를 점검, 방문 기록 등
Request
1. Start Line
Http Method
- GET / POST / PUT / DELETE / OPTIONS 등 Request의 액션을 정의
Request Target
- HTTP 요청이 전송되는 목표 주소
- HTTP 메서드에 따라서 Request Target 포맷이 달라짐
- 보통 /login 등의 path 정보들, Host domain은 Header에 담음
- HTTP 요청이 전송되는 목표 주소
Http Version
- Http의 버전 정보를 담음
ex) POST / HTTP 1.1
2. Header
Key : value 쌍으로 이루어짐
- Host : 요청이 전송되는 target의 호스트 URL 주소
- User-Agent : 요청을 보내는 클라이언트의 정보
- 웹 브라우저의 정보 등
- Accept : 해당 요청이 받을 수 있는 데이터 타입
- Ex) 내 요청에 대한 응답을 json 형태로 줘!
- Connection : 해당 요청이 끝난 후 클라이언트와 서버의 지속적인 네트워크 커넥션을 유지 여부
keep-alive
orclose
- Content-Type : Request가 보내는 메시지의 body타입
- POST / PUT 등에서 보내는 타입. Ex) application/json
- Content-Length : 메시지 body의 길이
HOST와 request Target의 차이?
HOST: 요청을 보내는 도메인. Ex) naver.com
Request Target: 상세 Path Ex) /login, /main
Host + Request Target 이 완벽한 주소가 되는 것!
3. Body
- Request가 보내는 메시지 혹은 내용
- 일반적인 GET method는 Body가 존재하지 않는다. -> 단지 요청을 하는 것이기 때문!
Response
1. Status Line
Status Code: 응답 상태를 나타내는 코드
200: OK - 요청 성공
400: Bad Request - 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 나타낸다
401: Unauthorized - 클라이언트가 응답을 받기 위한 인증을 거치지 않은 경우
403: Forbidden - 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않음
- 401 vs 403 : 403은 클라이언트가 누구인지 알고 있음 -
- 401 : 너 누구니?
- 403 : 넌 안돼~
- 401 vs 403 : 403은 클라이언트가 누구인지 알고 있음 -
404: Not Found - 서버가 요청 받은 리소스를 찾을 수 없는 경우
500: Internal Server Errror - 서버가 처리 방법을 모르는 상황이 발생 (보통 코드가 잘못된 경우)
502: Bad Gateway - 서버가 게이트웨이나 프록시 서버 역할을 하면서 업스트림 서버로부터 유효하지 않은 응답을 받았을 때
Gateway?
서로 다른 프로토콜을 연결해주는 장치
컴퓨터가 현 네트워크에서 다른 네트워크로 이동하기 위해 거쳐야 하는 거점
두 컴퓨터가 네트워크 상에서 서로 연결되기 위해선 동일한 통신 프로토콜을 사용해야 하는데, 다른 네트워크 상에 존재하는 서로 다른 프로토콜을 적절히 변환해주는 역할을 함
라우터와 유사한 역할이지만, 라우터보다 조금 더 포괄적인 개념
Status Text: 응답 상태를 간략하게 설명해주는 부분
- 200 : OK 에서 200 = Status Code, OK = Status text
HTTP 버전
2. Header
- Request에서 사용되는 헤더와 동일하지만, User-Agent 대신 Server 헤더가 사용됨
3. Body
- Request의 Body와 일반적으로 동일함
- 보내줄 데이터가 없을 때는 역시 Body가 비어있을수도 있음