sy1214ei 님의 블로그

HTTP 설명 본문

[Study]/[Server] Server

HTTP 설명

sy1214ei 2025. 10. 12. 15:28

1) URL(Uniform Resource Locato)

🌐 URL (Uniform Resource Locator)의 구조

**URL(Uniform Resource Locator)**은 인터넷상의 리소스(자원)의 위치를 나타내는 표준화된 주소 체계입니다. 기술적으로는 **URI(Uniform Resource Identifier)**의 하위 개념이지만, 웹 환경에서는 현재 거의 같은 의미로 혼용되어 사용되고 있습니다.

제공된 예시 URL: http://www.wooteco.com/webcontents/index.html

URL은 크게 스킴(Scheme), 호스트명(Host), 경로명(Path) 세 가지 주요 요소로 구성됩니다.

구성 요소 예시 역할
스킴(Scheme) http 리소스를 획득하는 방법 (통신 프로토콜)을 지정합니다.
호스트명(Host) www.wooteco.com 리소스가 존재하는 **서버(컴퓨터)**의 이름을 나타냅니다.
경로명(Path) /webcontents/index.html 호스트 내에서 리소스의 정확한 위치를 나타냅니다.

1. 스킴 (Scheme)

스킴은 클라이언트가 서버로부터 리소스를 가져오기 위해 사용해야 할 프로토콜 또는 접근 방법을 나타냅니다. 웹 애플리케이션에서는 대부분 HTTP 프로토콜을 사용합니다.

💡 주요 스킴 종류

스킴 의미 설명
http HyperText Transfer Protocol 암호화되지 않은 일반적인 웹 통신 프로토콜입니다.
https HTTP Secure 암호화된 보안 HTTP 통신 프로토콜입니다.
ftp File Transfer Protocol FTP 프로토콜을 통한 파일 전송 및 획득을 나타냅니다.
mailto 메일 수취인 이메일 클라이언트를 실행하여 특정 주소로 이메일을 보내기 위한 스킴입니다.
file 파일 시스템 로컬 컴퓨터의 파일 시스템 속 파일이나 디렉토리를 참조할 때 사용합니다.

2. 호스트명 (Host)

호스트명은 리소스가 실제로 저장되어 있고, 클라이언트의 요청을 받아 처리할 수 있는 서버 컴퓨터의 이름을 나타냅니다.

  • 호스트 컴퓨터: 네트워크에 연결되어 다른 컴퓨터(클라이언트)로부터 요청을 받고 그 결과를 되돌려주는 컴퓨터를 일반적으로 호스트 컴퓨터라고 합니다.
  • 역할: 웹 환경에서 호스트명은 보통 도메인 이름으로 사용되며, 이 도메인 이름은 DNS(Domain Name System)를 통해 서버의 실제 IP 주소로 변환되어 통신이 이루어집니다.
    • 예시에서 www.wooteco.com이 호스트명입니다.

3. 경로명 (Path)

경로명은 호스트명으로 지정된 서버 컴퓨터 내부에서 리소스가 정확히 어디에 위치하는지를 나타냅니다.

  • 계층적 구조: 경로명은 파일 시스템처럼 / (슬래시)를 구분자로 사용하여 **디렉토리(폴더)**와 파일 이름을 계층적으로 지정합니다.
  • 역할: URL을 통해 **도메인 컴퓨터 디렉토리 파일명**과 같이 상세한 위치를 지정함으로써, 인터넷상에서 특정 리소스를 고유하게 식별하고 접근할 수 있게 합니다.
    • 예시에서 /webcontents/index.html은 webcontents 디렉토리 하위에 있는 index.html 파일을 나타냅니다.
    • 경우에 따라 파일명 없이 디렉토리까지만 지정하면, 서버 설정에 따라 해당 디렉토리의 기본 파일(예: index.html)이 자동으로 로드됩니다.

