본문 바로가기
운영체제&네트워크/Network

HTTP 리퀘스트 메시지 만드는 과정

by GangDev 2024. 4. 24.

 

브라우저가 URL을 해독하고 HTTP 리퀘스트 메시지를 만드는 과정은 다음과 같다:

1. **URL 해독**: 브라우저는 먼저 URL을 해독한다. URL은 프로토콜, 웹 서버명, 경로명 등으로 구성되어 있다. 예를 들어, `http://www.lab.cyber.co.kr/dir/`에서 `http`는 프로토콜, `http://www.lab.cyber.co.kr`은 웹 서버명, `/dir/`은 경로명이다. 이 정보를 바탕으로 브라우저는 웹 서버와 파일명을 판단한다.

2. **HTTP 리퀘스트 메시지 작성**: 브라우저는 해독한 URL 정보를 바탕으로 HTTP 리퀘스트 메시지를 만든다. 이 메시지는 특정 포맷에 맞게 구성되어야 한다. 메시지는 메시지 헤더와 메시지 본문으로 구성된다.
   - **메시지 헤더**: 메시지 헤더는 `<필드명>:<필드값>` 형태로 구성되며, 한 행에 한 개의 헤더 필드를 쓴다. 이는 리퀘스트의 부가적인 정보를 나타냅니다.
   - **메시지 본문**: 메시지 본문은 클라이언트에서 서버에 송신하는 데이터를 포함한다. 예를 들어, 폼 페이지에 입력한 데이터를 POST 메소드로 웹 서버에 보낼 때 데이터가 들어간다.

3. **리퀘스트 라인 작성**: 리퀘스트 메시지의 첫 번째 줄에는 리퀘스트 라인이 작성된다. 이 라인에는 메소드(GET, POST 등), URI(`/<디렉토리명>/..../<파일명>`), 그리고 사용하는 HTTP 버전이 포함된다.

4. **메시지 헤더 작성**: 메시지 헤더는 브라우저의 종류, 버전, 설정 등에 따라 다른 정보가 들어갈 수 있다. 메시지 헤더가 끝나면 공백 행을 넣고, 그 다음줄에 송신할 데이터를 쓰는데, GET 메소드의 경우 데이터가 없을 수 있다. POST 메소드의 경우 데이터가 포함됩니다 .

이 과정을 통해 브라우저는 URL을 해독하고, 이를 바탕으로 HTTP 리퀘스트 메시지를 만들어 웹 서버에 전송한다.

 


URL을 인코딩하는 것이 HTTP 리퀘스트 메시지를 작성하기 전에 중요한 이유가 있다. URL 인코딩은 다음과 같은 목적으로 필요하다:

1. **데이터 정확성 보장**: URL은 특수 문자나 공백 등을 포함할 수 있다. 이러한 문자들은 웹 서버나 브라우저에서 잘못 해석될 수 있으므로, URL 인코딩은 특수 문자들이 정확히 해석되도록 보장한다. 이는 데이터 전송 시 오류를 줄이고 정확한 전송을 보장한다.

2. **데이터 무결성 유지**: URL에서 데이터를 전송할 때, 예를 들어 검색 쿼리나 폼 제출 등의 데이터를 전송하는 경우, 인코딩은 데이터가 전송 과정에서 보존되도록 한다. 인코딩은 수신자가 데이터를 정확히 처리하고 해석할 수 있도록 한다.

3. **키-값 쌍 구분**: URL 인코딩은 문자열을 키-값 쌍으로 고유하게 파싱할 수 있게 한다. URL이나 본문에 있는 경우에도 마찬가지로, URL 인코딩은 전송된 내용을 이해하는 데 없이는 모호함을 제거한다.

따라서, URL을 인코딩하는 것은 데이터의 정확성과 무결성을 보장하고, 사용자에게 올바르게 정보를 전달하는 데 필요하다. 이는 웹 개발자가 인터넷을 통해 데이터를 전송할 때 데이터 무결성, 보안, 정확성을 보장하는 데 중요한 역할을 한다.

 


