我有一个移动设备通过HTTPS与我服务器上的RESTful API进行通信.其中一个操作是数据同步,用于将脱机时进行的修改推送到服务器,并下拉服务器上并行进行的更新.
我遇到了一个边缘情况,在现有客户端中,同步操作可能会无声地失败.我已升级客户端上的"同步协议"以正确处理条件.理想情况下,我希望让所有旧客户端在尝试同步时告知他们升级时收到消息.
通信就在我的服务器和我的移动客户端之间,所以我意识到我可以返回任意数量的HTTP代码并通知客户端将来显示一条消息,建议用户升级并立即停止同步过程.
是否会被视为对HTTP 426升级所需返回代码的意图的混淆,以使用它来发出信号.我能找到的每个参考文献(IETF RFC 2817,维基百科)都说它用来表示客户端升级到TLS.它是否仅限于定义良好的安全协议(如SSL和TLS),还是HTTP层的通用升级标志,传统上仅用于SSL和TLS?
如果它不是针对这个用例,那么HTTP 303 See Other会被认为更合适,还是有其他代码我缺少?
Bru*_*uno 12
引用我以前的一个答案:
如果可能,HTTP升级用于指示切换到不同版本的HTTP或其他协议的首选项或要求:
Run Code Online (Sandbox Code Playgroud)The Upgrade general-header allows the client to specify what additional communication protocols it supports and would like to use if the server finds it appropriate to switch protocols. The server MUST use the Upgrade header field within a 101 (Switching Protocols) response to indicate which protocol(s) are being switched. Upgrade = "Upgrade" ":" 1#product For example, Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 The Upgrade header field is intended to provide a simple mechanism for transition from HTTP/1.1 to some other, incompatible protocol.根据IANA注册,只有3个注册提及(包括HTTP规范本身中的一个).
另外两个用于:
升级到TLS在HTTP/1.1中(几乎从未使用过,不要与HTTP over TLS混淆,后者将HTTPS定义为广泛使用).此升级允许在其他协议(例如LDAP,SMTP,...)中使用与STARTTLS类似的机制,以便在交换某些应用程序协议消息后能够在与普通连接相同的端口上切换到TLS,如反对在SSL/TLS之上进行整个HTTP交换,而不需要知道它在TLS之上(HTTPS的工作方式).
升级到WebSockets(仍然是草稿).
(此后IANA注册号没有变化.)
RFC 2817中定义的426响应代码显然与RFC 2816中定义的"HTTP升级"意义上的升级有关.这是当前使用的层(即HTTP本身)上当前协议的更改.(甚至根本不是从升级http://到升级https://.)
在HTTP之上交换的消息(如果是协议的一部分)不属于此.就HTTP而言,它们只是超媒体实体.
如果你改变你的超媒体的含义,我认为426不适合.平原400可能是更好的选择.请注意,具有错误状态代码(4xx,5xx)的响应不会阻止您在响应中关联实体:这是告知客户端升级协议(在该级别)的消息应该是.
我同意布鲁诺的说法,426不是最好的选择.400更好,但我认为403仍然更好.
10.4.4 403禁止
服务器理解请求,但拒绝履行请求.授权无效,请求不应重复.如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因.如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到).
Twitter API上有先例.
自2014年2月26日起,api.twitter.com将返回所有非SSL传入流量的403状态代码.您的客户端代码应该能够处理此错误.
| 归档时间: |
|
| 查看次数: |
23412 次 |
| 最近记录: |