제 사이트에서 Onebox 미리보기가 작동하지 않습니다

필요한 <meta> OpenGraph 태그를 추가한 사이트가 있는데, Onebox 미리보기가 표시되지 않습니다. OpenGraph 유효성 검사를 통과하므로 마크업 문제일 가능성은 낮다고 생각합니다.

(신규 사용자라 유효성 검사기 링크를 게시할 수 없습니다)

서버 측에서 Discourse 로봇이 실제로 페이지를 수신하고 있음을 확인할 수 있습니다:

User-Agent: 'Discourse Forum Onebox v3.3.0.beta1-dev'
IP Address: 2602:fd3f:3:204:0:242:ac11:2d

하지만 링크가 여전히 표시되지 않습니다:

이 스레드에 따르면 HEAD 요청에 대해 505 HTTP Version Not Supported를 반환하기 때문에 문제가 발생했을 수 있다고 생각했습니다. 그래서 서버를 패치하여 HEAD 메서드에 대해 형식적인 200 OK 응답을 반환하도록 했습니다:

> HEAD / HTTP/1.1
> Host: swiftinit.org
> User-Agent: curl/7.81.0
> Accept: */*
> 

< HTTP/1.1 200 OK
< host: swiftinit.org
< access-control-allow-origin: *
< content-length: 0
< content-type: text/html; charset=utf-8
< 

하지만 여전히 작동하지 않습니다.

안녕하세요, 환영합니다 :wave:

서버에서 요청을 차단하지 않는지 확인해 주시겠어요? 제가 확인한 바로는, Discourse fetch 응답을 살펴보면 400이라는 오류 코드가 반환되고 있습니다.

아, 알겠습니다. HEAD 요청을 GET 요청과 동일하게 처리하도록 사이트를 재구성했습니다.

사이트에는 보안 정책이 있으며, 클라이언트가 "Discourse Forum Onebox" 문자열로 시작하는 User-Agent 문자열과 Accept-Language: * 헤더를 보내지 않으면 400을 반환합니다. 다음 설정으로 curl을 사용하면 필터를 통과할 수 있습니다:

$ curl -v -I --http1.1 \
    -A 'Discourse Forum Onebox v3.3.0.beta1-dev' \
    -H 'Accept-Language: *' \
    https://swiftinit.org -o /dev/null
> HEAD / HTTP/1.1
> Host: swiftinit.org
> User-Agent: Discourse Forum Onebox v3.3.0.beta1-dev
> Accept: */*
> Accept-Language: *
> 

< HTTP/1.1 200 OK
< host: swiftinit.org
< link: <https://swiftinit.org/>; rel="canonical"
< etag: "8898806577480f6f7e5241ff270a9201"
< access-control-allow-origin: *
< content-length: 18933
< content-type: text/html; charset=utf-8
< 

Discourse의 fetch 응답을 볼 수 있는 방법이 있을까요?

지금까지 확인한 바로는 GET 요청이고, User-Agent 헤더만 전달되고 있습니다. 현재는 Bad Request가 반환되고 있습니다.

응답을 직접 확인할 수 있는 방법이 없는 것 같습니다. 그래서 코드에 디버그 로그를 직접 추가했습니다.

아, 그게 원인이었네요. Accept-Language 헤더에 필터가 걸려 있었는데, 봇이 모든 요청에 이 헤더를 보내지 않더라고요. 정말 감사합니다!