URL 인코딩과 디코딩은 웹 개발에서 중요한 개념이다. 이 두 개념의 차이점과 예시를 살펴보겠다.

### URL 인코딩 (Percent-Encoding)

URL 인코딩은 특수 문자나 공백 등을 안전하게 전송할 수 있도록 인코딩하는 과정이다. 이는 웹 서버나 브라우저에서 잘못 해석될 수 있는 문자들을 퍼센트 인코딩(%)을 사용하여 안전하게 전송하기 위함이다. 인코딩된 문자는 `%` 기호 다음에 두 자리의 16진수로 표현된다.

**예시**:
- 원래 URL: `https://example.com/hello world`
- 인코딩된 URL: `https://example.com/hello%20world`

여기서 공백(` `)은 `%20`으로 인코딩되었다.

### URL 디코딩

반대로, URL 디코딩은 인코딩된 URL을 원래의 형태로 복원하는 과정이다. 이는 웹 서버나 브라우저가 인코딩된 URL을 해석하고 처리할 수 있도록 한다. 디코딩은 인코딩된 문자를 원래의 문자로 변환한다.

**예시**:
- 인코딩된 URL: `https://example.com/hello%20world`
- 디코딩된 URL: `https://example.com/hello world`

여기서 `%20`은 공백(` `)으로 디코딩되었다.

### 요약

- **URL 인코딩**은 특수 문자나 공백 등을 안전하게 전송하기 위해 사용된다. 이는 웹 서버나 브라우저에서 잘못 해석될 수 있는 문자들을 퍼센트 인코딩(%)을 사용하여 안전하게 전송하기 위함이다.
- **URL 디코딩**은 인코딩된 URL을 원래의 형태로 복원하는 과정이다. 이는 웹 서버나 브라우저가 인코딩된 URL을 해석하고 처리할 수 있도록 한다.

이 두 과정은 웹 개발에서 데이터의 정확성과 무결성을 보장하는 데 중요한 역할을 한다.

 


URL에서 인코딩이 필요한 일반적인 특수 문자들은 다음과 같다:

- **공백**: URL에서 공백은 `%20` 또는 `+` 기호로 인코딩된다. 예를 들어, `http://www.example.com/new%20pricing.htm`에서 공백은 `%20`으로 인코딩되었다.

- **ASCII 컨트롤 문자**: 00-1F 및 7F 범위의 문자는 인코딩이 필요하다. 이들은 출력 제어를 위해 사용되는 불출력 문자이다.

- **비ASCII 컨트롤 문자**: 80-FF 범위의 문자는 인코딩이 필요하다. 이들은 ISO-Latin 문자 세트의 일부로, ASCII 문자 세트를 벗어난 문자들이다.

- **예약된 문자**: 달러 기호(`$`), 앰퍼샌드(`&`), 더하기(`+`), 콤마(`,`), 슬래시(`/`), 콜론(`:`), 세미콜론(`;`), 등호(`=`), 물음표(`?`), 앳 기호(`@`) 등은 URL 내에서 특별한 의미를 가지고 있으므로 인코딩이 필요하다.

- **안전하지 않은 문자**: 공백, 따옴표(`"`), 작은 따옴표(`'`), 꺽쇠(`<`, `>`), 파이프(`|`), 백슬래시(`\`), 캐럿(`^`), 틸드(`~`), 중괄호(`{`, `}`), 백틱(`` ` ``), 퍼센트 기호(`%`) 등은 URL 내에서 잘못 해석될 수 있으므로 인코딩이 필요하다.

이러한 문자들은 URL 인코딩을 통해 안전하게 전송될 수 있도록 변환된다. 인코딩은 문자를 퍼센트 기호(`%`) 다음에 두 자리의 16진수로 표현하여, 웹 브라우저와 서버가 모두 이해할 수 있는 형태로 변환한.