TrackBack技术规范

  原文是TrackBack Technical Specification,此处是译文。

TrackBack 技术规范

  • 名称
  • 作者
  • 版本
  • 描述
  • 发送一个TrackBack Ping
  • 取回TrackBack Pings
  • TrackBack Ping URLs的自动发现
  • 例子
    • TrackBack实现例程
    • 自动发现的例程
  • 变动
    • 1.1 (2002年10月10日)
    • 1.0 (2002年8月28日)
  • 致谢

名称

mttrackback - TrackBack 技术规范


作者

Benjamin and Mena Trott, movabletype.org


版本

1.1


描述

本文描述了TrackBack, 一个点对点通信和网站间互相通告的框架. TrackBack的中心思想是TrackBack ping的概念, 从本质上讲,TrackBack ping是一个请求,通告“资源A与资源B相关,或有链接到资源B.” 一个TrackBack “资源” 用一个TrackBack Ping URL表示, 这是一个标准的URI.

利用TrackBack,站点间可以互相通告相关的资源. 例如,如果博客(weblogger)甲希望通知博客乙他写了一些有趣的/相关的/骇人听闻的文字,甲发送一个TrackBack ping给乙。这完成了两件事:

  1. 乙能自动列出那些引用他的某篇文章的网站,到他网站的访问者能读到网络上所有与此文相关的文章,包括甲的文章。
  2. ping在他的文章和你的文章间提供了一种稳固的、直接的链接,而不是那种依赖于外部行为(某人点击那个连接)的非直接连接(如反向连接referrer)。


发送一个TrackBack Ping

TrackBack使用REST(Representational State Transfer,http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)模式工作, 请求通过标准的HTTP调用传送。要发送一个TrackBack ping, 客户端向服务器端发送一个标准的HTTP请求,然后接收一个简单XML格式的应答(详见下述).

在TrackBack系统中,接收TrackBack pings的URL叫TrackBack Ping URL.一个典型的TrackBack Ping URL如http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.foo.com/mt-tb.cgi/5, 其中5是TrackBack ID. 服务器端可以用任何有意义的格式来定义TrackBack Ping URL;客户端不应该只限于特定的格式.

为了发送一个ping, 客户端发送一个POST格式的HTTP请求到TrackBack Ping URL. 请求的内容的content type应是application/x-www-form-urlencoded. 例如, 到http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.foo.com/mt-tb.cgi/5 的ping请求可能看起来象:

POST http://www.foo.com/mt-tb.cgi/5
Content-Type: application/x-www-form-urlencoded
title=Foo+Bar&url=http://www.bar.com/&excerpt=My+Excerpt&blog_name=Foo

注意: 在旧版本的TrackBack规范中,ping是用GET格式的HTTP请求发送的. 这种方式将不再支持; 2003年1月发布的Movable Type系统将会去掉对GET方式的支持。.

可能的参数包括:

在Movable Type系统中, 在上述的参数中只有 url 是必须的. 如果 title 没有提供,, url 的值将被用作标题.

对上述请求的应答信息,以XML格式编排,从而能实现应用层的错误检查。(HTTP层的错误将会这样返回--例如,如果TrackBack URL 所指的资源在服务器上已经不存在,状态码404 将会返回).

一个成功的ping将会返如下应答:

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>

一个失败的ping将会返如下应答:

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>The error message</message>
</response>

当然,应用程序应该允许将来根据需要增加字段,但应答的 XML 结构保持不变.


取回TrackBack Pings

要取回某个特定TrackBack Ping URL收到的ping,向它发一个GET格式的HTTP请求,请求字符串(query string)是 ?__mode=rss. 在规范的将来修订中,--一旦从POST转换到GET的过渡期结束--这将非常简单,向TrackBack Ping URL发送一个GET请求,将返回一列ping.

一个GET请求样例如下::

GET http://192.168.1.103/mt/mt-tb.cgi/3?__mode=rss

对此请求的应答,要么返回如上所述的错误信息,要么返回一列用RSS规范格式标志的TrackBack pings, 整个应答内容的覆巢无根元素是 <response> .

