Trackback Ping是由Moveable Type发明的规范,他们说Trackback是”a framework for peer-to-peer communication and notifications between web sites”。这里是他们的Trackback技术规范文档: http://www.movabletype.org/docs/mttrackback.html 。
举个例子来说明一下。比如我在鱼头的Blog中看了一篇我感兴趣的文章,对这篇文章我自己有一些看法,如果按照传统BBS的做法,我需要在鱼头这篇文章下发表自己的评论,但这样做的话我的文字只能存在于鱼头的网站上,我无法再维护自己的这篇评论。另一个情况是我在自己的Blog中也在写一篇相类似的文章,我希望鱼头也能来看一看我的这篇,传统BBS的习惯还是得到鱼头的文章下发一篇回复,把我的URL贴过去。
但有了Trackback Ping,我们的Blog不再需要这样做。
Blog跟BBS有点重要的不同,Blog是一种个人创作,用Blog来发表自己的东西,保存自己的东西,即使是对他人Blog文章的评论也要在自己的Blog中永久保留下来。通过Trackbak,我就可以在自己的Blog中发表文章,同时把自己这篇文章的URL地址Ping到鱼头的那篇文章上去。这样,所有阅读鱼头文章的人也能通过Trackback顺藤摸瓜地来我的Blog看我的文章。
所以,当我们的Blog有了Trackback Ping功能,那么谁都可以通过Trackback Ping来发表意见和评论了。这样,多家Blog网站就通过相关话题而联接起来。各种评论在Internet上相互连接而织成一张大网。因此,可以说,Trackback创造出了Blog与BBS、Diary完全不同的文化,Blog的世界通过Trackback而变成真正的无限互连。
作为Blogger,让我们习惯于这样讨论问题和做评论吧:把内容写在自己的Blog里面,Trackback Ping到别人的Blog。这个概念是论坛模式里从来没有的,称为Remote Commenting。
如何在Blog中实现Trackback?
在有Trackback功能的Blog系统中,每篇Blog文章都有两个URL,一个是要访问这篇文章所使用的URL,另一个就是Trackback Ping URL(引用通告地址),它是用来接受来自其他Blog网站Trackback Ping的程序。当我发表文章的时候,想要通知鱼头的话,只需要把鱼头那篇文章的Trackback Ping URL贴到我这边文章中来,我提交文章时,系统就会按照这个URL发送一个Ping给鱼头的那篇文章。而鱼头则将在自己的文章下看到类似这样的一个引用通告:
标题: Joyhero的文章
来自: Joyhero的Blog
摘要: Joyhero的文章内容摘要…
地址: http://joyhero的文章地址
这个Trackback Ping是通过标准的HTTP协议从我的Blog发送到鱼头的Blog的,我的Blog发送一个POST格式的HTTP请求到鱼头那篇文章的Trackback Ping URL。这个请求的content type是application/x-www-form-URLencoded,它大概是这个样子的:
POST http://鱼头文章的TrackbackPingURL
Content-Type: application/x-www-form-URLencoded
title=Joyhero的文章&url=http://Joyhero的文章地址&excerpt=Joyhero的文章摘要&blog_name=Joyhero的Blog
早期版本的Trackback规范中,Ping是GET方式的HTTP请求,现在不再支持GET方式,只能用POST方式。参数包括:
title - 文章的标题
excerpt - 文章的摘要。在Movable Type系统中,如果摘录信息超过255个字符将会被截断为252个字符,并在后面增加…三个字符
url - 文章的永久连接。象其它永久连接一样,这个连接应可能准确地在页面中定位文章的入口,因有疑问时这个链接会用到
blog_name - 发表文章的blog的名称
在上述的参数中只有url是必须的。如果title没有提供,url的值将被用作标题。
当我的Blog发出这个Trackback Ping后,将接收一个简单的XML格式应答,如果Ping成功,那么应答的格式如下:
<?xml version=”1.0″ encoding=”iso-8859-1″?>
<response>
<error>0</error>
</response>
而失败应答的格式为:
<?xml version=”1.0″ encoding=”iso-8859-1″?>
<response>
<error>1</error>
<message>The error message</message>
</response>