文章目录
1. 引言
本文档介绍了EPP中Internet域名映射,该映射使用的是XML 1.0和XML Schema [W3C.REC-xmlschema-1-20041028] 和 [W3C.REC-xmlschema-2-20041028]。
1.1 域名对象和主机对象的关系
主机对象的EPP映射在[RFC5732]中描述。本文档假设域名对象(domain name objects)
与从属(subordinate)
的主机名对象(host name objects)
具有上级关系。例如,域名“example.com”是主机名“ns1.example.com”的上级。不能保持这种关系的EPP操作(如对象转移)必须被显式禁止。
主机名对象可以在非父级域名对象的存储库(repository)
中创建。例如,可以在".example" 存储库中创建主机名"ns1.example.com" ,从而将".example" 中的域名授权(delegated)
给该主机。这种主机在本规范中称为“external” host
,因为主机的名称不属于用于授权的存储库的名称空间。
host 是 external 还是 internal,和该 host 以授权host身份存在的repository相关。internal host 是否是从属(subordinate)的,和repository中的域(damain)
相关。例如,主机ns1.example1.com是域example1.com的从属主机,但它不是域example2.com的从属主机。ns1.example1.com可以用作example2.com的名称服务器。在这种情况下,ns1.example1.com必须被视为一个internal主机,服从于控制同一存储库中下属主机上的操作的规则。
用于域授权(domain delegation)
的名称服务器主机(name server hosts)
可以作为现有主机对象(host objects)
的引用(references)
,或者是描述主机机器(host machine)
的域属性(damain attributes)
。服务器操作员(server operator)
必须始终如一地使用一个名称服务器规范表单。在EPP greeting 中声明支持主机对象的服务器操作员必须不允许使用域属性描述名称服务器主机机器(name server host machine)
。声明不支持主机对象的服务器操作员必须允许域属性描述名称服务器主机。当使用域属性描述名称服务器主机机器时,应该只有在需要生成DNS glue记录时才需要IP地址。
名称服务器是在<domain:ns>元素中指定的。此元素必须包含一个或多个<domain:hostObj>元素或一个或多个<domain:hostAttr>元素。一个<domain:hostObj>元素包含一个已知名称服务器主机对象的完全限定名。一个<domain:hostAttr>元素包含以下子元素:
- 一个<domain:hostName>元素,其中包含主机的完全限定名。
- 0个或多个可选<domain:hostAddr>元素,其中包含要与主机关联的IP地址。每个元素可以包含一个“ip”属性来标识ip地址格式。属性值“v4”表示IPv4地址格式。属性值“v6”用于说明IPv6地址格式。如果没有指定“ip”属性,则默认属性值为“v4”。IP地址语法要求在EPP主机映射[RFC5732]的2.5节中描述。
域example.com的示例主机对象名称服务器元素:
<domain:ns>
<domain:hostObj>ns1.example.net</domain:hostObj>
<domain:hostObj>ns2.example.net</domain:hostObj>
</domain:ns>
域example.com的主机属性名称服务器元素示例:
<domain:ns>
<domain:hostAttr>
<domain:hostName>ns1.example.net</domain:hostName>
<domain:hostAddr
ip="v4">192.0.2.2</domain:hostAddr>
<domain:hostAddr
ip="v6">1080:0:0:0:8:800:200C:417A</domain:hostAddr>
</domain:hostAttr>
<domain:hostAttr>
<domain:hostName>ns2.example.net</domain:hostName>
</domain:hostAttr>
</domain:ns>
2. 对象属性
一个EPP域对象具有的属性和对应值可由sponsoring客户端
或服务器(sever)
查看和修改。本节详细描述每种属性的类型。这里描述的属性值的形式语法可以在本文档的“形式语法”部分和适当的规范引用中找到。
2.1 域名和主机名
本文档中描述的域名和主机名语法必须符合[RFC0952]和[RFC1123]。在撰写本文时,RFC3490 [RFC3490]描述了使用特定ASCII名称标签表示非ASCII名称标签的标准。随着开发国际化域名标准的工作的进展,这些一致性需求可能会发生变化。服务器可以将允许的域名限制为特定的顶级域、二级域或服务器具有权威性的其他域。当这些名称存储在DNS zone中时,后面的点是隐式的,并且在交换主机名和域名时不能提供。
2.2 联系人和客户标识符
所有EPP联系人都由一个服务器唯一
标识符标识。联系标识符是具有指定最小长度、指定最大长度和指定格式的字符串。联系人标识符使用[RFC5730]中描述的“clIDType”客户机标识符语法。
2.3 状态值
域名对象
必须具有最少一个
关联的状态值。状态值只能由发起(sponsor)
域对象的客户机和对象所在的服务器设置。客户机可以使用EPP < update>命令更改域对象的状态。每个状态值可能都伴随着一串人类可读的文本,这些文本描述了应用于对象的状态的基本原理。
客户端绝不能更改服务器设置的状态值。服务器可以根据本地服务器策略更改或覆盖客户端设置的状态值。对象的状态可能由于客户机发起的转换命令或服务器操作符执行的操作而更改。
可以由客户机添加或删除的状态值以“client”作为前缀。可以由服务器添加或删除的相应状态值的前缀为“server”。不以“client”或“server”开头的状态值是服务器管理的(server-managed)
。
状态值描述:
-
clientDeleteProhibited, serverDeleteProhibited
阻止删除对象请求
-
clientHold, serverHold
禁止为对象发布DNS授权信息。
-
clientRenewProhibited, serverRenewProhibited
阻止续期对象请求
-
clientTransferProhibited, serverTransferProhibited
拒绝转移对象的请求
-
clientUpdateProhibited, serverUpdateProhibited
拒绝更新对象(除删除此状态外)的请求
-
inactive
授权信息未与对象关联。这是首次创建域对象时的默认状态,DNS委托没有关联的主机对象。当删除所有主机对象关联时,服务器也可以设置此状态。
-
ok
这是没有挂起操作或禁止的对象的正常状态值。此值由服务器在添加或删除其他状态值时设置和删除。
-
pendingCreate, pendingDelete, pendingRenew, pendingTransfer,pendingUpdate
已执行对象转换命令,但服务器尚未完成该操作。服务器操作员可以出于各种原因延迟操作的完成,比如允许人工检查或第三方操作。使用响应代码1001记录一个正在处理的转换命令,但是其请求的操作是挂起的。
当请求的操作完成时,必须删除pendingCreate、pendingDelete、pendingRenew、pendingTransfer或pendingUpdate状态值。必须使用服务消息通知所有涉及到事务的客户机,该操作已经完成,并且对象的状态已经更改。
“ok”状态不能与任何其他状态相结合。
“pendingDelete”状态不能与“clientdeleteforbidden”或“serverdeleteforbidden”状态相结合。
“pendingRenew”状态不能与“clientrenew”或“serverrenew forbidden”状态相结合。
“pendingTransfer”状态不能与“clienttransferforbidden”或“servertransferforbidden”状态相结合。
“pendingUpdate”状态不能与“clientupdateforbidden”或“serverupdateforbidden”状态相结合。
pendingCreate、pendingDelete、pendingRenew、pendingTransfer和pendingUpdate状态值不能相互组合。
可以使用其他未明确禁止的状态组合。
2.4 日期和时间
日期和时间属性值必须使用公历以通用协调时间(UTC)表示。使用[W3C中定义的大写字母“T”和“Z”字符的扩展日期-时间表单。必须使用REC-xmlschema-2-20041028]来表示日期-时间值,因为XML Schema不支持截断的日期-时间表单或小写的“T”和“Z”字符。
2.5 有效期
域名对象可以具有指定的有效期。如果服务器策略支持域对象有效期,则在创建域对象时定义有效期,可以通过EPP < renew>或< transfer>命令扩展有效期。作为服务器策略的问题,此规范没有定义在域对象的有效期届满时要采取的操作
。
有效期以年或月为单位,使用“unit”属性指定适当的单位。“unit”属性的有效值为“y”表示年份,“m”表示月份。最小允许值为1(1),最大允许值为99位小数(99)。服务器可能支持较低的最大值。
2.6 授权信息
授权信息与域名对象相关联,以方便转换操作。在创建域对象时分配授权信息,并且将来可能会对其进行更新。该规范描述了基于密码的授权信息,不过也可以使用其他机制。
2.7 其他DNS资源记录属性
虽然DNS允许许多资源记录类型与域相关联,但此映射仅显式指定描述用于域委托和解析的资源记录的元素。可以通过扩展此映射
开发提供其他与域相关的资源记录类型的工具。
此映射中描述的供应方法按数据类型分隔离散数据元素。这种数据定义方法允许XML Schema处理器执行基本的语法验证任务,减少了协议处理器所需要的模糊性和解析和语法检查工作量。将数据聚合为不透明字符串的准备和扩展方法是可能的,但是不应该使用这些方法,因为它们对协议处理器施加了额外的解析、解释和验证需求。
3. EPP命令映射
3.1 EPP查询(Query)命令
3.1.1 < check >
< check>命令用于确定域名是否在存储库(repository)
中,即域名是否存在。它让用户可以推测能否用< create>命令成功申请一个域名。但具体是否成功还要看服务器的策略。
除了标准的EPP指令元素,< check>命令还必须包含一个< domain:check >元素,用来标识域名命名空间。< domain:check >包含一个或多个< domain:name >,这个元素包含所查询域名的完全限定名。
< check>命令示例:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <check>
C: <domain:check
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: <domain:name>example.net</domain:name>
C: <domain:name>example.org</domain:name>
C: </domain:check>
C: </check>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
当<check>命令被成功处理时,EPP <resData>元素必须包含一个子<domain:chkData>元素,该元素标识域名称空间。<domain:chkData>元素包含一个或多个<domain:cd>元素,这些元素包含以下子元素:
- 一个<domain:name>元素,它包含查询域对象的完全限定名。此元素必须包含一个“avail”属性,其值指示在<check>命令完成时对象的可用性(是否可以提供它)。值“1”或“true”表示可以供应对象。值“0”或“false”表示不能供应对象。
- 一个可选的<domain:reason>元素,它可能在无法供应对象时提供。如果存在,则此元素包含特定于服务器的文本,以帮助解释为什么不能供应对象。此文本必须用之前与客户协商的响应语言表示;如果协商的值不是默认值“en”(英语),那么可以使用一个可选的“lang”属性来标识语言。
<check>响应的示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:chkData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:cd>
S: <domain:name avail="1">example.com</domain:name>
S: </domain:cd>
S: <domain:cd>
S: <domain:name avail="0">example.net</domain:name>
S: <domain:reason>In use</domain:reason>
S: </domain:cd>
S: <domain:cd>
S: <domain:name avail="1">example.org</domain:name>
S: </domain:cd>
S: </domain:chkData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理<check>命令,则必须返回EPP错误响应。
3.1.2 < info >
EPP 命令用于检索与域名对象关联的信息
。此命令的响应可能会根据查询客户端的身份、对授权信息的使用以及对未授权客户端的服务器策略而有所不同
。如果查询客户端是发起客户端,则必须返回所有可用信息。
如果查询客户端不是发起客户端,但客户端提供有效的授权信息,则必须返回所有可用信息。如果查询客户机不是发起客户机,并且客户机没有提供有效的授权信息,则服务器策略将确定返回哪些可选元素。
除了标准的EPP命令元素之外,< info>命令必须包含标识域名称空间的<domain:info>元素。<domain:info>元素包含以下子元素:
- 一个<domain:name>元素,它包含要查询的域对象的完全限定名。一个可选的“hosts”属性可用来控制描述与域对象相关的主机的信息的返回。值“all”(缺省值,可能不存在)返回描述从属主机和委托主机的信息。值“del”返回仅描述已委托主机的信息。值“sub”返回仅描述从属主机的信息。值“none”不返回任何描述委托或从属主机的信息。
- 一个可选的<domain:authInfo>元素,其中包含与域对象关联的授权信息或与域对象的注册人或关联联系人关联的授权信息。当且仅当给定的authInfo与注册人或联系人对象关联,而不是域对象本身时,必须使用可选的“roid”属性来标识注册人或联系人对象。如果没有提供此元素,或者授权信息无效,服务器策略将确定该命令是否被拒绝,或者是否将响应信息返回给客户机。
没有授权信息的< info>命令:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <info>
C: <domain:info
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name hosts="all">example.com</domain:name>
C: </domain:info>
C: </info>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
带有授权信息的命令:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <info>
C: <domain:info
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name hosts="all">example.com</domain:name>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:info>
C: </info>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
成功处理< info>命令后,EPP < resData>元素必须包含一个子<domain:infData>元素,该元素标识域名称空间。必须返回非可选的元素;可选元素根据客户端授权和服务器策略返回。<domain:infData>元素包含以下子元素:
-
<domain:name>元素,它包含域对象的完全限定名。
-
<domain:roid>元素,该元素包含在创建对象时分配给域对象的存储库对象标识符。
-
包含与域关联的当前状态描述符的零个或多个可选<domain:status>元素。
-
如果服务器支持,一个可选的<domain:registrant>元素和一个或多个可选的<domain:contact>元素,这些元素包含与域对象关联的人类或组织社会信息对象的标识符。
-
一个可选的<domain:ns>元素,它包含与域对象相关联的委托的主机对象或主机属性(
名称服务器
)的完全限定名。有关用于指定主机对象或主机属性的元素的描述,请参见第1.1节。 -
零个或多个可选<domain:host>元素,其中包含存在于此上级域对象下的
从属主机对象
的完全限定名。 -
包含发起客户端的标识符的<domain:clID>元素。
-
一个可选的<domain:crID>元素,它包含创建域对象的客户端的标识符。
-
一个可选的<domain:crDate>元素,它包含域对象创建的日期和时间。
-
一个可选的<domain:exDate>元素,它包含标识域对象注册期结束的日期和时间。
-
一个可选的<domain:upID>元素,它包含最后更新域对象的客户端的标识符。如果域从未被修改过,则此元素不能出现。
-
一个可选的<domain:upDate>元素,它包含最近的域对象修改的日期和时间。如果域对象从未被修改过,则此元素不能出现。
-
一个可选的<domain:trDate>元素,其中包含最近一次成功的域对象传输的日期和时间。如果域对象从未被传输,则不能提供此元素。
-
一个可选的<domain:authInfo>元素,它包含与域对象关联的授权信息。只有在查询客户端是当前发起客户端或客户端使用该命令提供有效的授权信息时,才必须返回此元素。
被授权的客户端收到的< info>响应:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:infData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:roid>EXAMPLE1-REP</domain:roid>
S: <domain:status s="ok"/>
S: <domain:registrant>jd1234</domain:registrant>
S: <domain:contact type="admin">sh8013</domain:contact>
S: <domain:contact type="tech">sh8013</domain:contact>
S: <domain:ns>
S: <domain:hostObj>ns1.example.com</domain:hostObj>
S: <domain:hostObj>ns1.example.net</domain:hostObj>
S: </domain:ns>
S: <domain:host>ns1.example.com</domain:host>
S: <domain:host>ns2.example.com</domain:host>
S: <domain:clID>ClientX</domain:clID>
S: <domain:crID>ClientY</domain:crID>
S: <domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
S: <domain:upID>ClientX</domain:upID>
S: <domain:upDate>1999-12-03T09:00:00.0Z</domain:upDate>
S: <domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
S: <domain:trDate>2000-04-08T09:00:00.0Z</domain:trDate>
S: <domain:authInfo>
S: <domain:pw>2fooBAR</domain:pw>
S: </domain:authInfo>
S: </domain:infData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
具有不同信息返回策略的服务器在响应中提供的信息可能较少。
未授权的客户端收到的< info>响应:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:infData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:roid>EXAMPLE1-REP</domain:roid>
S: <domain:clID>ClientX</domain:clID>
S: </domain:infData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理< info>命令,则必须返回一个EPP错误响应。
3.1.3 < transfer >
EPP < transfer>命令提供了一个查询操作,允许客户端确定挂起和完成的转换请求的实时状态。除了标准的EPP命令元素之外,< transfer>命令必须包含一个值为“query”
的“op”属性,以及一个标识域名称空间的< domain:transfer >元素。< domain:transfer >元素包含以下子元素:
- 一个< domain:name >元素,它包含要查询的域对象的完全限定名。
- 一个可选的< domain:authInfo >元素,其中包含与域对象关联的授权信息或与域对象的注册人或关联联系人关联的授权信息。当且仅当给定的authInfo与注册人或联系人对象关联时,必须使用可选的“roid”属性来标识注册人或联系人对象,而不是域对象本身。如果没有提供此元素,或者授权信息无效,服务器策略将确定该命令是否被拒绝,或者是否将响应信息返回给客户机。
< transfer>命令的示例:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <transfer op="query">
C: <domain:transfer
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: <domain:authInfo>
C: <domain:pw roid="JD1234-REP">2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:transfer>
C: </transfer>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
成功处理< transfer>查询命令后,EPP < resData>元素必须包含一个子< domain:trnData >元素,该元素标识域名称空间。< domain:trnData >元素包含以下子元素:
-
一个< domain:name >元素,它包含域对象的完全限定名。
-
一个< domain:trStatus >元素,它包含最近的传输请求的状态。一个< domain:reID >元素,它包含请求对象传输的客户端的标识符。
-
一个< domain:reDate >元素,其中包含请求传输的日期和时间。
-
一个< domain:acID >元素,它包含一个客户端标识符,该标识符应该在一个挂起的传输请求时起作用。对于所有其他状态类型,该值标识采取指定操作的客户端。
-
一个< domain:acDate >元素,该元素包含所需的或完成的响应的日期和时间。对于挂起的请求,该值标识服务器采取自动响应操作之前需要响应的日期和时间。对于所有其他状态类型,该值标识请求完成的日期和时间。
-
一个可选的< domain:exDate >元素,如果< transfer >命令导致或导致有效期发生变化,则该元素包含域对象有效期的结束。
< transfer>查询命令的响应示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:trnData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:trStatus>pending</domain:trStatus>
S: <domain:reID>ClientX</domain:reID>
S: <domain:reDate>2000-06-06T22:00:00.0Z</domain:reDate>
S: <domain:acID>ClientY</domain:acID>
S: <domain:acDate>2000-06-11T22:00:00.0Z</domain:acDate>
S: <domain:exDate>2002-09-08T22:00:00.0Z</domain:exDate>
S: </domain:trnData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理< transfer>查询命令,则必须返回一个EPP错误响应。
3.2 EPP转换(Transform)命令
转换命令通常是实时
处理和完成的。服务器操作员可以接收和处理转换命令,但如果在完成请求的操作之前需要人工或第三方检查,则可以推迟
完成请求的操作。在这种情况下,服务器必须向客户端返回1001
响应代码,以说明已经接收和处理了命令,但是请求的操作正在等待处理。服务器还必须管理作为命令主体的对象的状态,以反映请求的操作的启动和完成。一旦操作完成,必须使用服务消息通知事务中涉及的所有客户端操作已经完成,并且对象的状态已经更改。除了所需的服务消息外,还可以使用其他通知方法。
服务器操作员应该确认客户端被授权对给定对象执行转换命令。未经授权的客户机必须拒绝任何转换对象的尝试,服务器必须向客户机返回2201响应代码,以注意客户机缺少执行请求的命令的权限。
3.2.1 < create >
EPP < create>命令提供了一个转换操作,允许客户端创建域对象。除了标准的EPP命令元素之外,< create>命令必须包含一个< domain:create>元素,该元素标识域名称空间。< domain:create>元素包含以下子元素:
- 一个< domain:name>元素,它包含要创建的域对象的完全限定名。
- 一个可选的< domain:period>元素,它包含域对象的初始注册期。如果客户端没有指定,服务器可以定义一个默认的初始注册期。
- 一个可选的< domain:ns>元素,它包含与域对象相关联的已委托的主机对象或主机属性(名称服务器)的完全限定名,以便为域提供解析服务;有关用于指定主机对象或主机属性的元素的描述,请参见第1.1节。在将主机对象与域对象关联之前,服务器必须知道主机对象。
- 一个可选的< domain:registrant>元素,包含作为对象注册者与域对象相关联的人员或组织社会信息(联系人)对象的标识符。在contact对象与域对象关联之前,服务器必须知道此对象标识符。联系对象的EPP映射在[RFC5733]中进行了描述。
- 零个或多个可选< domain:contact>元素,其中包含与域对象关联的其他contact对象的标识符。在联系人对象与域对象关联之前,服务器必须知道联系人对象标识符。
- 一个< domain:authInfo>元素,其中包含要与域对象关联的授权信息。这个映射包括一个基于密码的身份验证机制,但是模式允许在新的模式中定义新的机制。
< create>命令示例:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: <domain:period unit="y">2</domain:period>
C: <domain:ns>
C: <domain:hostObj>ns1.example.net</domain:hostObj>
C: <domain:hostObj>ns2.example.net</domain:hostObj>
C: </domain:ns>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
成功处理< create>命令后,EPP < resData>元素必须包含一个子< domain:creData>元素,该元素标识域名称空间。< domain:creData>元素包含以下子元素:
-
一个< domain:name>元素,它包含域对象的完全限定名。
-
一个< domain:crDate>元素,它包含域对象创建的日期和时间。
-
一个可选的< domain:exDate>元素,它包含标识域对象注册期结束的日期和时间。
< create>响应示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:creData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
S: <domain:exDate>2001-04-03T22:00:00.0Z</domain:exDate>
S: </domain:creData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理< create>命令,则必须返回一个EPP错误响应。
3.2.2 < delete >
EPP < delete>命令提供了一个转换操作,允许客户端删除域对象。除了标准的EPP命令元素之外,< delete>命令必须包含一个< domain:delete >元素,该元素标识域名称空间。< domain:delete >元素包含以下子元素:
- 一个< domain:name >元素,它包含要删除的域对象的完全限定名。
如果从属主机对象与域对象相关联,则不应删除域对象。例如,如果域“example.com”存在,主机对象“ns1.example.com”也存在,那么在主机“ns1.example.com”被删除或重命名为存在于不同的上级域之前,不应该删除域“example.com”。当试图执行< delete>命令并由于存在对象关系而失败时,服务器应该通过发送2305错误响应代码来通知客户端存在对象关系。可以使用域对象的< info>查询命令来确定与域对象关联的委托和从属主机对象。
< delete>命令示例:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <delete>
C: <domain:delete
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: </domain:delete>
C: </delete>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
当< delete>命令被成功处理时,服务器必须使用没有< resData>元素的EPP响应进行响应。
< delete>响应示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理< delete>命令,则必须返回一个EPP错误响应。
3.2.3 < renew >
EPP < renew>命令提供一个转换操作,允许客户端延长域对象的有效期。除了标准的EPP命令元素之外,< renew>命令必须包含一个< domain:renew >元素,用于标识域名称空间。< domain:renew >元素包含以下子元素:
- 一个< domain:name >元素,它包含要扩展有效期的域对象的完全限定名。
- 一个< domain:curExpDate >元素,它包含当前有效期结束的日期。此值确保重复的< renew>命令不会导致多个未预期的成功续订。
- 一个可选的< domain:period >元素,它包含要添加到域对象的注册期的单元数。可用单元的数量可能受到服务器施加的限制。
< renew>命令示例:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <renew>
C: <domain:renew
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: <domain:curExpDate>2000-04-03</domain:curExpDate>
C: <domain:period unit="y">5</domain:period>
C: </domain:renew>
C: </renew>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
当成功处理了< renew>命令时,EPP < resData>元素必须包含一个子< domain:renData >元素,该元素标识域名称空间。< domain:renData >元素包含以下子元素:
- 一个< domain:name >元素,它包含域对象的完全限定名。
- 一个可选的< domain:exDate >元素,它包含标识域对象注册期结束的日期和时间。
< renew>响应示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:renData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
S: </domain:renData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因不能处理< renew>命令,则必须返回EPP错误响应。
3.2.4 < transfer >
EPP < transfer>命令提供了一个转换操作,该操作允许客户端管理请求来转移域对象的注册商。除了标准的EPP命令元素之外,< transfer>命令必须包含一个< domain:transfer >元素,该元素标识域名称空间。< domain:transfer >元素包含以下子元素:
- 一个< domain:name >元素,它包含要为其
发起 initiate
转移请求、取消 cancel
转移请求、批准 approve
转移请求和拒绝 reject
转移请求的域对象的完全限定名。 - 一个可选的< domain:period >元素,它是转移后,域名对象延长的注册期限。此元素只能在请求转移时使用,否则必须忽略它。该值可能受到注册局策略的限制。
- 一个< domain:authInfo >元素,其中包含与域对象关联的授权信息或与域对象的注册人或关联联系人关联的授权信息。当且仅当给定的authInfo与注册人或联系人对象关联,而不是域名对象本身时,必须使用可选的“roid”属性来标识注册人或联系人对象。
每个EPP < transfer>命令必须包含一个“op”属性,该属性标识要执行的传输操作。所有属性值的有效值、定义和授权都在[RFC5730]中定义。
域对象的转移必须隐式地转移属于域对象的所有主机对象。例如,如果域对象“example.com”被转移,而主机对象 “ns1.example.com” 存在,则主机对象必须作为 “example.com” 转移过程的一部分被转移。在对域对象执行的EPP < info>命令的响应中列出了在转移域对象时要转移的主机对象。
< transfer>请求命令:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <transfer op="request">
C: <domain:transfer
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: <domain:period unit="y">1</domain:period>
C: <domain:authInfo>
C: <domain:pw roid="JD1234-REP">2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:transfer>
C: </transfer>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
当< transfer>命令成功处理后,EPP < resData>元素必须包含一个子< domain:trnData >元素,该元素标识域名称空间。< domain:trnData >元素包含为传输查询响应定义的相同子元素。
< transfer>响应示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1001">
S: <msg>Command completed successfully; action pending</msg>
S: </result>
S: <resData>
S: <domain:trnData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:trStatus>pending</domain:trStatus>
S: <domain:reID>ClientX</domain:reID>
S: <domain:reDate>2000-06-08T22:00:00.0Z</domain:reDate>
S: <domain:acID>ClientY</domain:acID>
S: <domain:acDate>2000-06-13T22:00:00.0Z</domain:acDate>
S: <domain:exDate>2002-09-08T22:00:00.0Z</domain:exDate>
S: </domain:trnData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理< transfer>命令,则必须返回一个EPP错误响应。
3.2.5 < update >
EPP < update>命令提供了一个转换操作,允许客户端修改域对象的属性。除了标准的EPP命令元素之外,< update>命令必须包含一个< domain:update >元素,该元素标识域名称空间。< domain:update >元素包含以下子元素:
- 一个< domain:name>元素,它包含要更新的域对象的完全限定名。
- 可选的< domain:add> 包含要添加到对象的属性值的元素。
- 一个可选的< domain:rem>元素,它包含要从对象中删除的属性值。
- 一个可选的< domain:chg>元素,它包含要更改的对象属性值。
如果不扩展命令,则必须提供至少一个< domain:add>,< domain:rem>,或< domain:chg>元素。如果存在< update>扩展,则可以省略所有这些元素。< domain:add>和< domain:rem>元素包含以下子元素:
- 一个可选的< domain:ns>元素,它包含与域对象相关联的已委托的主机对象或主机属性(名称服务器)的完全限定名,以便为域提供解析服务;有关用于指定主机对象或主机属性的元素的描述,请参见第1.1节。在将主机对象与域对象关联之前,服务器必须知道主机对象。如果使用主机属性指定名称服务器,请注意,不需要使用IP地址元素来标识要删除的名称服务器。在这种情况下,可以安全地忽略IP地址元素。
- 零个或多个< domain:contact>元素,这些元素包含要与域对象关联或从域对象中删除的contact对象的标识符。在联系人对象与域对象关联之前,服务器必须知道联系人对象标识符。
- 零个或多个< domain:status>元素,其中包含要应用于或从对象中删除的状态值。在指定要删除的值时,只有属性值是重要的;元素文本不需要匹配要删除的值。
一个< domain:chg>元素包含以下子元素:
- 一个< domain:registrant>元素,它包含作为对象注册者与域对象相关联的人类或组织社会信息(联系人)对象的标识符。在contact对象与域对象关联之前,服务器必须知道此对象标识符。一个空元素可以用来删除注册者信息。
- 一个< domain:authInfo>元素,它包含与域对象关联的授权信息。这个映射包括一个基于密码的身份验证机制,但是模式允许在新的模式中定义新的机制。可以在< domain:authInfo>元素中使用一个< domain:null>元素来删除授权信息。
< update>命令示例:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <update>
C: <domain:update
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>example.com</domain:name>
C: <domain:add>
C: <domain:ns>
C: <domain:hostObj>ns2.example.com</domain:hostObj>
C: </domain:ns>
C: <domain:contact type="tech">mak21</domain:contact>
C: <domain:status s="clientHold"
C: lang="en">Payment overdue.</domain:status>
C: </domain:add>
C: <domain:rem>
C: <domain:ns>
C: <domain:hostObj>ns1.example.com</domain:hostObj>
C: </domain:ns>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:status s="clientUpdateProhibited"/>
C: </domain:rem>
C: <domain:chg>
C: <domain:registrant>sh8013</domain:registrant>
C: <domain:authInfo>
C: <domain:pw>2BARfoo</domain:pw>
C: </domain:authInfo>
C: </domain:chg>
C: </domain:update>
C: </update>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
当成功处理了< update>命令时,服务器必须使用没有< resData>元素的EPP响应进行响应。
< update>响应示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
如果由于任何原因无法处理< update>命令,则必须返回一个EPP错误响应。
3.3 离线审查请求行动
命令由服务器按照从客户机接收命令的顺序进行处理。虽然服务器生成确认接收和处理命令的即时响应,但是服务器操作员可以在完成请求的操作之前对请求的转换命令进行离线检查。在这种情况下,来自服务器的响应必须清楚地注意到transform命令已经被接收和处理,但是请求的操作正在等待。相应对象的状态必须清楚地反映未决动作的处理。当离线处理完成时,服务器必须通知客户机。
这里包含了描述需要离线检查的< create>命令的示例。注意响应< create>命令返回的结果代码和消息。
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1001">
S: <msg>Command completed successfully; action pending</msg>
S: </result>
S: <resData>
S: <domain:creData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>example.com</domain:name>
S: <domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
S: <domain:exDate>2001-04-03T22:00:00.0Z</domain:exDate>
S: </domain:creData>
S: </resData>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
域对象返回此响应后的状态必须包括“pendingCreate”。服务器操作员离线检查请求,并通过< poll>命令对服务消息进行排队检索,或者使用带外机制将请求通知客户机,从而将检查结果通知客户机。
服务消息必须包含描述响应< msgQ>元素的子< msg>元素中的通知的文本。此外,EPP < resData>元素必须包含一个子< domain: panData >元素,该元素标识域名称空间。元素< domain: panData >包含以下子元素:
- 一个< domain:name >元素,它包含域对象的完全限定名。< domain:name >元素包含一个必需的“paResult”属性。一个正的布尔值表示请求已被批准并完成。一个负的布尔值表示请求被拒绝,并且请求的操作没有被执行。
- 一个< domain:paTRID >元素,该元素包含客户端事务标识符和服务器事务标识符,它们与处理命令的原始响应一起返回。客户端事务标识符是可选的,只有在客户端使用原始的< create>命令提供标识符时才会返回。
- 一个< domain:paDate >元素,它包含对所请求的操作的审查何时完成的日期和时间描述。
“review completed” 服务消息的示例:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1301">
S: <msg>Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="5" id="12345">
S: <qDate>1999-04-04T22:01:00.0Z</qDate>
S: <msg>Pending action completed successfully.</msg>
S: </msgQ>
S: <resData>
S: <domain:panData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name paResult="1">example.com</domain:name>
S: <domain:paTRID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </domain:paTRID>
S: <domain:paDate>1999-04-04T22:00:00.0Z</domain:paDate>
S: </domain:panData>
S: </resData>
S: <trID>
S: <clTRID>BCD-23456</clTRID>
S: <svTRID>65432-WXY</svTRID>
S: </trID>
S: </response>
S:</epp>
参考文献
https://zhuanlan.zhihu.com/p/43231547 域名和主机名的区别 - 知乎
http://blog.sina.com.cn/s/blog_7204c3360100wajd.html 域名和主机名的区别