HTTP Header로 데이터를 보내보자
HTTP 헤더를 통해서 클라이언트는 서버에 각종 데이터를 전송할 수 있다. 하지만 HTTP 헤더는 전송 규약의 일부이기 때문에 ASCII 기반의 매우 엄격한 형식을 따른다.
공식 규격: RFC 7230 - HTTP/1.1 메시지 형식
Header-Name: Header Value
- Header-Name: ASCII 문자, 숫자, 하이픈(-)만 가능
- Header-Value: ASCII의 visible character (0x20~0x7E)만 사용 가능
📌 HTTP Header에 포함될수 없는 문자들
- 제어 문자(\n, \r, \t, \0 등) : ASCII 코드 0~31 및 127
- 유니코드 문자(한글, 이모지 등) : ASCII 외의 확장 문자
- 공백 (헤더 값 중간은 가능, 키는 안됨)
- 콜론(:) : 키에는 불가, 키:값 구분자로만 가능
- 슬래시 /, 등 특수문자 : 값에는 가능하지만, 상황에 따라 제한됨
Header에 포함될 수 없는 문자열을 추가하는 경우
'System.InvalidOperationException: Header value contains invalid characters'
'System.Net.Http.HttpRequestException: 'Request headers must contain only ASCII characters.'
해당 에러가 발생한다.
X-Name: 홍길동 ← ❌ 유니코드 (한글)
X-Comment: Hello\nWorld ← ❌ 줄바꿈
X-Data: abc☺def ← ❌ 이모지/비ASCII 문자
안전하게 HTTP Header 쓰는 법
- ASCII 문자만 사용하기
- 값에 한글이나 특수문자를 꼭 넣어야한다면 Base64 인코딩 또는 URL-safe 변환
C# 예제 코드
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// 1. 전송할 값 (예: 사용자 이름, JSON 문자열 등)
string originalValue = "홍길동";
// 2. 문자열 → UTF-8 바이트 → Base64 인코딩
byte[] bytes = Encoding.UTF8.GetBytes(originalValue);
string base64Value = Convert.ToBase64String(bytes);
// 3. HttpClient 생성
using var client = new HttpClient();
// 4. HttpRequestMessage 생성
var request = new HttpRequestMessage(HttpMethod.Get, "https://example.com/api/data");
// 5. 커스텀 헤더에 Base64 인코딩된 값 추가
request.Headers.Add("X-Custom-Header", base64Value);
// 6. 요청 전송
HttpResponseMessage response = await client.SendAsync(request);
// 7. 결과 출력
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine("응답: " + responseBody);
}
}
string header = request.Headers["X-Custom-Header"];
byte[] bytes = Convert.FromBase64String(header);
string decoded = Encoding.UTF8.GetString(bytes);
함께 읽으면 좋은 글
64진수로 바꿔보자! Base64 인코딩
Base64 인코딩이란?인터넷 환경이나 암호 관련으로 공부하다 보면 Base64 인코딩과 만나게 될 것이다. Base64 인코딩이란 무엇인지? 그리고 왜 필요한지에 대해서 알아보자. Base64 인코딩이란, 8비트(b
jettstream.tistory.com
C# 컴퓨터가 문자를 표현하는 방법, 문자 인코딩
string에서 byte[]로 변환하기string 타입에서 ToCharArray() 함수를 통해서 바로 Char배열로 변환하는 함수는 존재하지만 ToByteArray() 함수는 존재하지 않는다. 그 이유는 무엇일까? 그 이유는 byte[]로 변환
jettstream.tistory.com
헤더 형식 규정
RFC 7230: Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "
datatracker.ietf.org
'프로그래밍' 카테고리의 다른 글
로커스트(Locust) @task vs tasks 비교해보자 (0) | 2025.04.09 |
---|---|
토큰으로 검증하자! JWT(JSON 웹 토큰) (0) | 2025.04.07 |
일단 호출하고 보자! 덕 타이핑(Duck Typing)이란? (0) | 2025.04.04 |
Python 코드로 테스트 가능한 로커스트(Locust) (0) | 2025.04.03 |
NginX와 SSL 인증서로 보안 연결 설정하기 (0) | 2025.03.30 |
댓글