gpt4 book ai didi

java - 根据 HTTP 规范, '*' 是内容类型的有效通配符吗?

转载 作者:可可西里 更新时间:2023-11-01 16:59:09 25 4
gpt4 key购买 nike

我们正在使用 Jax-RS 的 Jersey 引用实现。如果未指定接受 header ,则 Jersey 的 Jax-RS 客户端实现会将默认接受 header 附加到请求。默认的接受 header 如下所示:

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 

如您所见,它使用单个星号“*”作为内容类型(在 image/jpeg 之后)。

在 Jax-RS 规范中(参见 here),这个单个 * 定义为

/**
* The value of a type or subtype wildcard {@value #MEDIA_TYPE_WILDCARD}.
*/
public static final String MEDIA_TYPE_WILDCARD = "*";

我将其解释为“任何媒体类型的通配符”

'*/*' 定义为

/**
* A {@code String} constant representing wildcard {@value #WILDCARD} media type .
*/
public final static String WILDCARD = "*/*";

我将其解释为“任何媒体范围的通配符”

但是,HTTP 规范 ( RFC7231 ) 并未提及“任何媒体类型”通配符,仅提及媒体范围通配符:

media-range    = ( "*/*"
/ ( type "/" "*" )
/ ( type "/" subtype )
) *( OWS ";" OWS parameter )

(..)

The asterisk "*" character is used to group media types into ranges,
with "*/*" indicating all media types and "type/*" indicating all
subtypes of that type. The media-range can include media type
parameters that are applicable to that range.

我将其解释为允许的内容类型:

  • */*
  • 正文/*
  • 文本/纯文本

换句话说,内容类型必须始终为“某物斜线某物”或“单个 * 不是有效内容类型”的形式。虽然,后者没有明确说明。

现在这两个规范都是公开标准化的,HTTP 规范在某种程度上是 Jax-RS 规范的父文档,因为 Jax-RS 基于 HTTP。恕我直言,这两个标准在通配符内容类型方面相互矛盾。

问题是,什么是适用的?

  • 单个星号“*”是否是有效的内容类型(允许服务器响应任何内容类型)
  • 或者使用单个星号会产生错误吗?如果有,是哪一个?
    • 400 错误请求
    • 406 Not Acceptable
  • 或者服务器是否应该更宽容并且将 * 与通配符 */* 一样对待,尽管 * 不是有效的内容类型(并且可能会在日志或其他内容中产生警告)?

编辑

在处理 Jsoup(不是 JaxRS/Jersey)时,我观察到 JSoup 使用相同的默认接受类型,而且默认 header 似乎是 sun.net.www.protocol 的实现细节。 http.HttpURLConnection

static final String acceptString = "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";

所以万一这是一个错误,它不是 Jersey 中的错误,而是 Java 的 HttpURLConnection

最佳答案

你说:

which I interpret as "wildcard for any media type"

我认为这是不正确的。它是类型或子类型的通配符。任何媒体类型的通配符都定义为 */*,就像在 HTTP 规范中一样。

此外,如有疑问,请遵循 HTTP 规范。最后,这就是您正在使用的通信协议(protocol)。对方可能不知道 Jax-RS 规范。

关于java - 根据 HTTP 规范, '*' 是内容类型的有效通配符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com