본문 바로가기

HTTP 프로토콜 본문

AP

HTTP 프로토콜

ITst 2024. 3. 16. 22:23

HTTP    HyperTextTransferProtocol

HTTP(HyperText Transfer Protocol)는 웹 상에서 데이터를 교환하기 위한 표준 프로토콜로, 웹 브라우저와 웹 서버 간의 통신을 가능하게 하는 기반이 됩니다.

 

HTTP의 특징

  • 클라이언트-서버 모델을 따르며, 클라이언트가 요청을 보내면 서버가 응답합니다.
  • 텍스트 기반의 프로토콜로, 다양한 형식의 데이터(텍스트, JSON, XML 등)를 전송할 수 있습니다.
  • 연결 지향적이지 않아 요청-응답 방식으로 동작합니다.
  • OSI 7계층 모델 중 응용 계층에 속합니다.
  • 기본적으로 80포트를 사용합니다.

 

HTTP 메시지 구조

HTTP 메시지는 요청(Request)과 응답(Response)으로 구성됩니다.

HTTP 요청(Request)

[그림 1] HTTP 요청

  1. HTTP 전송 방법: 일반적으로 웹서버로부터 자료를 가져오는 기능을 하는 GET을 많이 사용하며, GET 메소드는 별도의 메시지 바디가 필요없기 때문에 GET 메소드 뒤에 따라오는 빈 줄에는 GET과 관련한 요청 데이터가 없습니다.
  2. 요청된 URL: URL은 자료를 요청할 때 쓰는 이름으로 클라이언트가 자료를 요청하기 위해 보내는 인자 값 등 임의의 쿼리 문자열을 의미합니다. 쿼리스트링은 URL에서 ?로 나타내며, 예제 내 code라는 이름과 123이라는 값을 가진 매개변수임을 알 수 있습니다.
  3. HTTP 버전: 인터넷상에서 가장 일반적으로 쓰이는 HTTP 버전은 1.0과 1.1이고, 대부분의 브라우저는 초기 값으로 1.1을 씁니다. 두 버전은 약간 다른데, 웹 애플리케이션을 공격할 때 1.1의 호스트 요청 헤더는 1.0과 달리 강제적입니다.
  4. Referer 헤더: 해당요청이 이전에 어디에서부터 요청을 받았는지에 대한 URL을 나타냅니다. 위의 예에서는 사용자가 https://foreitst.tistory.com/에서 GET 요청으로 /example/search.do?code=123 URL을 요청한 것입니다.
  5. User-Agent 헤더: 브라우저나 기타 클라이언트의 소프트웨어 정보를 보여주고 있습니다. 모질라(Mozilla)는 여러 이유로 대부분의 브라우저에 포함되어 있습니다.
  6. Host 헤더: URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용되며, 특히 다양한 웹사이트가 하나의 서버 안에서 호스트됐을 때 필요합니다. 보통 제일 처음 요청한 URL에는 호스트명이 없습니다.
  7. Cookie 헤더: 서버가 클라이언트에게 전송한 인자 값에 추가 정보를 보낼 때 사용합니다.

HTTP 응답(Response)

[그림 2] HTTP 응답

  1. HTTP 버전: HTTP 응답 메시지의 시작줄(Start Line)에는 HTTP 버전 정보가 포함되어 있습니다. 이를 통해 서버가 어떤 HTTP 스펙을 준수하고 있는지 알 수 있습니다.
  2. 요청에 대한 상태코드:  200이 표시되면 요청이 성공적으로 이뤄졌다는 것을 뜻합니다. 자세한 상태코드는 이 사이트를 참고
  3. 응답에 대한 상황을 설명해주는 문자열: 정상적으로 페이지가 전달됐기 때문에 OK라는 값을 보내주고 있습니다.
  4. Server 헤더: 웹서버 소프트웨어나 설치되어있는 모듈, 운영체제에 대한 정보를 포함합니다.
  5. Set-Cookie 헤더: 브라우저에게 쿠키에 대한 정보를 알려줍니다. 쿠키 정보는 클라이언트가 향후 서버에게 페이지를 요청할 때 서버 측으로 보내는 HTTP 요청 정보 중에서 쿠키 형태로 사용됩니다.
  6. Pragma 헤더: 브라우저가 응답한 내용을 캐시에 저장하지 않게 합니다.
  7. Content-Type 헤더: 대부분의 HTTP 응답은 헤더 다음에 오는 빈칸 뒤에 메시지 바디가 따라 나오는데, 이 메시지 바디에 HTML문서가 있음을 알려줍니다.
  8. Content-Length 헤더: 메시지 바디 길이를 바이트 단위로 나타냅니다.

'AP' 카테고리의 다른 글

[TS] Referer 헤더가 null로 들어왔던 이유  (0) 2024.04.30
HTTPS 프로토콜  (0) 2024.03.18
Comments