📌 URI와 URL의 관계 (참고)

  • URI (Uniform Resource Identifier): 인터넷상의 자원을 식별하는 통합적인 방법입니다.
  • URL (Uniform Resource Locator): URI 중에서도 자원의 **위치(Location)**를 나타내는 데 특화된 개념입니다.
    • 모든 URL은 URI이지만, 모든 URI가 URL인 것은 아닙니다. (예: URN(Uniform Resource Name)은 자원의 이름만 나타냄)
  • 실제 사용: 웹 환경에서는 '주소'를 의미하는 경우가 많아 URL이라는 용어가 널리 쓰이며, 현재는 두 용어가 혼용되어 사용되므로, 일반적인 웹 주소는 URL이자 URI로 이해해도 무방합니다.

2) HTTP Request Line

HTTP 요청 메시지는 크게 요청 라인(Request Line), 요청 헤더(Request Headers), 그리고 **요청 메시지 본문(Request Message Body)**으로 구성되어 있습니다.

 

1. 요청 라인 구성 요소 (첫 번째 줄)

HTTP 요청의 첫 번째 줄은 요청 라인입니다: GET /doc/test.html HTTP/1.1

a) 메서드 (Method)

  • 역할: 요청의 종류를 나타냅니다.
  • 예시: 이미지에서는 GET입니다.
  • 의미: 'URI에서 지정한 정보를 나에게 보내주세요'라는 의미입니다. 웹 브라우저에서 서버로 보내는 대부분의 요청은 GET 메서드를 따릅니다.

b) URI (Uniform Resource Identifier)

  • 역할: 무엇을 원하는지, 즉 요청 대상의 자원을 나타냅니다.
  • 예시: 이미지에서는 /doc/test.html입니다.
  • 의미: GET 메서드가 단순히 '정보를 달라'는 의미라면, URI는 '어떤 정보를 원하는가'를 명확히 지정합니다. 일반적으로 URL과 거의 같은 것으로 생각해도 무방합니다.

c) HTTP 버전 (HTTP Version)

  • 역할: 사용 중인 HTTP 프로토콜의 버전을 나타냅니다.
  • 예시: 이미지에서는 HTTP/1.1입니다.
  • 의미: 버전에 따라 사용할 수 있는 메서드나 헤더의 종류가 달라지므로, 요청이 어떤 버전에 기반하는지 명시합니다.

2. 요청 헤더 구성 요소 (메시지 헤더)

요청 라인 다음 줄부터는 요청 헤더이며, 요청에 대한 부가적인 정보를 나타냅니다.

g) Host

  • 역할: 요청을 보낸 곳의 호스트명과 (선택적으로) 포트 번호를 지정합니다.
  • 예시: 이미지에서는 **www.test101.com**입니다.
  • 의미: 하나의 서버가 여러 웹사이트를 운영할 때(가상 호스팅), 서버가 클라이언트가 원하는 웹사이트가 무엇인지 식별하는 데 매우 중요합니다.

