마크다운 출력은 게시글의 렌더링된(“cooked”) HTML에서 생성되며, 확장된 링크와 처리된 포맷을 포함하여 독자가 보는 콘텐츠를 보존합니다. 인용, 원박스(onebox), 코드 블록, 투표, 접을 수 있는 섹션 등 Discourse 고유 요소는 마크다운으로 다시 변환됩니다. 주제 응답에는 메타데이터와 페이지네이션 링크가 포함되며, 변환된 게시글 본문은 콘텐츠 다이제스트를 사용하여 캐시되므로 편집 시 새로운 출력이 생성됩니다.
클라이언트는 .md URL을 통해 명시적으로 마크다운을 요청하거나 Accept: text/markdown 헤더를 전송할 수 있습니다. 협상(negotiation)은 품질 값(Quality values)을 존중하며, HTML 및 JSON보다 마크다운이 선호될 때 마크다운을 선택합니다. 명시적인 .md 요청은 해당 포맷을 유지합니다. 지원되는 HTML 페이지는 HTTP Link 헤더와 <link rel="alternate"> 요소를 통해 해당 마크다운 버전을 광고합니다.
한 가지 질문이 있습니다: Cloudflare 프록시를 사용하는 경우, 코어 기능과 그들의 변환 도구 사이에 충돌이 있는 것으로 보입니다. 질문은 다음과 같습니다. 프록시 뒤에서 사용 중이라면, 해당 기능이 구독자를 대상으로 하므로 헤더의 HTML에서 .md로의 변환을 차단하는지, 아니면 클라이언트 측에서 변환을 지원하므로 이를 무관하게 변환이 이루어지는지 궁금합니다.
Cloudflare 기능에 대해 잘 알고 있지는 않지만, 제가 파악한 바로는 서버에 도달하기 전에 Accept text/markdown 요청을 가로채 HTML을 변환한 후 이를 제공합니다. 따라서 Cloudflare를 사용하는 경우/시점에 해당 기능이 Discourse의 기능을 덮어쓰는 것으로 보입니다.
확실하지는 않지만, 가장 쉬운 방법은 라이브 사이트에서 테스트를 해서 메타가 출력하는 결과와 비교하는 것입니다. 포함된 콘텐츠에 차이가 있을 수 있습니다. Cloudflare의 기능을 사용하든 사용하지 않든 응답이 동일하다면, Discourse 코어가 반환하는 마크다운을 존중하고 있는 것입니다.
코어 팀은 discourse-post-event 블록에 대해, 투표, 인용, 원박스, 접이식 섹션과 동일한 방식으로 전용 마크다운 표현을 제공하는 것을 의도하고 있습니까? 기술적으로 CookedProcessor에 이를 추가하는 것은 충분히 실현 가능해 보입니다: div.discourse-post-event를 감지하고, 그 data-* 속성을 읽은 후, 범용 ReverseMarkdown 처리 전에 보존된 마크다운 블록으로 대체하면 됩니다.