Research Institute
  • 웹의 이해와 HTTP
    2023년 08월 24일 22시 27분 45초에 업로드 된 글입니다.
    작성자: IIIIIIIIIIIIIIIIIIIIl

    웹 소개

    웹(Web)은 인터넷을 이용한 정보 공간 중 하나로 웹은 인터넷상에서 웹 페이지를 구성하고 정보를 공유하는 시스템입니다. 팀 버너스 리(Tim Berners-Lee)와 그의 연구팀이 개발한 하이퍼텍스트(Hypertext) 기술과 인터넷 기술을 결합하여 만들어졌습니다. 웹 페이지는 HTML(Hypertext Markup Language)과 같은 마크업 언어를 사용하여 만들어지며, 웹 브라우저를 통해 열람할 수 있습니다. 웹 페이지는 텍스트, 이미지, 비디오, 음악 등 다양한 형식의 데이터를 포함할 수 있습니다. 웹은 HTTP(Hypertext Transfer Protocol)를 사용하여 컴퓨터 간에 정보를 교환하며, 검색, 웹 사이트 열람, 온라인 쇼핑 등 다양한 서비스를 제공합니다.

    HTTP 소개

    HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위한 프로토콜(통신규약)입니다. HTTP는 클라이언트(사용자)와 서버(웹 사이트) 사이의 요청(request)과 응답(response)을 처리하는 방식을 정의하고 있습니다.

    HTTP는 주로 웹 브라우저를 통해 사용자가 웹 사이트에 접속하고 데이터를 주고받을 때 사용됩니다. HTTP 요청은 클라이언트가 서버에게 데이터를 요청하는 것이고, 서버는 이에 대한 응답으로 요청된 데이터를 전송해 줍니다.

    HTTP는 간단하고 유연한 구조로 되어 있으며, 웹 상에서 정보를 주고받는 데 있어서 중요한 역할을 합니다. 이외에도 HTTPS(Hypertext Transfer Protocol Secure)와 같이 HTTP에 보안 기능을 추가한 프로토콜도 있습니다.

    HTTP 특징

    HTTP는 주로 텍스트 기반의 프로토콜이며, 주요한 특징은 다음과 같습니다.

    1. 클라이언트-서버 모델: HTTP는 클라이언트(웹 브라우저 등)와 서버(웹 서버) 간의 요청과 응답에 기반하여 동작합니다. 클라이언트가 웹 페이지나 리소스를 요청하면, 서버는 해당 리소스를 제공하거나 처리한 후 응답합니다.
    2. 상태 없음(Stateless): HTTP는 각 요청과 응답이 독립적으로 처리되며, 이전 요청들의 상태를 기억하지 않습니다. 이는 각각의 요청이 서로 독립적으로 처리되어야 함을 의미합니다. 이를 위해 쿠키와 같은 메커니즘이 사용될 수 있습니다.
    3. 메서드(Methods): HTTP 요청은 다양한 메서드를 사용하여 서버에 원하는 동작을 지시합니다. 가장 일반적으로 사용되는 메서드는 GET(리소스 요청), POST(데이터 전송 및 처리), PUT(리소스 업데이트), DELETE(리소스 삭제) 등이 있습니다.
    4. URL(Uniform Resource Locator): 클라이언트는 요청할 리소스를 가리키는 URL을 사용하여 서버에 요청합니다. URL은 프로토콜, 호스트 주소, 포트 번호, 경로 등의 정보로 구성됩니다.
    5. 헤더(Headers): HTTP 요청과 응답은 헤더와 본문으로 구성됩니다. 헤더에는 요청 또는 응답의 부가 정보가 포함되며, 이 정보는 클라이언트와 서버 간의 통신을 조정하고 제어하는 데 사용됩니다.
    6. 본문(Body): HTTP 요청과 응답의 본문에는 실제 데이터가 포함됩니다. POST나 PUT과 같은 메서드에서는 데이터를 본문에 담아 서버로 전송합니다.
    7. 상태 코드(Status Codes): 서버는 HTTP 응답에 상태 코드를 포함하여 요청의 결과를 클라이언트에 알려줍니다. 예를 들어, 200 OK는 성공적인 응답을 나타내고, 404 Not Found는 요청한 리소스를 찾을 수 없음을 나타냅니다.
    8. 세션 관리: 상태 없는 특성을 보완하기 위해 쿠키와 세션을 사용하여 클라이언트와 서버 간의 상태 정보를 유지하고 관리할 수 있습니다.

    HTTP 통신 과정

    [그림1] HTTP 통신과정
    1. 클라이언트가 서버에게 요청(Request)을 보냅니다.
      • 요청(Request)은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 URL(Uniform Resource Locator) 등의 정보를 포함합니다.
      • 예: GET /index.html HTTP/1.1 Host: www.example.com
    2. 서버는 클라이언트의 요청을 받아들이고, 요청에 대한 응답(Response)을 준비합니다.
      • 응답(Response)은 상태 코드(200 OK, 404 Not Found 등)와 함께 응답 헤더(Response Header)와 본문(Response Body)을 포함합니다.
      • 예: HTTP/1.1 200 OK
      Content-Type: text/html
      Content-Length: 1234
      <html>
      <head>
      <title>Example</title>
      </head>
      <body>
      <h1>Hello, World!</h1>
      </body>
      </html>
      
    3. 서버는 클라이언트에게 응답(Response)을 보냅니다.
      • 응답(Response)은 HTTP 버전, 상태 코드, 응답 헤더(Response Header)와 본문(Response Body)을 포함합니다.
      • 예: HTTP/1.1 200 OK
      Content-Type: text/html
      Content-Length: 1234
      <html>
      <head>
      <title>Example</title>
      </head>
      <body>
      <h1>Hello, World!</h1>
      </body>
      </html>
      
    4. 클라이언트는 서버로부터 받은 응답(Response)을 처리합니다.
      • 응답(Response)의 본문(Response Body)을 웹 브라우저에서 렌더링 하거나, 다운로드하거나, 화면에 출력하는 등의 처리를 합니다.

    HTTP 요청 메소드

    HTTP 메소드는 클라이언트가 서버에 요청할 때 사용하는 메소드로, 요청하는 목적에 따라 다양한 메소드가 있습니다. 다음은 HTTP 메소드의 종류와 각각의 역할에 대한 설명입니다.

    GET: 리소스를 조회하기 위해 사용되는 메소드입니다. 요청한 URI의 정보를 서버로부터 받아오고, 응답으로 해당 리소스를 반환합니다. 보통 웹 브라우저에서 링크를 클릭하거나 주소창에 URL을 입력할 때 사용됩니다.
    POST: 리소스를 생성하기 위해 사용되는 메소드입니다. 요청 본문에 정보를 담아 서버에 전송하고, 서버는 해당 리소스를 생성합니다. 예를 들어, 회원가입 폼에서 정보를 입력하고 제출할 때 사용됩니다.
    PUT: 리소스를 수정하기 위해 사용되는 메소드입니다. 요청 본문에 수정할 정보를 담아 서버에 전송하고, 서버는 해당 리소스를 수정합니다. 보통 파일 업로드, 문서 수정 등에 사용됩니다.
    DELETE: 리소스를 삭제하기 위해 사용되는 메소드입니다. 요청한 URI의 리소스를 서버에서 삭제합니다. 보통 게시글 삭제, 파일 삭제 등에 사용됩니다.
    PATCH: 리소스를 일부 수정하기 위해 사용되는 메소드입니다. PUT과 유사하지만, PUT은 리소스 전체를 수정하고 PATCH는 일부만 수정합니다. 예를 들어, 게시글의 일부 내용만 수정할 때 사용됩니다.
    HEAD: GET과 비슷하지만, 응답 본문을 포함하지 않고 응답 헤더 정보만을 반환합니다. 주로 리소스의 메타 정보를 가져올 때 사용됩니다.
    OPTIONS: 서버가 제공하는 HTTP 메소드를 확인하기 위해 사용되는 메소드입니다. 요청한 URI의 리소스에 대해 사용 가능한 메소드 목록을 반환합니다.
    CONNECT: 서버와의 터널링을 요청하는 메소드입니다. 주로 SSL/TLS를 사용하는 프록시 서버와의 통신에 사용됩니다.
    TRACE: 서버로 전송된 요청 메시지를 되돌려 받아, 클라이언트와 서버 간의 통신 상태를 진단하기 위해 사용됩니다. 보안 문제로 인해 대부분의 브라우저에서 비활성화되어 있습니다.

    HTTP 응답 상태 코드

    HTTP 응답 코드는 웹 서버가 클라이언트의 요청에 대한 처리 결과를 나타내기 위해 사용하는 숫자로 이루어진 코드입니다. 클라이언트가 웹 서버에게 요청을 보내면, 서버는 해당 요청을 처리하고 그 결과를 응답으로 반환합니다. 이 때 응답 코드는 요청이 어떻게 처리되었는지를 나타내며, 클라이언트가 이를 이해하여 적절한 조치를 취할 수 있도록 도와줍니다.

    HTTP 응답 코드는 크게 다음과 같은 범주로 나뉩니다:

    1xx (Informational): 요청이 수신되었으며 처리가 계속되고 있는 상태를 나타냅니다.
    2xx (Successful): 요청이 성공적으로 처리되었음을 나타냅니다.
    3xx (Redirection): 클라이언트가 요청을 완료하기 위해 추가 조치를 취해야 함을 나타냅니다.
    4xx (Client Error): 클라이언트의 요청에 오류가 있거나 처리할 수 없음을 나타냅니다.
    5xx (Server Error): 서버가 유효한 요청을 처리할 수 없거나 내부 오류가 발생했음을 나타냅니다.


    각각의 응답 코드는 고유한 의미를 가지며, 클라이언트가 어떻게 대응해야 하는지를 알려줍니다. 예를 들어, 200 OK는 성공적으로 요청이 처리되었음을 나타내며, 404 Not Found는 요청한 리소스를 찾을 수 없음을 나타냅니다.

     

     다음은 HTTP 응답 상태 코드의 종류와 각각의 역할에 대한 설명입니다.

    100 Continue: 요청의 일부를 받았고, 클라이언트가 나머지를 계속해서 보낼 수 있음을 나타냅니다.
    101 Switching Protocols: 클라이언트의 요청에 따라 프로토콜을 변경함을 나타냅니다.
    102 Processing: 서버는 요청을 받았으며 처리 중이지만, 아직 완료되지 않았음을 나타냅니다.
    103 Early Hints: 서버가 리소스에 대한 일부 정보를 보내줌으로써 클라이언트가 미리 처리할 수 있도록 합니다.
    200 OK: 요청이 성공적으로 처리되었음을 나타냅니다.
    201 Created: 새로운 리소스가 성공적으로 생성되었음을 나타냅니다.
    202 Accepted: 요청이 받아들여졌지만 아직 완료되지 않았음을 나타냅니다.
    203 Non-Authoritative Information: 정보가 기관의 서버에서 제공된 것이 아님을 나타냅니다.
    204 No Content: 요청은 성공적으로 처리되었지만, 반환할 컨텐츠가 없음을 나타냅니다.
    205 Reset Content: 클라이언트는 뷰를 재설정해야 함을 나타냅니다.
    206 Partial Content: 클라이언트에게 요청 범위의 일부 컨텐츠가 전송되었음을 나타냅니다.
    207 Multi-Status: 다양한 상태 응답이 반환되었음을 나타냅니다.
    208 Already Reported: 멀티 상태(DAV) 요청의 결과로서 상태가 이미 보고되었음을 나타냅니다.
    226 IM Used: 요청된 범위의 인스턴스 매니페스트가 사용되었음을 나타냅니다.
    3xx (Redirection): 요청을 완료하기 위해 클라이언트가 추가 동작을 수행해야 함을 나타냅니다.
    400 Bad Request: 요청이 잘못되었거나 서버가 이해할 수 없음을 나타냅니다.
    401 Unauthorized: 인증이 필요한 페이지에 대한 접근 권한이 없음을 나타냅니다.
    402 Payment Required: 예약됨, 현재는 사용되지 않습니다.
    403 Forbidden: 요청된 리소스에 대한 접근 권한이 없음을 나타냅니다.
    404 Not Found: 요청한 리소스를 찾을 수 없음을 나타냅니다.
    500 Internal Server Error: 서버 내부 오류로 인해 요청을 처리할 수 없음을 나타냅니다.
    501 Not Implemented: 요청된 기능이 서버에서 구현되지 않았음을 나타냅니다.
    502 Bad Gateway: 게이트웨이나 프록시 서버에서 유효한 응답을 받을 수 없음을 나타냅니다.
    503 Service Unavailable: 서버가 현재 과부하 상태이거나 유지보수 중이어서 요청을 처리할 수 없음을 나타냅니다.

     

     

    참고자료

    https://www.bugbountyclub.com/

    https://developer.mozilla.org/ko/docs/Web/HTTP

    https://ko.wikipedia.org/wiki/%EC%9B%94%EB%93%9C_%EC%99%80%EC%9D%B4%EB%93%9C_%EC%9B%B9

    https://ko.wikipedia.org/wiki/%ED%86%B5%ED%95%A9_%EC%9E%90%EC%9B%90_%EC%8B%9D%EB%B3%84%EC%9E%90

    https://ko.wikipedia.org/wiki/HTTP

     

    댓글