공개 글

HTTP(HyperText Transfer Protocol)

영발개발 2025. 1. 16. 14:28
http란 무엇인가?

: 인터넷에서 정보를 주고 받는 규칙이다. 인터넷에서 클라이언트와 서버가 서로 소통할 때 쓰는 언어라고 봐도 좋다. 사람과 사람이 대화할 때 언어가 다르다면 의사소통이 어려워지는 것을 생각하면 이해하기 쉽다. 클라이언트와 서버가 같은 언어를 사용해서 요청과 응답을 이어나간다고 생각하자. (클라이언트와 서버 간의 Request와 Response를 위한 메세지)

 

 웹브라우저에서 개발자도구(F12)를 클릭하고 Network를 클릭하면 웹브라우저와 서버가 어떤 통신을 하고 있는지 모니터링 가능하다. Network 탭의 일부분을 알아보자.

 

Headers(헤더)

: http 요청과 응답의 메타데이터를 보여주는 부분. 쉽게 말하면, 클라이언트(브라우저)와 서버가 주고받는 '추가정보'를 담은 편지 봉투라고 생각하자. 

http 구조

  • General Headers(일반 헤더) : 클라이언트와 서버 양쪽에서 사용되는 공통 헤더로, HTTP 메시지 자체와 관련된 정보를 전달한다. 메시지가 요청인지 응답인지에 상관없이 사용된다. (ex. Date, Connection, Cache-Control 등)

 

  • Request Headers(요청 헤더) : 클라이언트가 서버로 요청을 보낼 때 포함되는 정보다. 서버가 요청을 이해하고 처리하는 데 필요한 세부 정보를 제공한다. (ex. Host, User-Agent, Accept, Authorization, Content-Type 등)

