HTTP 프로토콜 이해

리선맨·2023년 10월 17일

Web

목록 보기
1/3

HTTP(Hypertext Transfer Protocol)란?

  • HTTP는 서버와 클라이언트가 인터넷상에서 데이터를 주고 받기 위한 프로토콜이다.
  • 일반적으로 전송 계층 프로토콜로 TCP, 네트워크 계층 프로토콜로 IP를 사용한다.
  • HTTP는 기본적으로 80번 포트를 사용한다.

HTTP 작동방식

이미지 출처 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview

  • HTTP는 서버/클라이언트 모델을 따른다.
    클라이언트가 서버에게 요청(request)을 보내면 서버는 클라이언트에게 응답(response)을 보낸 후 클라이언트와 연결을 끊는다.
  • 위와 같은 작동방식의 특징 갖고 있어 HTTP는 무상태 프로토콜이라고 불린다.

이러한 작동방식으로 HTTP의 장단점은 이렇게 정리할 수 있다.

장점

  • 불특정 다수를 대상으로 하는 서비스에 적합
  • 클라이언트와 서버가 지속적으로 연결되어 소통하는 방식이 아니기에 정해진 최대 연결수보다 훨씬 많은 요청과 응답을 처리할 수 있다.

단점

  • 응답(response) 후 연결을 끊어버리기 때문에, 클라이언트의 이전상황을 알 수 없다.
    다시말해 클라이언트가 바로 다음 요청을 한다해도 서버는 이 클라이언트가 방금 전 요청을 했던 클라이언트와 동일한지 알 수 없다는 것이다.

위와 같은 무상태(Stateless) 특징때문에 정보를 유지하기 위한 목적으로 Cookie, Web storage와 같은 기술이 등장하였다.

HTTP 메시지

이미지 출처 : https://www.boostcourse.org/web316/lecture/16661?isDesc=false

1. 요청 데이터 포맷 (request messages)

  • 요청헤더, 한줄공백, 요청바디로 이루어져 있다.

* 요청헤더

GET /servlet/query?a=10&b=90 HTTP/1.1
/** 
* GET : 요청 메서드
* /servlet/query?a=10&b=90 : 요청 URL
* HTTP/1.1 : HTTP 프로토콜 버전
**/
Host : www.sk.com 
User-agent: mozilla/4.0
Accept-language: kr

#요청 메서드
= 요청 메서드는 송수신 방법을 뜻한다.

*주요 메서드

  • GET : 리소스 조회
  • POST : 요청 데이터 처리, 주로 데이터 등록에 사용
  • PUT : 리소스를 대체, 해당 리소스가 없으면 생성
  • DELETE : 리소스 삭제
  • PATCH : 리소스 일부 변경

*기타 메서드

  • HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
  • OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용)
  • CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

#요청 URL
= 요청 타겟을 나타내며, 이들은 요청 컨텍스트에 의해 특정 지어진다.

#HTTP 프로토콜 버전
= 웹 브라우저가 사용하는 HTTP 프로토콜 버전을 의미한다.

두번째 줄 부터는 여러 줄의 헤더 정보가 키-벨류 쌍으로 이루어져 있다.

* 한줄공백

  • 요청헤더가 끝난 후 한줄공백 이후에 요청바디가 등장한다.

* 요청바디

  • 요청바디는 POST, PUT메서드를 사용하였을때만 존재.

2. 응답 데이터 포맷 (response messages)

  • 응답헤더, 한줄공백, 응답바디로 이루어져 있다.

* 응답헤더

HTTP/1.1 200 ok
/** 
* HTTP/1.1 : 응답 HTTP 프로토콜 버전
* 200 : 응답 코드
* ok : 응답 메시지
**/
Date : Thu, 03 jul 2003 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Sun, 5 May 2003 09:23:24 GMT
Content-Length: 6821
Content-Type: text/html

<html>
  ........
</html>

#상태 코드
= HTTP 요청이 성공적으로 이루어졌는지를 의미한다.

*주요 상태 코드

2xx
- 요청 정상 처리

  • 200 OK : 요청 성공
  • 201 Created : 요청 성공해서 새로운 리소스가 생성됨
  • 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
  • 204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

3xx
-요청을 완료하려면 추가 행동이 필요 (리다이렉션)

  • 301 Moved Permanently : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
  • 302 Found : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
  • 303 See Other : 리다이렉트시 요청 메서드가 GET으로 변경
  • 304 Not Modified : 캐시를 목적으로 사용
  • 307 Temporary Redirect : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
  • 308 Permanent Redirect : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)

4xx
-클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음

  • 400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
  • 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
  • 403 Forbidden : 서버가 요청을 이해했지만 승인을 거부함
  • 404 Not Found : 요청 리소스를 찾을 수 없음

5xx
-서버 오류, 서버가 정상 요청을 처리하지 못함

  • 500 Internal Server Error : 서버 문제로 오류 발생, 애매하면 500 오류
  • 503 Service Unavailable : 서비스 이용 불가

두번째 줄 부터는 여러 줄의 헤더 정보가 키-벨류 쌍으로 이루어져 있다.

* 한줄공백

  • 응답헤더가 끝난 후 한줄공백 이후에 응답바디가 등장한다.

* 요청바디

  • 실제 응답 리소스 데이터가 나오는 부분이다. 데이터의 형식은 요청 헤더에 지정된 타입을 따른다.

References

profile
프론트엔드 개발 공부중인 주니어 개발자의 복습노트

0개의 댓글