Ответ 1
Соответствующим 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 для кодирования набора пар значений имени.