Skip to main content

10. Cross-Protocol Proxying between CoAP and HTTP (CoAP和HTTP之间的跨协议代理)

CoAP支持HTTP功能的有限子集, 因此跨协议代理到HTTP是直接的. 在CoAP和HTTP之间进行代理可能有几个原因, 例如, 在设计用于任一协议的Web界面时, 或在实现CoAP-HTTP代理时. 同样, CoAP也可以代理到其他协议, 例如XMPP [RFC6120]或SIP [RFC3264]; 这些机制的定义超出了本规范的范围.

有两种可能的方向通过正向代理访问资源:

CoAP-HTTP代理: 使CoAP客户端能够通过中介访问HTTP服务器上的资源. 这是通过在对CoAP-HTTP代理的CoAP请求中包含带有"http"或"https" URI的Proxy-Uri或Proxy-Scheme选项来启动的.

HTTP-CoAP代理: 使HTTP客户端能够通过中介访问CoAP服务器上的资源. 这是通过在对HTTP-CoAP代理的HTTP请求的Request-Line中指定"coap"或"coaps" URI来启动的.

无论哪种方式, 只有CoAP的请求/响应模型映射到HTTP. 可确认或不可确认消息等的底层模型是不可见的, 并且不得对代理功能产生影响.

10.1. CoAP-HTTP Proxying (CoAP-HTTP代理)

如果请求包含带有'http'或'https' URI [RFC2616]的Proxy-Uri或Proxy-Scheme选项, 则接收CoAP端点 (以下称为"代理") 被请求在指示的HTTP资源上执行请求方法指定的操作, 并将结果返回给客户端. (另请参见第5.7节, 了解如何构造对代理的请求, 包括安全要求.)

本节为任何CoAP请求指定代理应该返回给客户端的CoAP响应. 代理实际如何满足请求是实现细节, 尽管典型情况预期是代理转换并将请求转发到HTTP源服务器.

由于HTTP和CoAP共享基本的请求方法集, 因此在HTTP资源上执行CoAP请求与在CoAP资源上执行它并没有太大不同. 本节的子节解释了在HTTP资源上执行时各个CoAP方法的含义.

如果代理无法或不愿意使用HTTP URI处理请求, 则将5.05 (Proxying Not Supported) 响应返回给客户端. 如果代理通过与第三方 (例如HTTP源服务器) 交互来处理请求, 并且无法在合理的时间范围内获得结果, 则返回5.04 (Gateway Timeout) 响应; 如果可以获得结果但无法理解, 则返回5.02 (Bad Gateway) 响应.

关键方法映射:

  • GET: 成功时返回2.05 (Content), 包含HTTP资源的表示
  • PUT: 创建新资源返回2.01 (Created), 修改现有资源返回2.04 (Changed)
  • DELETE: 成功或资源不存在时返回2.02 (Deleted)
  • POST: 根据操作结果返回2.04 (Changed)或2.01 (Created)

10.2. HTTP-CoAP Proxying (HTTP-CoAP代理)

如果HTTP请求的Request-URI包含"coap"或"coaps" URI, 则接收HTTP端点 (以下称为"代理") 被请求在指示的CoAP资源上执行请求方法指定的操作, 并将结果返回给客户端.

本节为任何HTTP请求指定代理应该返回给客户端的HTTP响应. 除非另有规定, 所有陈述都是推荐行为; 一些高度受限的实现可能需要采用捷径.

如果代理无法或不愿意使用CoAP URI处理请求, 则将501 (Not Implemented) 响应返回给客户端. 如果代理通过与第三方 (例如CoAP源服务器) 交互来处理请求, 并且无法在合理的时间范围内获得结果, 则返回504 (Gateway Timeout) 响应; 如果可以获得结果但无法理解, 则返回502 (Bad Gateway) 响应.

关键方法映射:

  • OPTIONS和TRACE: 返回501 (Not Implemented), 因为CoAP不支持
  • GET: 成功时返回200 (OK), 包含CoAP资源的表示
  • HEAD: 类似于GET但不返回消息体
  • POST/PUT/DELETE: 映射到相应的CoAP方法并返回适当的HTTP状态码