| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- Data_Structure
- GNN
- Mesh
- 데이터베이스
- Leet Code
- 코딩테스트
- db
- CNN
- Database
- sort
- 컴퓨터사이언스
- 데베
- 오블완
- DS
- 대학생
- CS
- 컴퓨터공학
- Python
- LeetCode
- meshgraphnet
- SQL
- 자료구조
- coding
- 데이터
- mysql
- code
- 코테
- 티스토리챌린지
- 개발자
- adaptive remeshing
- Today
- Total
sy1214ei 님의 블로그
HTTP 설명 본문
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 응답에서 가장 중요한 첫 번째 줄을 상태 라인이라고 합니다. 이 라인은 요청이 성공했는지, 실패했는지 등 처리 결과를 나타냅니다.
상태 라인은 세 부분으로 나뉩니다.

- HTTP 버전 (HTTP/1.1): 사용된 프로토콜 버전을 나타냅니다.
- 상태 코드 (200): 요청의 처리 결과를 숫자로 나타냅니다.
- 예시의 200은 요청이 성공(OK) 하여 정상적인 응답이 돌아왔음을 의미합니다.
- 응답 구문 (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
