2008年10月09日
XRIのトレースを見る
XRI と XRDS
XRIはDNSとよく比較されます。XRIはリソースを指し示す識別子で、XRDS文書をたどって最終的なリソースにたどり着きます。
- XRI: Extensible Resource Identifier
- XRDS: Extensible Resource Descriptor Sequence
トレースを見る
XRIの仕組みを理解するため、どのように名前を解決していくかトレースしてくれるツールがあるのでやってみました。http://www.freexri.com/tools/XRITraceroute/ でi-nameを入力してトレースしてみます。 トレースを単純にするため、使用したi-nameは有料で取得した簡単なものを使っています。 登録はLinkSafeで行っています。
結果です
1: 0ms (=) https://equal.xri.net/ 2: 128ms ([登録した名前]) https://equal.xri.net/*[登録した名前] ref=null 3: 144ms http://linksafe-contact.ezibroker.net/contact/=[登録した名前]
最初にhttps://equal.xri.net/ にアクセスいます。https://equal.xri.net/にブラウザでアクセスするとXRDSが取得できます。
i-nameの先頭の文字が'@'だとhttps://at.xri.net/にアクセスします。
https://equal.xri.net/にアクセスすると次のXRDS文書が得られます。
<XRDS ref="xri://="> <XRD version="2.0"> <Query/> <Status code="100"/> <Expires>2008-08-07T08:28:39Z</Expires> <ProviderID>xri://=</ProviderID> <LocalID priority="10">!910C.4759.EEF5.FAC5</LocalID> <CanonicalID priority="10">=!910C.4759.EEF5.FAC5</CanonicalID> </XRD> </XRDS>次のトレース結果にあるように、i-nameをつけてアクセスして見ます。
https://equal.xri.net/*[登録した名前]
<XRDS ref="xri://=[登録した名前]"> <XRD version="2.0"> <Query>*[登録した名前]</Query> <Status code="100" /> <Expires>2008-08-07T08:31:38Z</Expires> <ProviderID>xri://=</ProviderID> <LocalID>![登録されているi-number]</LocalID> <CanonicalID>=![登録されているi-number]</CanonicalID> <Service> <ProviderID>xri://!!1003!103</ProviderID> <Type select="true">http://openid.net/signon/1.0</Type> <URI priority="1" append="none">https://linksafe.ezibroker.net/server/</URI> </Service> <Service priority="1"> <ProviderID>xri://!!1003!103</ProviderID> <Type select="true">xri://+i-service*(+forwarding)*($v*1.0)</Type> <Type match="null" /> <Path select="true">(+forwarding)</Path> <Path match="non-null" /> <MediaType match="default" /> <URI priority="1" append="qxri">http://linksafe-forward.ezibroker.net/forwarding/</URI> </Service> <Service> <ProviderID>xri://!!1003!103</ProviderID> <Type select="true">xri://$res*auth*($v*2.0)</Type> <MediaType>application/xrds+xml;trust=none</MediaType> <URI>http://resolve.ezibroker.net/resolve/=[登録した名前]/</URI> </Service> <Service> <ProviderID>xri://!!1003!103</ProviderID> <Type match="null" /> <Type select="true">xri://+i-service*(+contact)*($v*1.0)</Type> <Path select="true">(+contact)</Path> <Path match="null" /> <MediaType match="default" /> <URI priority="1" append="authority">http://linksafe-contact.ezibroker.net/contact/</URI> </Service> </XRD> </XRDS>i-nameが見つかり、対応しているサービスの一覧が記述されています。
次のサービスが見つかります。
- http://openid.net/signon/1.0
- xri://+i-service*(+forwarding)*($v*1.0)
- xri://$res*auth*($v*2.0)
- xri://+i-service*(+contact)*($v*1.0)
ちなみに[登録した名前]が存在しない場合は
<XRDS ref="xri://=[登録した名前]"> <XRD version="2.0"> <Query>*[登録した名前]</Query> <Status code="222">The subsegment does not exist</Status> <Expires>2008-08-07T08:36:39Z</Expires> <ProviderID>xri://=</ProviderID> </XRD> </XRDS>になります。
各サービスのURIにアクセスすることで、それぞれのサービスが受けられることが記述されています。 たとえば、contactのサービスのURIである、http://linksafe-contact.ezibroker.net/contact/=[登録した名前] にアクセスするとコンタクト用のhtmlのページが表示されます。
ほかに
http://resolve.ezibroker.net/resolve/=[登録した名前]/ では
<XRDS ref="xri://"> <XRD> <Query/> <Status code="210"> INVALID_INPUT: Expected URI path (ABNF): "/" comm-name "/" (*comm-iname-subseg / *comm-inum-subseg) </Status> <ServerStatus code="210"> INVALID_INPUT: Expected URI path (ABNF): "/" comm-name "/" (*comm-iname-subseg / *comm-inum-subseg) </ServerStatus> </XRD> </XRDS>https://linksafe.ezibroker.net/server/ では"This is an OpenID server endpoint."が表示されます。ここは、OpenIDのプロバイダのサーバになっています。
終わりに
トレースすることで、XRIがXRDSを使ってサービスを検索する方法を理解する助けになると思います。この例では、登録先のLinkSafeはサービスのプロバイダとしてだけ記述されていて、XRIのリゾルバとしては出てきません。
ここで、前回取得したフリーのi-nameでトレースすると、登録先がXRIのリゾルバとして記述されたXRDSが取得できます。興味のある方は試してみて下さい。
(セ)
klab_gijutsu2 at 19:59│Comments(0)│TrackBack(0)