2024-06-21
This commit is contained in:
114
Writerside/topics/Pingback.md
Normal file
114
Writerside/topics/Pingback.md
Normal file
@@ -0,0 +1,114 @@
|
||||
# Pingback
|
||||
|
||||
만일 CMS에 다음과 같은 글이 작성되었다고 가정해 봅시다.
|
||||
|
||||
```html
|
||||
<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 형식으로 메시지를 전송합니다. 메시지에는 `sourceURI`와 `targetURI`가 포함되어야 합니다.
|
||||
|
||||
```
|
||||
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
|
||||
Reference in New Issue
Block a user