게으른 개발자의 끄적거림

HTTP 헤더란? (header 구조, 구성 요소)

끄적잉 2024. 6. 25. 21:47
반응형

### HTTP 헤더란 무엇인가?

HTTP(하이퍼텍스트 전송 프로토콜) 헤더는 클라이언트(보통 웹 브라우저)와 서버 간의 HTTP 요청 및 응답에 대한 추가 정보를 전송하는 데 사용되는 키-값 쌍입니다. HTTP 헤더는 HTTP 메시지의 헤더 섹션에 위치하며, 헤더 필드(Header Field)라고도 불립니다. HTTP 헤더는 요청 헤더(Request Header)와 응답 헤더(Response Header)로 나뉘며, 각 헤더는 HTTP 메시지의 특성과 행동을 지정하는 데 중요한 역할을 합니다.

 


### HTTP 헤더의 역할

HTTP 헤더는 여러 가지 중요한 역할을 수행합니다:

1. **요청 및 응답 제어**: 클라이언트가 서버에 특정 요청을 하거나, 서버가 클라이언트에 특정 응답을 할 때 필요한 제어 정보를 전달합니다.
2. **메타데이터 전송**: 메시지 본문(body)에 대한 정보, 예를 들어 콘텐츠 타입, 인코딩 방식, 길이 등을 전달합니다.
3. **인증 및 보안**: 인증 정보 및 보안 관련 정보를 전달하여, 요청이 올바른지, 클라이언트가 적절한 권한을 가지고 있는지 확인합니다.
4. **캐싱 제어**: 클라이언트와 서버 간의 데이터 캐싱을 제어하여, 네트워크 효율성을 높이고 성능을 향상시킵니다.

 


### HTTP 헤더의 구조

HTTP 헤더는 "필드 이름: 필드 값"의 형태로 구성됩니다. 필드 이름은 대소문자를 구분하지 않으며, 필드 값은 대소문자를 구분합니다. 여러 필드 값을 가질 수 있는 경우, 쉼표로 구분하여 나열합니다.

예시:
```
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, must-revalidate
```

 

### 주요 HTTP 요청 헤더

HTTP 요청 헤더는 클라이언트가 서버에 요청을 보낼 때 포함되는 헤더입니다. 주요 요청 헤더와 그 설명은 다음과 같습니다:

1. **Host**: 요청이 전송될 서버의 호스트 이름과 포트 번호를 지정합니다.
   ```
   Host: http://www.example.com
   ```

2. **User-Agent**: 요청을 보내는 클라이언트의 소프트웨어 정보를 포함합니다.
   ```
   User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
   ```

 

반응형



3. **Accept**: 클라이언트가 이해할 수 있는 MIME 타입을 지정합니다.
   ```
   Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
   ```

4. **Accept-Encoding**: 클라이언트가 이해할 수 있는 인코딩 방식을 지정합니다.
   ```
   Accept-Encoding: gzip, deflate, br
   ```

5. **Accept-Language**: 클라이언트가 선호하는 언어를 지정합니다.
   ```
   Accept-Language: en-US,en;q=0.9
   ```

6. **Authorization**: 서버에서 인증된 리소스를 요청할 때 필요한 인증 정보를 포함합니다.
   ```
   Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
   ```

7. **Cookie**: 클라이언트가 서버에 전송하는 쿠키 정보를 포함합니다.
   ```
   Cookie: sessionId=abc123; theme=light
   ```

 

 


### 주요 HTTP 응답 헤더

HTTP 응답 헤더는 서버가 클라이언트에 응답을 보낼 때 포함되는 헤더입니다. 주요 응답 헤더와 그 설명은 다음과 같습니다:

1. **Content-Type**: 응답 본문의 MIME 타입을 지정합니다.
   ```
   Content-Type: text/html; charset=UTF-8
   ```

2. **Content-Length**: 응답 본문의 길이를 바이트 단위로 지정합니다.
   ```
   Content-Length: 342
   ```

