Files
html-examples/Writerside/topics/Pingback.md
2024-06-21 14:14:35 +09:00

2.3 KiB

Pingback

만일 CMS에 다음과 같은 글이 작성되었다고 가정해 봅시다.

<article>
    <p>
        <a href="http://example.com/some-post">여기</a> 완전 좋아요.
    </p>
</article>

엔드포인트 찾기

CMS 소프트웨어에서는 작성된 글에서 외부 링크들을 추출해서 각각의 링크마다 HTTP HEAD/GET으로 조회를 합니다. 그러면 다음과 유사한 응답을 받을 겁니다.

GET /some-post HTTP/1.1
Host: example.com

------
HTTP/1.1 200 OK
X-Pingback: http://example.com/pingback

<html><head> ...
<link href="http://example.com/pingback" rel="pingback" /> ...

HTTP 헤더 혹은 link 태그에서 웹 멘션 주소를 찾을 수 있습니다.

서버 엔드포인트로 메시지 전송

CMS에서는 대상 서버의 엔드 포인트로 XML-RPC 형식으로 메시지를 전송합니다. 메시지에는 sourceURItargetURI가 포함되어야 합니다.

POST /http://example.com/webmention HTTP/1.1
Host: example.com
Content-Type: text/xml

<?xml version="1.0">
<methodCall>
    <methodName>doSomething</methodName>
    <params>
        <param>
            <value><string>소스URI</string></value>
        </param>
        <param>
            <value><string>타겟URI</string></value>
        </param>
    </params>
</methodCall>

------
HTTP/1.1 200 OK

XML-RPC 오류 코드

  • 0

    일반적인 오류

  • 0x0010

    소스 URI가 없음

  • 0x0011

    소스 URI가 타겟 URI를 포함하고 있지 않음

  • 0x0020

    타겟 URI가 없음

  • 0x0021

    타겟 URI에 핑백을 사용할 수 없음

  • 0x0030

    이미 핑백이 등록 되었음

  • 0x0031

    접근 거부

  • 0x0032

    서버와 통신할 수 없음

한편, 메시지를 받은 서버에서는

전달 받은 데이터를 작업 큐에 등록하고, 작업 진행 내역을 보여주는 포에지 주소를 포함하는 201 또는 202를 응답합니다.

HTTP/1.1 201 Created
Location: http://aaronpk.example/webmention/DEhB9Jme
HTTP/1.1 202 Accepted

검증에 실패한 경우에는 400 Bad Request를 응답합니다.

검증

  • source와 target이 모두 유효한 Url인지 여부 확인
  • source와 target이 동일하면 거부

https://en.wikipedia.org/wiki/Linkback

http://www.hixie.ch/specs/pingback/pingback