例如:

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
<rss version="0.91"><channel>
<title>TrackBack Test</title>
<link>http://this.is/the/trackback/item/link/</link>
<description>Description of the TrackBack item</description>
<language>en-us</language>
<item>
<title>TrackBack Demo</title>
<link>http://this.is/the/permalink/</link>
<description>Excerpt</description>
</item>
</channel>
</rss></response>

在标签<rss></rss> 之间的部分,都是真实的RSS数据; 剩余的部分都是应答内容的包装,处理时可以忽略.


TrackBack Ping URLs的自动发现

TrackBack客户端需要一种方法,来确实一个特定的URL或blog文章的TrackBack Ping URL. 服务器在生成页面时应内嵌RDF; RDF 描述关于该文章的元数据,允许客户端自动发现TrackBack Ping URL.

RDF样例如下::

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Descriptionrdf:about="http://www.foo.com/archive.html#foo"dc:identifer="http://www.foo.com/archive.html#foo"dc:title="Foo Bar"trackback:ping="http://www.foo.com/tb.cgi/5" />
</rdf:RDF>

注意: 由目前的检查器将嵌入XHTML页面的RDF信息视为不合规范,要通过检查需要将上述的RDF信息用注释符括起来:

<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
...
</rdf:RDF>
-->

这不是一个完美的解决方案,但是作为一个临时的应对措施它可正常工作.

其中的dc: 元素是标准的Dublin Core 元素; trackback:ping元素来自RSS 1.0/2.0的TrackBack模块,参见http://www.infomall.cn/cgi-bin/mallgate/20040514/http://madskills.com/public/xml/rss/module/trackback/.

给定一个URL my_url, 客户按下列步聚来寻找TrackBack Ping URL:

  1. 发送GET格式的HTTP请求,取回 my_url对应的页面的内容.
  2. 扫描页面内容,查找内嵌的RDF. 页面中可能嵌有多处RDF--客户端要找到 dc:identifier等于my_url的那块RDF信息.
  3. 从RDF块中抽取trackback:ping值,这就是TrackBack Ping URL.

客户端一旦确实了TrackBack Ping URL, 它就可以发送TrackBack ping了 (参见 发送 TrackBack Ping).

自动发现的代码样例参见 例子.


例子

TrackBack实现样例

为帮助那些有远见的开发人员在他们的系统中实现 TrackBack , 我们发布了一个TrackBack的独立的实现,它不依赖于Movable Type系统. 它可接收通过HTTP请求发送来的ping, 将ping存放在本地的文件系统中, 且可以返回某个特定TrackBack项(文章)的一列RDF格式的ping. 如果你要求,它还可以静态地产生 RSS文件. 例如,要将最近的15个ping列在工具条,这项功能就会泒上用场。

这个独立的TrackBack实现可从http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.movabletype.org/downloads/tb-standalone.tar.gz下载.

它的发行遵循 Artistic License. Artistic License条款的描述在 http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.perl.com/language/misc/Artistic.html.

它的安装和使用指令说明在http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.movabletype.org/docs/tb-standalone.html.

自动发现的代码样例

use LWP::UserAgent;
sub discover_tb {my $url = shift;my $ua = LWP::UserAgent->new;$ua->agent('TrackBack/1.0');  $ua->parse_head(0);   ## So we don't need HTML::HeadParser$ua->timeout(15);## 1. Send a GET request to retrieve the page contents.my $req = HTTP::Request->new(GET => $url);my $res = $ua->request($req);return unless $res->is_success;## 2. Scan te page contents for embedded RDF.my $c = $res->content;(my $url_no_anchor = $url) =~ s/#.*$//;my $item;while ($c =~ m!(<rdf:RDF.*?</rdf:RDF>)!sg) {my $rdf = $1;my($perm_url) = $rdf =~ m!dc:identifier="([^"]+)"!;  next unless $perm_url eq $url || $perm_url eq $url_no_anchor;## 3. Extract the trackback:ping value from the RDF.## We look for 'trackback:ping', but fall back to 'about'if ($rdf =~ m!trackback:ping="([^"]+)"!) {return $1;} elsif ($rdf =~ m!about="([^"]+)"!) {return $1;}}
}

这段Perl定义了一个过程 discover_tb. 给定一个 URL, 它会试图找到与此URL相对应的TrackBack Ping URL. 如果找到了,它会返回 TrackBack Ping URL; 否则返回 undef.


