URLConnection setRequestProperty vs addRequestProperty

Предположим, что я говорю HTTP с веб-сервером, и я буду принимать html или текст, но предпочитаю html. Другими словами, заголовок должен сказать (я думаю!)

Принять: текст /html, текст/*

Я использую Java, поэтому у меня есть URLConnection. Должен ли я использовать:

myUrlConnction.setRequestProperty("Accept", "text/html");
myUrlConnction.addRequestProperty("Accept", "text/*");

или

myUrlConnction.setRequestProperty("Accept", "text/html, text/*");

или они эквивалентны

В целом, большинство сторонних кодов, которые я вижу, похоже, не беспокоиться о упорядочении или нескольких значениях этих заголовков, поэтому мне интересно, как это работает.

Ответ 1

Первый фрагмент кода приведет к двум принимающим заголовкам, тогда как второй фрагмент кода даст один заголовок accept с двумя селекторами.

Они фактически эквивалентны.

В спецификации также указано, что более конкретный диапазон носителей имеет приоритет, так что оба будут давать ожидаемое поведение.

Если вы должны указать несколько диапазонов носителей, и они одинаково специфичны, вы можете добавить q-параметр.

Источник: http 1.1 spec (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html):

Ответ 2

Основное отличие между setRequestProperty и addRequestProperty заключается в следующем: -

  • setRequestProperty → Устанавливает свойство общего запроса. Если свойство с ключом уже существует, переписать его значение с новым значением.

  • addRequestProperty → Добавляет свойство общего запроса, заданное парой ключ-значение. Этот метод будет не перезаписывать существующие значения, связанные с одним и тем же ключом.

Для получения дополнительной информации просмотрите api doc