본문 바로가기
웹 개발 (Frontend Developer)/네트워크

기본 HTTP에 대해 알아보기

by Jackykim 2024. 9. 26.

<HTTP란>

HTTP는 (HyperText Transfer Protocol) HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜(약속)입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버 프로토콜이란 (보통 웹브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미합니다.

 

<HTTP 특징 - 비연결성>

비연결성 (Connectionless) : 연결을 유지하지 않는 모델입니다. 비연결성은 클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊어버리는 특징입니다. 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우,  비연결성의 특징은 효율적으로 작동합니다. 단 트래픽은 많고 서비스가 큰 경우 한계가 있습니다.

 

비연결성의 한계 :

- TCP/IP 연결을 새로 맺어야 하여 (3 way handshake) 시간 추가됩니다.

- 사이트를 요청하면 HTTP, JS, CSS, 추가 이미지 등 수많은 자원이 함께 다운로드됩니다. 해당 자원들은 각각 보낼 때마다 연결 끊고 다시 연결 반복하여 비효율적으로 HTTP 지속 연결 (persistent connections)로 문제 해결할 수 있습니다.

 

< HTTP 특징 - 무상태 프로토콜>

무상태 (Stateless) : HTTP에서는 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜입니다. 서버가 클라이언트의 상태를 저장하지 않으므로, 클라이언트의 각 요청에는 요청을 처리하는 데 필요한 모든 정보가 포함되어야 합니다.

 

장점 : 서버 확장성 높음 -> 응답 서버를 쉽게 바꿀 수가 있기 때문에 무한한 서버 증설이 가능합니다

단점 : 클라이언트 추가 테이터 전송 -> 로그인이 필요한 서비스라면 유저의 상태를 유지해야 되기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 합니다. 

 

<HTTP 메서드 (Method)>

HTTP 메서드는 수행할 작업의 종류를 나타내기 위해 서버에 보내는 메시지입니다.
이러한 방법을 사용하면 브라우저와 서버 간의 더 풍부한 통신이 가능합니다.

GET 어떠한 데이터를 서버로부터 받아 (GET)올 때 사용하는 Method 입니다. 
*오직 데이터를 받기만 합니다
POST 일반적으로 무언가를 생성하기 위해 서버에 데이터 블록을 수락하도록 요청합니다. 
PUT 데이터를 업데이트할 때 사용합니다. 
DELETE 데이터를 서버에서 삭제할 때 사용합니다.
PATCH 리소스의 부분만을 수정하는 데 쓰입니다. 

* PUT와 PATCH는 둘 다 어떠한 데이터를 수정하기 위해서 사용됩니다.
** 차이점 :
PUT : 데이터 전체 교체, 데이터 교체 시 모든 필드 필요 
PATCH : 데이터의 부분 교체, 데이터 교체 시 일부 필드 필요

 

<HTTP 응답 상태코드 (Status Code)>

HTTP 상태 코드는 브라우저 요청에 따라 서버에서 반환되는 코드입니다. 오류 상태 코드는 또한 찾을 수 없음, 액세스 할 수 없음 또는 이동됨과 같은 오류 유형을 지정합니다.

 

100 ~ 199 정보 코드 : 요청에 대한 정보 메시지를 반환하는 상태 코드입니다. 

200 ~ 299 성공 코드 : 성공적인 요청을 나타내는 상태 코드입니다. 

  • 200 : OK 성공적인 HTTP 요청에 대한 표준 응답입니다
  • 201 : Created 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다
  • 204 : No Content 반환된 콘텐츠 없이 요청이 성공했습니다

300 ~ 399 리다이렉션 코드 : 리디렉션과 관련된 알림인 상태 코드입니다.

  • 301 : Moved Permanently 이 응답 코드는 요청한 리소스의 URI가 변경되었음을 의미합니다. 새로운 URI가 응답에서 아마도 주어질 수 있습니다

400 ~ 499 리다이렉션 코드 : 클라이언트로 인해 발생한 오류를 나타내는 상태 코드입니다

  • 400 : Bad Request 이 응답은 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미합니다
  • 401 : Unauthorized 요청은 유효하지만 서버가 응답하지 않습니다. 일반적으로 실패한 인증에 사용됩니다
  • 403 : Forbidden 클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다. 예를 들어 그들은 미승인이어서 서버는 거절을 위한 적절한 응답을 보냅니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있습니다
  • 404 : Not Found 요청한 페이지를 서버에서 찾을 수 없습니다
  • 409 : Conflict 이 응답은 요청이 현재 서버의 상태와 충돌될 때 보냅니다

500 ~ 599 리다이렉션 코드 : 서버에서 오류가 발생했음을 나타내는 상태 코드입니다.

  • 500 : Internal Server Error 특정 오류 메시지를 사용할 수 없을 때 표시되는 일반 오류 메시지
  • 503 : Service Unavailable 서버가 요청을 처리할 준비가 되지 않았습니다. 일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸렸을 때입니다

<HTTP 요청 헤더>

Host : 요청한 호스트 정보(도메인)

- 하나의 서버가 여러 도메인을 처리해야 할 때 호스트 정보를 명시하기 위해 사용

 

Origin : 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냅니다

- 여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 발생합니다

- 응답 헤더의 Access-Control-Allow-Origin와 관련

 

Authorization : 인증 토큰(e.g. JWT)을 서버로 보낼 때 사용하는 헤더

 

<HTTP 응답 헤더>

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

 

참고 자료 :

https://github.com/baeharam/Must-Know-About-Frontend/blob/main/Notes/network/http.md

 

Must-Know-About-Frontend/Notes/network/http.md at main · baeharam/Must-Know-About-Frontend

:mortar_board: 취준생이라면 알면 좋을 프론트엔드 관련 지식들. Contribute to baeharam/Must-Know-About-Frontend development by creating an account on GitHub.

github.com

 

'웹 개발 (Frontend Developer) > 네트워크' 카테고리의 다른 글

URL & URI & URN  (1) 2024.09.29
REST API  (5) 2024.09.27
HTTP 버전별 차이점  (5) 2024.09.26
HTTPS는?  (3) 2024.09.26
TCP & UDP  (0) 2024.09.25