3. **Server**: 응답을 보내는 서버의 소프트웨어 정보를 포함합니다.
   ```
   Server: Apache/2.4.41 (Ubuntu)
   ```

4. **Set-Cookie**: 클라이언트에 설정할 쿠키를 지정합니다.
   ```
   Set-Cookie: sessionId=abc123; Path=/; HttpOnly
   ```

5. **Cache-Control**: 응답 데이터의 캐싱 정책을 지정합니다.
   ```
   Cache-Control: no-cache, no-store, must-revalidate
   ```

6. **Expires**: 응답 데이터의 만료 시간을 지정합니다.
   ```
   Expires: Wed, 21 Oct 2021 07:28:00 GMT
   ```

7. **Location**: 클라이언트를 리다이렉션할 URL을 지정합니다.
   ```
   Location: https://www.example.com/new-page
   ```

 


### 기타 HTTP 헤더

다음은 요청 및 응답 모두에서 사용될 수 있는 기타 중요한 HTTP 헤더입니다:

1. **Content-Encoding**: 본문이 어떤 방식으로 인코딩되었는지를 지정합니다.
   ```
   Content-Encoding: gzip
   ```

2. **Content-Language**: 본문의 언어를 지정합니다.
   ```
   Content-Language: en-US
   ```

3. **Content-Location**: 리소스의 대체 위치를 지정합니다.
   ```
   Content-Location: /documents/doc123
   ```

4. **Transfer-Encoding**: 본문이 어떤 방식으로 전송되었는지를 지정합니다.
   ```
   Transfer-Encoding: chunked
   ```

5. **ETag**: 리소스의 고유한 식별자를 제공하여 캐싱을 지원합니다.
   ```
   ETag: "12345abcde"
   ```

6. **Vary**: 캐시된 응답을 제공할 때 어떤 요청 헤더를 고려해야 하는지를 지정합니다.
   ```
   Vary: Accept-Encoding
   ```

 

 

### 예시를 통한 HTTP 헤더의 사용

#### 요청 예시:
클라이언트가 특정 웹 페이지를 요청하는 경우의 HTTP 요청 메시지는 다음과 같습니다:

 


```
GET /index.html HTTP/1.1
Host: http://www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
```

#### 응답 예시:
서버가 요청에 응답하는 경우의 HTTP 응답 메시지는 다음과 같습니다:
```
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 342
Server: Apache/2.4.41 (Ubuntu)
Cache-Control: no-cache, no-store, must-revalidate
Expires: Wed, 21 Oct 2021 07:28:00 GMT
Content-Encoding: gzip
```

### 결론

HTTP 헤더는 클라이언트와 서버 간의 HTTP 요청 및 응답에 대한 추가 정보를 전달하는 데 중요한 역할을 합니다. 헤더는 요청 헤더와 응답 헤더로 나뉘며, 각 헤더는 메시지의 특성과 행동을 정의합니다. 주요 헤더 필드로는 Host, User-Agent, Accept, Content-Type, Content-Length 등이 있으며, 이러한 헤더는 웹 브라우징, API 통신, 데이터 전송 등 다양한 상황에서 사용됩니다. HTTP 헤더의 올바른 사용은 웹 애플리케이션의 성능, 보안, 사용자 경험에 큰 영향을 미칠 수 있습니다. 따라서 HTTP 헤더를 이해하고 적절히 사용하는 것은 웹 개발자와 네트워크 엔지니어에게 중요한 기술입니다.

 

아래는 제가 봤을때 깔끔하게 설명되어 있는 타 블로그 글입니다. 참고하면 더욱 좋을 것 같습니다.

https://jeongzero.oopy.io/8082c06c-352a-44c2-8f07-e9fd68b99361

 

http 헤더 종류 및 의미

HTTP 프로토콜

jeongzero.oopy.io

 

 

반응형