HttpHeaderParser.java

package sprout.mvc.http.parser;

import sprout.beans.annotation.Component;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Component
public class HttpHeaderParser {
    private static final Pattern HEADER_PATTERN = Pattern.compile("^([^:]+):\\s*(.*)$");

    public Map<String, String> parse(String rawHeaders) {
        if (rawHeaders == null || rawHeaders.isBlank()) {
            return Collections.emptyMap();
        }

        Map<String, String> headers = new HashMap<>();
        String[] lines = rawHeaders.split("\r?\n"); // CRLF 또는 LF로 라인 분리

        for (String line : lines) {
            if (line.isBlank()) { // 빈 줄은 무시
                continue;
            }
            Matcher matcher = HEADER_PATTERN.matcher(line);
            if (matcher.matches()) {
                String key = matcher.group(1).trim();
                String value = matcher.group(2).trim();
                headers.put(key, value);
            } else {
                // 유효하지 않은 헤더 형식 (예: HTTP/1.1 200 OK 같은 요청 라인)
                // 이 부분은 RequestLineParser가 이미 처리했어야 함
                System.err.println("Warning: Invalid header format detected: " + line);
            }
        }
        return headers;
    }
}