Я бы предположил, что HttpURLConnection
просто переопределит заголовок Content-Length
с правильным значением, поскольку он знает , что врать об этом нехорошо; -)
И действительно: в строках 535-550 sun.net.www.protocol.HttpURLConnection
при необходимости устанавливается Content-Length
.Это происходит после заданных пользователем заголовков, так что это значение будет перезаписано.
И это правильно: если объем передаваемых данных не соответствует заявленному количеству,тогда вы только запутаете другой конец.
Проверка источника sun.net.www.protocol.http.HttpURLConnection
кажется, что существует список заголовков, которые ограничены и будут молча игнорироваться при вызове setRequestProperty
.Content-Length
входит в этот список.К сожалению, это кажется недокументированным (по крайней мере, я не смог найти никакой документации по этому вопросу, только обсуждение связанной с этим проблемы здесь ).
Поиск в Google для идентификаторов ошибок (?)в ChangeSet, который представил эту «функциональность» , кажется, что это изменение было представлено как реакция на уязвимости безопасности CVE-2010-3541 и CVE-2010-3573 ( Redhat ошибка в этой теме ).
Ограничение можно вручную отключить, задав для свойства System sun.net.http.allowRestrictedHeaders
значение true
при запуске JVM.