[네트워크] HTTP 정리

쫀구·2022년 7월 13일
0
post-custom-banner

📝 HTTP ( HyperText Transfer Protocol )

HTML과 같은 문서를 전송하기 위한 프로토콜이고, HTTP는 웹 브라우저와 웹 서버의 소통을 위해 디자인되었다. 클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 보내는 클라이언트 서버 구조로 이루어져 있다. 클라이언트가 HTTP Messages 양식에 맞춰 요청을 보내면, 서버도 HTTP Messages 양식에 맞춰 응답한다.

특징

🔹 HTTP에서는 서버가 클라이언트의 상태를 보존하지 않는 무상태(Stateless) 프로토콜이다.

  • 상태유지의경우 클라이언트가 서버1 에게 요청시 해당 서버만 요청을 기억하기에 응답도 서버1만 가능하다. 만약 서버1에서 장애가 발생할경우 정보가 날라가 버려서 다시 서버에 요청해야한다.

  • 무상태 프로토콜인 경우는 클라이언트가 요청을 할때 필요한 데이터를 다 담아서 보내고, 따로 기억을 하지않는다. 서버1 에게 요청시 장애가 발생해도 다른 서버에서 응답이 가능하여 재요청 필요가 없다.

무상태의 단점
로그인이 필요 없는 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만,
로그인이 필요한 서비스라면 유저의 상태를 유지해야 되기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지 해야한다.


🔹 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊는 비연결성이다.

TCP/IP의 경우 기본적으로 연결을 유지하는데, 요청을 보내지 않아도 연결을 유지하기에 서버 자원이 계속 소모가 된다.

비연결성 단점
웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 수많은 자원이 함께 다운로드 되는데, 해당 자원들을 각각 보낼 때마다 연결 끊고 다시 연결하고를 반복하는 비효율적인 일을 한다.

현재는 지속연결로 문제를 해결한다.

✉️ HTTP Messages

클라이언트와 서버 사이에서 데이터가 교환되는 방식 이고 요청(Requests) 응답(Responses) 이 있다.
개발자가 직접 메세지를 작성하지 않고, 구성 파일, API, 기타 인터페이스에서 HTTP Messages를 자동으로 완성한다.

메세지 구조

  • start line 에는 요청이나 응답의 상태를 나타낸다. 항상 첫 번째 줄에 위치하며, 응답에서는 status line이라고 부른다.

  • HTTP headers 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합이다.

  • empty line 헤더와 본문을 구분하는 빈 줄이 있다.

  • body 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용

이 중 start line과 HTTP headers를 묶어 요청이나 응답의 헤드(head)라고 하고, 본문 데이터를 실어서 나르는것을 페이로드 Payload 라한다.

요청 (Requests) 의 헤더

From: 유저 에이전트의 이메일 정보
Referer: 이전 웹 페이지 주소
User-Agent: 유저 에이전트 애플리케이션 정보
Host: 요청한 호스트 정보(도메인)
Origin: 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냄
Authorization: 인증 토큰(e.g. JWT)을 서버로 보낼 때 사용하는 헤더

응답 (Responses) 의 헤더

Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
Date: 메시지가 발생한 날짜와 시간
Location: 페이지 리디렉션
Allow: 허용 가능한 HTTP 메서드
Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

콘텐츠 협상 헤더

언어 사용방법 같은경우

Accept-Language: ko;q=1,us;q=0.9,ja;q=0.8 로 표현할 수 있고, 맨앞 q=1은 생략 가능하다.
한국어 를 우선순위를 요청하고, 한국어를 지원하지 않는 사이트도 있기 때문에 다른 언어도 지정하도록 한다.


🎈 HTTP 메서드

Get : 조회
Post : 생성
put : 전체 데이터 수정 & 업데이트
patch : 부분 데이터 수정 & 업데이트
delete : 삭제

CRUD 로 나누면 C : Post, R : Get, U : Put & Patch, D : Delete

profile
Run Start 🔥
post-custom-banner

0개의 댓글