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)