d) Accept

  • 역할: 웹 클라이언트가 받을 수 있는 데이터의 종류를 표시합니다.
  • 예시: 이미지에서는 image/gif, image/jpeg, */* 입니다.
  • 의미: 데이터 종류는 Content-Type 형식으로 표시되며, 클라이언트가 받을 수 있는 Content-Type을 쉼표(,)로 구분하여 지정합니다. 서버는 이 필드를 참조하여 클라이언트가 처리할 수 없는 불필요한 정보를 보내지 않을 수 있습니다.

e) Accept-Language

  • 역할: 웹 클라이언트가 받을 수 있는 자연 언어의 종류(사람이 사용하는 언어)를 나타냅니다.
  • 예시: 이미지에서는 en-us (미국식 영어)입니다.
  • 의미: 서버가 다국어 버전을 제공할 때, 이 정보를 참조하여 사용자에게 가장 적합한 언어의 콘텐츠를 제공할 수 있습니다.

f) User-Agent

  • 역할: 이용 중인 웹 브라우저(웹 클라이언트)의 종류와 버전을 나타냅니다.
  • 예시: 이미지에서는 Mozilla/4.0입니다.
  • 의미: 서버가 특정 브라우저에 최적화된 콘텐츠를 제공하는 데 참고할 수 있는 정보입니다.

3. 요청 메시지 본문 (Request Message Body)

헤더 섹션과 빈 줄로 구분된 다음 부분이 요청 메시지 본문입니다.

  • 역할: 서버로 전송하려는 실제 데이터(예: 폼 데이터)를 담고 있습니다.
  • 예시: 이미지에서는 bookId=12345&author=Tan+Ah+Teck입니다.
  • 의미: 이미지의 예시는 데이터를 포함하고 있습니다. GET 요청의 경우 보통 데이터가 URI에 포함되지만, POST와 같은 다른 메서드에서는 이 본문이 필수적이며 사용자가 입력한 내용이나 업로드할 파일 등이 여기에 담깁니다.

HTTP 응답 메시지는 클라이언트(웹 브라우저)의 요청에 대해 서버가 보내는 메시지이며, 크게 상태 라인(Status Line), 응답 헤더(Response Headers), 그리고 **응답 메시지 본문(Response Message Body)**으로 구성됩니다.


3) HTTP response

a) 상태 라인 (Status Line)

HTTP 응답에서 가장 중요한 첫 번째 줄을 상태 라인이라고 합니다. 이 라인은 요청이 성공했는지, 실패했는지 등 처리 결과를 나타냅니다.

상태 라인은 세 부분으로 나뉩니다.

  1. HTTP 버전 (HTTP/1.1): 사용된 프로토콜 버전을 나타냅니다.
  2. 상태 코드 (200): 요청의 처리 결과를 숫자로 나타냅니다.
    • 예시의 200은 요청이 성공(OK) 하여 정상적인 응답이 돌아왔음을 의미합니다.
  3. 응답 구문 (OK): 상태 코드를 사람이 읽기 쉬운 텍스트로 설명합니다.

📜 대표적인 HTTP 상태 코드

상태 코드는 세 자리 숫자로 구성되며, 첫 번째 자릿수에 따라 요청 처리의 성공, 실패, 리다이렉션 등을 구분합니다.

구분 범위 의미 대표적인 코드
2XX 성공 클라이언트의 요청이 서버에 의해 성공적으로 수신, 이해, 처리되었습니다. 200 OK (성공), 201 Created (자원 생성 성공)
3XX 리다이렉션 클라이언트가 요청을 완료하기 위해 **추가적인 동작(다른 위치로 이동 등)**이 필요합니다. 302 Found (임시 이동), 304 Not Modified (캐시된 자원 사용)
4XX 클라이언트 오류 요청에 오류가 있어 클라이언트 측에서 요청을 완료할 수 없습니다. 401 Unauthorized (권한 없음), 404 Not Found (자원 없음)
5XX 서버 오류 서버가 유효한 요청을 명백하게 수행하지 못했을 때 발생한 오류입니다. 500 Internal Server Error (내부 서버 오류), 503 Service Unavailable (서비스 이용 불가)

b) 메시지 헤더 (Response Headers)

상태 라인에 이어서 두 번째 줄부터 빈 줄까지 계속되는 부분이며, 응답에 대한 부가적인 정보가 들어있습니다. 요청 메시지 헤더와 같은 형식으로 구성됩니다.

  • Date: 응답이 생성된 날짜 및 시간
  • Server: 응답을 처리한 웹 서버의 종류와 버전
  • Content-Length: 응답 메시지 본문의 길이 (크기)
  • Content-Type: 메시지 본문에 담긴 데이터의 종류 (예: text/html)

c) 메시지 본문 (Response Message Body)

메시지 본문은 헤더와 빈 줄로 구분된 다음 부분이며, 클라이언트에게 실제로 전달하려는 데이터가 담겨 있습니다.

  • 역할: 요청한 자원, 즉 데이터 자체가 위치하는 곳입니다.
  • 예시: 이미지에서와 같이 HTML 파일을 요청했을 경우, <H1>My Home page</H1>과 같은 HTML 텍스트가 여기에 저장됩니다.
  • 다양한 데이터: HTML 외에도, GIF나 JPEG 같은 이미지 파일, JSON 데이터 등 요청에 따라 다양한 형식의 데이터가 메시지 본문에 들어가며, 웹 브라우저는 이 본문을 해석하여 화면에 표시합니다.

4) HTTP method