크라우니브라우저 v2 HTTP스택 ↔ 로컬직통 통합
2026-05-27 | gateway.yaml 매핑을 브라우저 v2.1에 1차 통합. 메인 빌드 성공, 단위 검증 100%.
개요
크라우니브라우저 v2.1의 HTTP스택.한선에 로컬직통.한선을 import하여, gateway.yaml에 등록된 170 도메인을 브라우저가 자동으로 127.0.0.1:포트로 라우팅하도록 통합. Host 헤더는 원래 호스트 유지(서버 호스트 라우팅 보존).
무엇을 했는지
통합 지점
/Users/ef/CrownyBrowser/src/v2/HTTP스택.한선:
- import 추가 (line 31):
javascript 가져오기 "로컬직통.한선"
- 전역 매핑 (line 689 근처):
javascript 변수 _로컬직통매핑 = 로컬매핑로드()
_HTTP요청내부()URL파싱 직후 — 로컬 매핑이 있으면 연결 호스트/포트 교체:
javascript 변수 _연결호스트 = 호스트
변수 _연결포트 = 포트
변수 _로컬포트 = 로컬포트조회(_로컬직통매핑, 호스트)
만약 (_로컬포트 > 0) {
_연결호스트 = "127.0.0.1"
_연결포트 = _로컬포트
tls여부 = 거짓
}
- HSTS 우회 — 로컬직통 경로면 http 강제 허용:
javascript 만약 (_로컬포트 < 0 그리고 프로토콜 == "http" 그리고 HTTP_HSTS검사(호스트)) { ... }
- 연결 획득에 새 호스트/포트 사용:
javascript 변수 연결 = 연결획득(_전역연결풀, _연결호스트, _연결포트, tls여부)
검증 (크라우니브라우저 우선 — 피드백 규칙 준수)
| 단계 | 결과 |
|---|---|
| HTTP스택.한선 단독 컴파일 | 50,664 큐브, 0 에러 |
| 단위 테스트 (매핑 + 조회) | 170 매핑, docs=4100/main=7730/google=-1 모두 정확 |
크라우니브라우저 v2 메인 빌드 (크라우니브라우저v2.한선) | 972,612 큐브, 27MB TOAU, 0 새 충돌 |
| HTTP요청 실제 fetch | 라우팅 로직 동작, 단 crownyc VM 소켓 클라이언트 자체 이슈로 실제 응답 503 (소켓생성 -1) — 별개 작업 |
관련 파일
| 파일 | 변경 |
|---|---|
/Users/ef/CrownyBrowser/src/v2/HTTP스택.한선 | +18줄 (import + 매핑 변수 + 라우팅 블록 + HSTS 가드 + 연결 호출) |
/Users/ef/CrownyBrowser/src/v2/HTTP스택.한선.bak-20260527-lbv | 통합 전 백업 |
/Users/ef/CrownyOS/crownyc/libs/로컬직통.한선 | 이전 작업의 결과물, 변경 없음 |
잔여 이슈 / 다음 단계
crownyc VM 소켓 클라이언트 검증 별개 작업 필요
소켓생성()인자 없이 호출하면 -1 반환. 시그니처는소켓생성(domain=2, type=1)(AF_INET, STREAM).- HTTP스택의
연결획득()이 내부적으로 어떻게 소켓을 생성하는지 별도 검사 필요. - curl로 직접
http://127.0.0.1:4100/은 200 응답 — 서버는 정상. - 즉 통합 로직은 통과, VM 소켓 클라이언트 호출 시퀀스가 별도 작업.
Path A WebKit 래퍼와의 통합
native/crowny-browser.m은 WKWebView 기반. WKWebView 자체는 macOS 시스템 네트워크 스택 사용.- WKURLSchemeHandler 또는
WKWebsiteDataStore의 proxy 설정으로 로컬직통을 주입하는 별도 작업 필요. - 단기 우회:
/etc/hosts에 매핑 추가하거나,lbv 열기CLI를 Path A에서 호출.
사용자 트래픽 흐름
이번 통합으로 브라우저 v2 Path B가 활성화될 때:
사용자 입력 https://docs.crowny.org/foo
→ URL파싱
→ 로컬직통 조회 → 매핑 있음 → 호스트=127.0.0.1, 포트=4100
→ http://127.0.0.1:4100/foo 로 연결
→ Host 헤더: docs.crowny.org (원본 유지)
→ 응답
게이트웨이(8080/8443) 다운 상태에서도 즉시 동작. CRNS(한글 도메인)와 충돌 없음.