7. Discovery (发现)
7.1. Service Discovery (服务发现)
作为发现CoAP服务器提供的服务的一部分, 客户端必须了解服务器使用的端点.
客户端通过 (知道或) 学习引用服务器命名空间中资源的URI来发现服务器. 或者, 客户端可以使用组播CoAP (见第8节) 和"All CoAP Nodes"组播地址来查找CoAP服务器.
除非"coap"或"coaps" URI中的端口子组件指示CoAP服务器所在的UDP端口, 否则假定服务器可以在默认端口访问.
提供资源发现资源的服务器必须支持CoAP默认端口号5683 (见下面的第7.2节), 并且应该支持提供对其他资源的访问. 服务器可以支持用于资源发现和提供对其他资源的访问的DTLS保护的CoAP的默认端口号5684. 此外, 可以在其他端口托管其他端点, 例如, 在动态端口空间中.
实现注意: 当CoAP服务器由6LoWPAN节点托管时, 如果它还支持[RFC4944]和[RFC6282]中定义的61616-61631压缩UDP端口空间中的端口号, 则头部压缩效率会得到改善. (请注意, 由于其UDP端口与默认端口不同, 它与默认端口的服务器是不同的端点.)
7.2. Resource Discovery (资源发现)
CoAP端点提供的资源的发现在机器对机器应用中极其重要, 其中循环中没有人类, 静态接口会导致脆弱性. 为了在CoRE环境中最大化互操作性, CoAP端点应该支持[RFC6690]中描述的可发现资源的CoRE链接格式, 除非需要完全手动配置. 由服务器决定哪些资源是可发现的 (如果有).
7.2.1. 'ct' Attribute ('ct' 属性)
本节定义了一个新的Web链接[RFC5988]属性, 用于与[RFC6690]一起使用. 内容格式代码"ct"属性提供了关于此资源返回的内容格式的提示. 请注意, 这只是一个提示, 它不会覆盖通过实际请求资源表示获得的CoAP响应的Content-Format选项. 该值采用十进制ASCII整数的CoAP标识符代码格式, 并且必须在0-65535范围内 (16位无符号整数). 例如, "application/xml"将表示为"ct=41". 如果不存在内容格式代码属性, 则无法假设类型. 内容格式代码属性可以包括以空格分隔的内容格式代码序列, 表示多种内容格式可用. 属性值的语法在图12的产生式"ct-value"中总结, 其中"cardinal", "SP"和"DQUOTE"的定义如[RFC6690]中所示.
ct-value = cardinal
/ DQUOTE cardinal *( 1*SP cardinal ) DQUOTE
图 12