Недопустимые символы в заголовках HTTP

Я создаю HttpUrlConnection и вам нужно установить несколько настраиваемых заголовков.

Я хотел бы сделать что-то в следующем порядке, но содержимое карты заголовка должно происходить из одной строки. Существуют ли какие-либо символы, которые являются незаконными или крайне редко используются как в заголовках HTTP-заголовков, так и в значениях заголовков HTTP?

 HashMap headers = new HashMap(); // TODO: How can I fill the headers map reliably from a single string? HttpURLConnection c = (HttpURLConnection) url.openConnection(); for(Map.Entry e : headers.entrySet()) c.setRequestProperty(e.getKey(), e.getValue()); 

Решение на данный момент

Кажется, что ни одно имя заголовка HTTP не содержит пробелов (обычно вместо них используется тире?), Поэтому я могу отделить это имя со значением, используя одно пространство. Что касается наборов значений имен, кажется, что я завинчен, так как значение может содержать почти что угодно в соответствии с данным ответом. Поэтому я только что выбрал персонажа, которого, я уверен, скорее всего никогда не будет использовать: § . Если окажется, что это действительно необходимо, мне просто нужно настроить свой код: p

 Header1 Value1§Header2 Value2§Header3 Header3 

Соответствующим BNF из RFC7230 является:

 field-name = token token = 1*tchar tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA 

Набор символов отображается USASCII.

RFC 7230 является более поздним, чем ваш вопрос, но в соответствующих подробностях он не меняет того, что ранее упоминалось в RFC 2616.

Существует очень сильное соглашение об именах полей, которое гораздо более ограничительно, чем позволяет RFC, и это применяется в разных степенях в различных реализациях. Имена полей обычно следуют шаблону последовательности слов [ASCII / NUMERAL] с первой буквой (только) каждого заглавного слова. Слова разделяются одним дефис.

Так, например, «HttpUrlConnection» должно было быть заголовком HTTP-заголовка (а не токеном java), вы бы назвали его «Http-Url-Connection».

Я смутно помню, как однажды отслеживал ошибку до некоторой реализации, будучи достаточно строгим, чтобы не допускать нескольких капиталов в одном слове (что оказалось аббревиатурой). Т.е. очень важно строго придерживаться этого более ограниченного формата.

  • Наборы символов не ASCII не играют роли в именах полей, хотя они могут использоваться в значениях полей.

  • Экранирование в именах полей не поддерживается стандартом. Экранирование значений не относится к стандартам HTTP или MIME, но вы можете выбрать повторное использование стандартного метода кодирования URL для кодирования набора пар значений имени.

  • Почему операторам Java + =, - =, * =, / = сложного присваивания не требуется кастинг?
  • Способы сохранения перечислений в базе данных
  • java.lang.NoClassDefFoundError: javax / mail / Authenticator, что не так?
  • Какой смысл перегружать методы фабрики удобство для коллекций в Java 9
  • Невозможно присвоить запрошенный адрес: JVM_Bind
  • Hibernate Named Query Order По параметру
  • Какова цель определения пакета в файле Java?
  • Math.abs возвращает неверное значение для Integer.Min_VALUE
  • java.lang.NoSuchMethodError в Flink
  • Удаление повторяющихся значений из ArrayList
  • Какая лучшая библиотека обработки изображений java?
  • Давайте будем гением компьютера.