变动

1.1 (2002年10月10日)

  • 在此版本中,TrackBack pings 的发送用 POST 格式的HTTP请求代替 GET格式的请求.旧版本的GET方式将不在支持,MT中从2003年1月起也不再提供对GET方式的支持。
  • 在RDF中,现在TrackBack Ping URL应在trackback:ping 元素中保存, 而不是原先的 rdf:about元素.
  • 修改了 TrackBack Ping URL的样例的格式,用 PATH_INFO 代替了请求串(query string).
  • 内嵌的供自动发现使用的RDF不再导致页面检查时出错。
  • 增加了自动发现的样例代码.

1.0 (2002年8月28日)

规范首次发布.


致谢

感谢Paul Prescod和其他朋友,他们的指导让TrackBack更符合REST.


Copyright © 2001, 2002 Ben Trott and Mena Trott. All Rights Reserved. Posted by Hilton at November 7, 2003 11:28 AM | TrackBack
Comments

非常感谢你的指点,我在你的http://www.infomall.cn/cgi-bin/mallgate/20040514/http://hedong.3322.org/archives/000629.html上作了个测试,你可以把它删除。

Posted by: zcw at May 15, 2004 11:23 AM

谢谢你的文章,受益多多

Posted by: 出境旅游 at April 7, 2004 03:46 PM

Hi Chergen,
  我用的blog引用你说这个blog的“实验室成员个人blog大爆发”,成功了(也麻烦你将它删除吧),也就是说它是可以接收trackback的。
  是不是系统不稳定,你再试一下?

Hilton

Posted by: Hilton at March 4, 2004 07:24 PM

在Blog服务器http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.etc.edu.cn/blog/(Moveable Type) 中的Blog中,发送引用通告时会显示出错了(实际上已经发送出去,目的地能够接收到),但是它本身不能收到其他服务器发送过来的引用通告!请问这是什么原因,以及怎么解决。
希望能得到你的解答!谢谢!

Posted by: Chergen at March 4, 2004 07:06 PM

看的非常犀利糊涂,不知道在程序里如何实现

Posted by: kimjooy at November 14, 2003 09:55 AM

看了你的这两篇教材,开始多少对trackback有些了解了!
谢谢你的共享!

Posted by: tsingove at November 13, 2003 01:14 PM

  从这个规范的定义来看,trackback系统是在两个支持tb的两个web服务器之间互相传递信息的一套机制。传递的信息有两类:
  一是引用信息,以ping发送,数据包中可以含有 title、excerpt、url、blog_name等内容,其中只有url信息是必须的。这类信息,主要是想告诉对方,我这儿有一篇什么样的文章(如标题为何,摘要是何,URL是何等)引用了你的哪一篇文章(POST信息到的目标URL,已经指定了是哪篇文章了)。
  另一类,是从某个站点取回这个站点的某篇文章收到的所有的引用。有了这个功能,你就可以找到所有与你兴趣相投的文章了(只少它们都引用了这篇文章)。

  至于当你收到某人发来的ping时,如何处理,要不要显示,显示哪些内容,要不要分类,要不要计数,则是个人的自由,规则没有作规定。
  不过有一点,就是没有必要分析referer,一是因为这个ping包中本身就有url信息,二是这个请求是web服务器发出的,请求头里可能没有referer信息。

  还有一点,就是从规范中可知,trackback系统中,每篇文章有两个URI,一个正常的可以访问页面的URL,另一个用来接收ping的URL(即所谓trackback ping url),至于后一种URL如何设计,规范也没作规定,只要这个URL中的信息能区别出是那篇文章,即可。

  以上是我的理解,供参考。

Posted by: Hilton at November 9, 2003 11:57 AM

TRACK BACK 系统:是不是就是真对每篇文章(URL)设置独立的计数器,并且GROUP BY REFERER的域名?

