docs: retake staged evidence screenshots with indented output
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b708c8d503
commit
98874b0c6c
@@ -7,9 +7,12 @@
|
||||
|
||||
| 파일 | 내용 |
|
||||
|---|---|
|
||||
| `01-environment.txt` | 세 계층의 설정 스냅샷 |
|
||||
| `02-measurements.txt` | 정상 경로·대조 실험·위조 테스트·분배·리다이렉트 |
|
||||
| `03-browser-https-vs-app-http.png` | 브라우저와 앱의 인식 차이 (Playwright) |
|
||||
| `01-environment.txt` | 수정 전 세 계층의 설정 스냅샷 |
|
||||
| `02-measurements.txt` | 수정 전 측정 · 대조 실험 · 위조 테스트 · 분배 |
|
||||
| `stage-a-nginx-fixed.png` | A 단계 브라우저 화면 |
|
||||
| `stage-b-traefik-trusts.png` | B 단계 브라우저 화면 |
|
||||
| `stage-c-resolved.png` | C 단계 브라우저 화면 |
|
||||
| `04-after-fix.txt` | 수정 후 측정 · 위조 테스트 · 분배 |
|
||||
|
||||
---
|
||||
|
||||
@@ -65,25 +68,22 @@ nginx를 우회해 Traefik에 직접 요청하면서 올바른 헤더를 명시
|
||||
|
||||
## 브라우저 증거
|
||||
|
||||
`03-browser-https-vs-app-http.png`
|
||||
스크린샷은 모두 **브라우저가 `/api/echo` 응답을 렌더링한 실제 화면**이다.
|
||||
앱이 정렬된 JSON을 내보내도록 `spring.jackson.serialization.indent-output`을
|
||||
켜두었으므로 브라우저의 JSON 뷰어 설정과 무관하게 동일하게 읽힌다.
|
||||
|
||||
같은 요청을 두 관점에서 나란히 찍었다.
|
||||
세 장은 **같은 요청을 세 가지 설정 상태에서** 찍은 것이다.
|
||||
|
||||
| 브라우저 | 앱(파드) |
|
||||
|---|---|
|
||||
| `location.href` = `https://app1.hyeonworks.com/api/echo` | `requestUrl` = `http://app1.hyeonworks.com/api/echo` |
|
||||
| `protocol` = `https:` | `scheme` = `http` |
|
||||
| `isSecureContext` = `true` | `secure` = `false` |
|
||||
| 파일 | 켜진 스위치 | 화면에서 확인할 것 |
|
||||
|---|---|---|
|
||||
| `stage-a-nginx-fixed.png` | nginx 만 | `x-forwarded-proto: http` — Traefik 이 덮어씀 |
|
||||
| `stage-b-traefik-trusts.png` | nginx + Traefik | **헤더는 `https`인데 `scheme: http`** |
|
||||
| `stage-c-resolved.png` | 셋 다 | `scheme: https`, `secure: true` |
|
||||
|
||||
**브라우저는 TLS로 정상 접속했는데 앱은 평문 HTTP 요청으로 인식한다.**
|
||||
이 상태에서 세션 쿠키에는 `Secure`가 붙지 않고, OAuth2 `redirect_uri`는
|
||||
`http://`로 생성된다.
|
||||
|
||||
Playwright로 페이지에 접속한 뒤 `location` 값과 응답 JSON을 한 화면에
|
||||
렌더링해 촬영했다. 스크린샷은 뷰포트만 담기고 주소창은 담기지 않으므로,
|
||||
브라우저 측 값을 페이지 안으로 끌어와 대조가 한 장에 들어오게 했다.
|
||||
|
||||
---
|
||||
**`stage-b`가 가장 중요한 한 장이다.** `x-forwarded-proto: https`가 앱에
|
||||
도착해 있는데도 `scheme: http`, `secure: false`, `requestUrl: http://...`다.
|
||||
**헤더가 도착하는 것과 앱이 그것을 읽는 것은 다른 문제**임을 한 화면이
|
||||
보여준다.
|
||||
|
||||
## 정상으로 확인된 것
|
||||
|
||||
|
||||
Reference in New Issue
Block a user