Scarab 현장 테스트 #022 — Playwright 워커 응답 헤더 멈춤
Source: Dev.to
Target: microsoft/playwright
이 필드 테스트는 iframe 안에 로드된 워커 스크립트에 대해response.allHeaders()가 멈출 수 있는 Playwright Chromium 정지 현상을 목표로 했습니다.
문제의 형태는 명확합니다:
- 워커 스크립트가 iframe 안에 로드됩니다.
이는 심각한 API 경계 실패입니다. 응답 헤더를 요청하는 공개 API는 헤더를 반환하거나 오류를 반환해야 합니다. 정상적인 요청과 동일한 메타데이터 이벤트가 발생하지 않아 무한히 대기해서는 안 됩니다.
실패 경로는 워커‑메인‑스크립트 응답이 워커‑프레임 세션을 통해 완료되는 경우였습니다.
이 경로에서는 Playwright가 도착하지 않는 Chromium extra‑info 이벤트를 계속 기다리게 됩니다.
결과는 정지(hang)였습니다.
이는 일반적인 타임아웃 문제가 아니라 응답 메타데이터 완성 문제입니다.
워커‑프레임 경로가 일치하는 extra‑info 이벤트를 생성하지 않을 때, API는 임시(raw) 헤더를 사용해 응답을 완료할 충분한 정보를 가지고 있습니다.
여기서의 경계는 다음과 같습니다:- 정상 Chromium 요청 응답 메타데이터
- 워커‑메인‑스크립트 응답 메타데이터(워커‑프레임 세션)
일반 요청에 대해서는 Playwright가 기존의 extra‑info 동작을 계속 사용해야 합니다.
하지만 워커‑메인‑스크립트 iframe 경우, 도착하지 않는 extra‑info를 무한히 기다리는 것은 API 완료 계약을 위반합니다.
이번 수정은 정상 경로는 그대로 두고, 워커‑메인‑스크립트 경우에 한해 제한된 대체 로직을 추가합니다.
패치는 다음 파일의 Chromium 네트워크 응답 처리를 업데이트합니다:
packages/playwright-core/src/server/chromium/crNetworkManager.ts
이 변경으로 워커‑메인‑스크립트 응답이 워커‑프레임 세션을 통해 종료될 때, 일치하는 Chromium extra‑info 이벤트가 없으면 임시 raw 헤더를 사용해 헤더 해석을 완료할 수 있게 됩니다.
집중된 회귀 테스트가 다음에 추가되었습니다:
tests/page/workers.spec.ts
이 회귀 테스트는 iframe 안에 로드된 워커 스크립트에 대한response.allHeaders()를 검증합니다.
소스 수정이 없으면 회귀 테스트가 실패하고, 수정이 적용되면 통과합니다.
검증 명령:npm run ctest -- tests/page/workers.spec.ts --workers=1 --reporter=line npm run ctest -- tests/page/page-network-response.spec.ts --workers=1 --reporter=line npx eslint packages/playwright-core/src/server/chromium/crNetworkManager.ts tests/page/workers.spec.ts npm run tsc npm run lint git diff --check이는 좁은 Chromium 응답 메타데이터 경계에 대한 깔끔한 로컬 수리였습니다.
문제를 요약하면:
- 정상 요청은 기존 extra‑info 경로를 유지해야 함
- 워커‑메인‑스크립트 iframe 응답은 extra‑info가 도착하지 않을 때 무한히 대기하지 않아야 함
response.allHeaders()는 제한된 워커‑프레임 경우에 사용 가능한 임시 raw 헤더로 종료되어야 함
집중된 워커 커버리지는 실패와 수리를 입증합니다.
이 버그는 “Playwright가 정지한다”는 느낌을 주지만, 실제 수리는 더 작고 정확합니다: 워커‑프레임 경로에서 응답 메타데이터 완료가 소유권을 잃었습니다.
패치는 정상 응답 대기 동작을 바꾸지 않으면서 결정론적인 완료를 복원합니다.
이번 필드 테스트의 올바른 주장:
Scarab/SDS는 microsoft/playwright#39948에 대한 제한된 로컬 수리를 주도했으며, 여기서response.allHeaders()가 iframe 안에 로드된 워커 스크립트에서 정지할 수 있었습니다. 로컬 패치와 회귀 테스트가 성공적으로 검증되었고, 이번 수리는 정상 응답 메타데이터 처리를 그대로 유지하면서 워커‑프레임 경우에 결정론적인 완료를 복원합니다.
Disclosure: 이 필드 보고서는 저의 현장 테스트 노트, 패치 요약, 검증 결과 및 수리 기록을 AI 보조 편집으로 작성했습니다. 기술적 주장과 최종 문구는 공개 전에 검토되었습니다.