TrackBack 技术规范相关推荐

  1. 可疑文件_【国家标准】印刷文件鉴定技术规范点阵式打印文件的同机鉴定

    印刷文件鉴定技术规范(GB/T 37232-2018) 总则 印刷文件同机(同版)鉴定的受理程序.送检材料的标识.检验鉴定程序.送检材料的流转程序及结果报告程序应按GB/T 37234-2018第4章 ...

  2. J2EE的13种核心技术规范

    J2EE主要用于创建可扩展的企业应用,包括13种核心技术规范: 1. JDBC(Java Database Connectivity,Java数据库连接) JDBC以一种统一的方式对各种各样的数据库进 ...

  3. 关于博客园的TrackBack功能

    博客园的TrackBack功能已经重新开通.      TrackBack功能分为:发送TrackBack与接收TrackBack.      发送TrackBack:      当你添加或编辑随笔时 ...

  4. wp trackback.php,WordPress工作原理

    WordPress是一个单入口的文件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的.这种做法的好处是显而易见的,这样URL更好看,不必为每一个url ...

  5. 机动车号牌图像自动识别技术规范

    前 言. III 1 范围. 1 2 规范性引用文件. 1 3术语和定义. 1 4 技术要求. 1 5 接口函数. 2 6 信息交换格式. 3 前 言 本标准的全部技术内容为强制性. 本标准由公安部交 ...

  6. trackback (引用通告) 说明

    trackback (引用通告) trackback是现在WEB2.0的产物,BLOG成为WEB2.0的关键包括TRACKBACK的功能,原理如下: 在自己的空间(不管你在哪里建立了自己的BLOG或S ...

  7. 移动智能家庭终端技术规范学习总结

    移动对家庭组网AP设备要求的标准:技术规范.Andlink接口规范.测试规范. 技术规范是最先被制定出来的标准,也是解读这套标准的钥匙. 此规范的制定是由移动先制定了初版,然后召集各个芯片厂商.设备厂 ...

  8. 系统试运行报告是谁写的_最新标准:水污染源在线监测系统(CODCr、NH3N 等)安装技术规范(1)...

    此次标准规定了水污染源在线监测系统的组成部分,水污染源排放口.流量监测单元.监测站房.水质自动采样单元及数据控制单元的建设要求,流量计.水质自动采样器及水质自   动分析仪的安装要求,以及水污染源在线 ...

  9. 优化DOTTEXT之三:完善Trackback

    TRACKBACK是BLOG的一项重要功能,最近在到一些文章说TRACKBACK快要死了.我觉得TRACKBACK的最大障碍是标准问题.很多BLOG SITE并没有遵守TRACKBACK的标准,(标准 ...

最新文章

  1. 第一届中国三维视觉大会China3DV论文展示
  2. 贝叶斯分类器的matlab实现_贝叶斯实验
  3. 哪些技能面试经常被问,但实际开发很少用上?
  4. 什么时候出python4_什么?Python4要来了?快来看看Python之父怎么说
  5. 用脚本实现FTP的上传和下载
  6. 苹果macPython语言开发环境:PyCharm pro
  7. 基于AVR-BootLoader,通过霜蝉远程串口可实现单片机的远程升级
  8. spring启动简析
  9. ubuntu网速慢的解决
  10. Unity学习:瓦片地图
  11. Vmware Vsphere HA创建集群步骤
  12. 安装域、对域进行管理
  13. 视频去水印的Python代码
  14. .Net Core 3.0 控制台 WebAPI 开发 基础环境搭建.
  15. arm64汇编adrp指令作用和使用举例
  16. 西门子1500PLC添加伺服电机
  17. java系列之J2ME的移动支付系统的设计与实现
  18. 20190917练习题总结——选择题
  19. 软件自动化测试简介,1.1 自动化测试简介
  20. 汇编语言程序的调试与运行

热门文章

  1. Mysql 默认约束 now_MYSQL中怎样设列的默认值为Now()的介绍
  2. ES6之let能替代var吗?
  3. yum php mysql5.5_CentOS 5.5使用yum来安装LAMP(php运行环境)
  4. 代理模式 委派模式 策略模式_设计模式 - 委派模式
  5. android里build报错怎么办,Android Studio 当build时候出错解决办法
  6. 单例模式访问mysql设计类图_利用单例模式设计数据库连接Model类
  7. GitHub改为token验证后,如何提交代码?
  8. Android的ListFragment和Fragment的使用
  9. mysql独立开发_nacos的mysql独立部署
  10. c语言程序年月日怎么编,C语言程序设计: 输入年月日 然后输出是星期几