Мы используем эталонную реализацию Jax-RS на Джерси.Клиентская реализация Jax-RS в Джерси добавляет заголовок принятия по умолчанию к запросу, если заголовок принятия не указан.Заголовок подтверждения по умолчанию выглядит следующим образом:
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Как видите, он использует одну звездочку '*' в качестве типа содержимого (после image / jpeg).
В Jax-RS спецификации (см. здесь ), этот сингл * определяется как
/**
* The value of a type or subtype wildcard {@value #MEDIA_TYPE_WILDCARD}.
*/
public static final String MEDIA_TYPE_WILDCARD = "*";
, который я интерпретирую как «подстановочный знак для любого типа носителя»
The ** 'определяется как
/**
* 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.
Которые я интерпретирую как допустимые типы содержимого:
- * / *
- text /*
- text / plain
, другими словами, тип контента должен быть всегда в форме "что-то косая черта" или "одиночный *недопустимый тип контента ".Хотя последнее явно не указано.
Теперь обе спецификации публично стандартизированы, причем спецификация HTTP является в некоторой степени родительским документом для спецификации Jax-RS, поскольку Jax-RS основан на HTTP.ИМХО оба стандарта противоречат друг другу в отношении типов содержимого с подстановочными знаками.
Вопрос в том, что применимо?
- Является ли одна звездочка "*" допустимым типом содержимого (позволяя серверуответить любым типом контента ")
- ИЛИ, если использование единственной звездочки должно привести к ошибке? Если да, то какой?
- 400 Bad Requst
- 406 не приемлемо
- ИЛИ должен ли сервер быть более терпимым и обращаться с * так же, как с подстановочным знаком * / *, хотя * не является допустимым типом содержимого (и, вероятно, выдает предупреждение в журнале или что-то в этом роде)?
Edit
Имея дело с Jsoup (не JaxRS / Jersey), я заметил, что JSoup использует те же типы принятия по умолчанию, и кажется, что заголовки по умолчанию являются деталями реализации.из sun.net.www.protocol.http.HttpURLConnection
static final String acceptString = "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";
Так что в случае, если это ошибка, это не ошибка в Джерси, а Java HttpURLConnection