HTTP响应头 - 应用程序版本

7
我正在尝试想出一种方式,使用HTTP在响应消息中公开Web服务(REST和SOAP接口)的具体构建版本号。
仅为明确起见,我并不想控制客户端使用的应用程序版本,因为这由交通管理器和服务注册表处理(已经被广泛讨论),我只想能够在以后调试时检查所使用的版本是什么或正在使用什么版本,例如,检查交通管理器是否提供了正确的版本。
我花费了很长时间研究HTTP规范,并且无法决定使用Pragma还是...
Pragma: application-version=1.0.0-SNAPSHOT

使用额外的Server标头

Server: Apache-Coyote/1.1
Server: MyService-1.0.0-SNAPSHOT

使用一个 Via

Via: MyService-1.0.0-SNAPSHOT

或者一个自定义头部。
X-ApplicationVersion: 1.0.0-SNAPSHOT

在我的看法中,使用 ViaServer 是语义上不正确的,但使用 X- 头部则存在被代理服务器丢弃的风险;而 Pragma 没有限制,如果想要以编程方式使用它,则更难解析。
我还有一种感觉是,多个 Server 标头可能不会被尊重,但使用我正在使用的容器(JBoss)无法指定多个值。
这方面有什么先例吗?有人有什么技巧吗?还是我只需要使用一个就好了呢?
1个回答

5
在我看来,使用Via或Server是语义上不正确的,但使用X-header则存在被代理服务器丢弃的风险。不过,我不会过于担心X-header被丢弃的问题。以调用ebay搜索服务为例,响应中包含了这个头部信息。请参考以下链接:http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&RESPONSE-DATA-FORMAT=XML&REST-PAYLOAD&keywords=harry%20potter
X-EBAY-SOA-SERVICE-VERSION: 1.12.0

我曾经看到很多人使用X头部来实现这个目的。

2
谢谢Deepak,使用“非标准”头让我感到有些紧张,但似乎这是元数据中最常见的方式。我只是担心如果Roy Fielding曾经审查我的服务,我没有使用内置功能的情况! :) - James
2
哈哈!说到Roy和标准/风格,你可能会觉得这篇博客文章很有趣 - http://www.subbu.org/blog/2012/04/protocols-vs-styles - Deepak Bala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接