Skip to content

og:image 의 http 주소를 버리지 않고 https 로 올린다 - #49

Merged
m-a-king merged 1 commit into
mainfrom
fix/image-url-scheme
Aug 23, 2026
Merged

og:image 의 http 주소를 버리지 않고 https 로 올린다#49
m-a-king merged 1 commit into
mainfrom
fix/image-url-scheme

Conversation

@m-a-king

Copy link
Copy Markdown
Collaborator

Situation

  • prod 에서 postarchivefaction 상품 등록이 이미지만 빠진 INCOMPLETE 로 떨어졌다(item.parse.result item=1967 result=incomplete missing=imageUrl).
  • 그런데 og:image 는 HTML 에 있었다. 못 찾은 게 아니라 normalizeImageUrlhttps:// 로 시작하지 않는다는 이유로 조용히 버린 것이었다.
<meta property="og:image" content="http://postarchivefaction.com/cdn/shop/files/F26NewClassicJacket_Archive_CDCC1.jpg?v=...">
  • 같은 주소가 https 로는 멀쩡하다(실측).
요청 결과
http://... 301 (https 로 넘김)
https://... 200 image/jpeg 1.1MB

Task

  • 스킴만 다를 뿐 멀쩡한 이미지를 살린다. 위험한 스킴은 계속 거부한다.

Action

입력 이전 이후
https://host/a.jpg 그대로 그대로
http://host/a.jpg 버림 https://host/a.jpg 로 승격
//host/a.jpg (프로토콜 상대) 버림 https://host/a.jpg 로 승격
javascript: · data: · file: 버림 버림

가드 자체는 맞았다. <img src> 로 흘러가는 값이라 javascript: 같은 걸 막아야 한다. 뭉툭했던 게 문제다 — 위험한 값과 스킴만 올리면 되는 값을 한 덩어리로 취급했다.

http 를 그대로 저장하지 않는 이유

선택지가 아니다. 클라이언트가 https 라 브라우저가 mixed content 로 막아 저장해도 안 보인다.

승격이 실패할 위험은 있지만 손해가 없다. 올린 주소가 안 되면 이미지가 안 뜨는데, 버리면 애초에 이미지가 없다. 더 나빠질 수 없는 교환이다.

Result

  • 승격 체인이 통째로 헛돌던 것이 사라진다. 값이 처음부터 있었는데 버려진 탓에 이 비용을 다 치렀다.
정적 fetch → og:image(http) 버림 → 필드 누락
  → LLM 호출 (86,253 토큰)
  → 브라우저 렌더 (3.3초)
  → LLM 호출 (11,443 토큰)
  → 같은 http 값 또 버림 → INCOMPLETE
  • prod 로그에 남은 INCOMPLETE 4건 중 2건이 missing=imageUrl 이다. 컨테이너 로그 보존 범위 안의 숫자라 전체 규모는 아니고, Shopify 계열이 og:image 에 http 를 적는 경우가 있어 이 몰 하나의 문제가 아닐 수 있다.
  • 356 tests 통과.

남은 것

  • 상대 경로(/cdn/shop/a.jpg)는 여전히 버린다. 살리려면 페이지 URL 로 해석해야 하는데(fromExtractedlink 를 이미 받으므로 가능하다) 이번 범위 밖으로 뒀다.
  • 승격한 주소가 실제로 되는지 확인하지 않는다. 확인하면 정확하지만 추출마다 왕복이 하나 늘고, 안 해도 지금보다 나빠지지 않는다.

연관 이슈

- prod 에서 postarchivefaction 상품이 이미지만 빠진 INCOMPLETE 로 떨어졌는데, og:image 가 HTML 에 있었다. 못 찾은 게 아니라 normalizeImageUrl 이 https 로 시작하지 않는다는 이유로 조용히 버린 것이었다
- 같은 주소가 https 로는 200 image/jpeg 로 정상이다(실측, http 는 301 로 https 에 넘긴다). 사이트가 og:image 에 http 를 적어뒀을 뿐 이미지는 멀쩡했다
- 값이 처음부터 있었는데 버려진 탓에 승격 체인이 통째로 헛돌았다: LLM 86k 토큰 -> 브라우저 렌더 3.3초 -> LLM 11k 토큰 -> 같은 http 값을 또 버림 -> INCOMPLETE
- http 그대로 저장하는 선택지는 없다. 클라이언트가 https 라 브라우저가 mixed content 로 막아 저장해도 안 보인다. 승격이 실패하면 이미지가 안 뜨는데, 버리면 애초에 없으므로 더 나빠지지 않는다
- 프로토콜 상대(//host/path)도 같은 성격이라 함께 살린다. 스킴만 없을 뿐 멀쩡한 주소다
- javascript:·data:·file: 은 그대로 거부한다. 가드가 원래 막으려던 것이 이쪽이고, 스킴을 갈아끼워 살릴 수 있는 값도 아니다. 뭉툭했던 건 위험한 값과 고쳐 쓸 수 있는 값을 한 덩어리로 취급한 것이었다
@m-a-king m-a-king added the fix 외부 가시적 결함 수정 label Aug 23, 2026
@m-a-king m-a-king self-assigned this Aug 23, 2026
@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c998f983-4ebf-40ec-a7fb-3d6fc221de46


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@m-a-king
m-a-king merged commit eb2a49f into main Aug 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix 외부 가시적 결함 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant