java spring框架的http客户端似乎默认发送此Accept标头:
Accept: text/plain, application/json, application/*+json, */*
Run Code Online (Sandbox Code Playgroud)
我对“application/*+json”部分很好奇。我相信这样做的目的是匹配任何开始application/和结束的哑剧类型+json- 例如。application/vnd.api+json。
然而,看看RFC 7231 第 5.3.2 节,它说:
media-range = ( "*/*"
/ ( type "/" "*" )
/ ( type "/" subtype )
) *( OWS ";" OWS parameter )
Run Code Online (Sandbox Code Playgroud)
这似乎专门允许使用 * 而不是子类型,而不是作为子类型的一部分 - 表明“application/*+json”应该只匹配实际上作为名称中的 * 的 mime 类型。
一般而言,mime 类型的“+”语法在https://www.rfc-editor.org/rfc/rfc6839中定义- 但是其中似乎没有任何内容允许将其应用于 HTTP RFC 定义的通配符。
是否有其他一些 RFC 扩大了定义,或者 spring 发送了错误的 Accept: 标头?
我相信答案是“不”。HTTP 允许的值在https://www.greenbytes.de/tech/webdav/rfc7231.html#rfc.section.5.3.2中定义,并且“*+json”不是有效的子类型(即使它是的,它只会匹配子类型“*+json”,而不是所有以“+json”结尾的子类型)。