Request Headers 구조(사진 : https://personal.ntu.edu.sg/ehchua/)

더보기

* HTTP 메서드의 종류

  1. GET : 서버에 데이터를 요청한다. 요청하는 데이터가 url에 담겨서 전송되기 때문에 요청 본문(Body)이 없는 것이 특징이다. 주로 데이터를 조회하거나 읽어올 때 서버에서 리소스를 가져오기 위해 사용하며, 안전(idempotent)하고 캐싱이 가능하다.
  2. POST : 서버에 데이터를 제출하거나 새로운 리소스를 생성한다. 그렇기 때문에 요청 본문에 데이터를 포함하고, 글을 등록하는 것과 같은 데이터 생성 작업에 사용된다. (리소스를 서버에서 요청하므로 서버가 URL을 결정)
  3. PUT : 서버에서 리소스를 전체 교체하거나 생성한다. 글을 수정하는 것과 같은 업데이트 작업에 사용되며, 등록을 할 때도 PUT을 쓸 수 있지만 리소스를 특정 위치에 생성하므로(클라이언트가 리소스의 URL을 명시) 멱등성을 만족한다. 
  4. DELETE : 서버에서 리소스를 삭제한다. 멱등성을 만족한다.
  5. PATCH : 서버에서 리소스의 일부만 업데이트한다. 부분 수정에 사용된다.
  6. OPTIONS : 서버가 지원하는 메서드를 확인한다. 클라이언트와 서버 간의 설정 정보를 교환한다.
  7. HEAD : GET 요청과 동일하지만, 응답 본문은 제외하고 헤더만 받는다.
  8. TRACE : 요청이 서버에 도달하기 전 경로를 따라가며 디버깅한다. 보안상의 이유로 잘 사용되지는 않는다.

 

  • Response Headers(응답 헤더) : 서버가 클라이언트로 응답을 보낼 때 제공하는 정보다. 클라이언트가 응답 데이터를 처리하는 데 필요한 세부 정보를 제공한다. (ex. Server, Content-Type, Content-Length, Set-Cookie, Location 등)

Response Headers 구조(사진 : https://personal.ntu.edu.sg/ehchua/)

더보기

* HTTP 상태 코드(Status Code)

  1. 1xx : Informational (정보) - 임시 응답으로 현재 클라이언트의 요청까지는 처리되었으니 계속 진행하라는 의미다.
  2. 2xx : Success (성공) - 클라이언트의 요청이 서버에서 성공적으로 처리되었다는 의미다.
  3. 3xx : Redirection (리다이렉션) - 완전한 처리를 위해서 추가 동작이 필요한 경우다. 주로 서버의 주소 또는 요청한 URI의 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미다.
  4. 4xx : Client Error (클라이언트 에러) - 없는 페이지를 요청하는 등 클라이언트의 요청 메시지 내용이 잘못된 경우를 의미한다.
  5. 5xx : Server Error (서버 에러) - 서버 사정으로 메시지 처리에 문제가 발생한 경우다. 서버의 부하, DB 처리 과정 오류, 서버에서 익셉션이 발생하는 경우를 의미한다.

 

  • Entity Headers(컨텐츠 헤더 - 확장된 경우) : 일부 자료에서는 Entity Headers를 추가로 구분한다. 이 헤더는 전송된 본문 데이터(Content Body)에 관한 정보를 제공한다. (ex. Content-Encoding, Content-Language, Content-Disposition 등)

 

 처음에 헤더를 추가 정보가 적혀있는 편지 봉투에 비유했다. 편지 내용에 해당하는 본문은 Payload와 Preview 또는 Response에 표시된다. (위에 나왔던 그림에서는 헤더에서 한 줄 띄고 바디가 표시된다고 되어있는데 이는 HTTP 메시지의 원시 형태로, 개발자 도구에서는 이 데이터를 구분하여 표시한다.)

 

Payload

: Request Body(요청 바디)에 해당한다. 클라이언트가 서버로 보내는 데이터로 주로 POST, PUT, PATCH 메서드와 함께 사용된다. (JSON, XML, HTML form 데이터 등)

 

Preview or Response

: Response Body(응답 본문)에 해당한다. 서버가 클라이언트에게 응답으로 보내는 데이터다. (HTML, JSON, XML, 이미지 파일 등)

 


 

 

 추가로, 몇 가지 알아두면 좋은 것들도 추가적으로 간단히 정리해두려고 한다.

 

https(or SSL)는 무엇인가?

: https의 s는 secure라는 뜻하는 것으로. http의 보안이 강화된 버전이다. 전송되고 있는 정보를 누군가 낚아채도 암호화 되어 있으므로 당사자들만 알 수 있다. 

 

Cache(캐시)

:  캐시는 임시 저장소로, 브라우저나 서버가 자주 사용하는 데이터를 빠르게 재사용할 수 있도록 저장한다. HTML, CSS, JavaScript, 이미지와 같은 정적 리소스들을 대상으로 하고, 예시로 우리가 한 번 들어갔던 웹페이지를 다시 방문하면 이미지와 같은 것들이 빠르게 로드된다.

 

Cookie(쿠키)

: 쿠키는 웹 서버가 생성하여 웹 브라우저로 전송하는 작은 정보 파일로, 서버와의 상태 정보를 저장한다. 세션 관리, 사용자 식별, 사용자 맞춤 설정을 목적으로 하여 세션 ID, 사용자 정보등을 저장하기 때문에 로그인 시 아이디를 저장하거나 로그인 상태를 유지시킬 수 있다.

 

Web Storage(웹 스토리지)

: 웹 스토리지는 브라우저에 데이터를 저장하는 방식으로, HTML5부터 지원된다. 쿠키보다 더 많은 데이터를 저장할 수 있고, 보안 설정이 더 간단하다.

 

Proxy(프록시)

: 프록시는 클라이언트와 서버 사이의 중개자 역할을 하는 서버다. 캐시를 대신해 주거나, 보안과 관련된 공격을 막아주거나, 적당히 사용자 요청을 여러대 서비스로 분산해주는 것과 같은 역할을 할 수 있다.

'공개 글' 카테고리의 다른 글

@GetMapping? @PostMapping?  (0) 2025.02.19
html 기본 태그  (0) 2025.02.04
API와 REST API  (0) 2025.01.20
Git과 GitHub  (0) 2025.01.13
백준 2869번 문제 - 달팽이는 올라가고 싶다 풀이(자바)  (0) 2024.09.24