операция HEAD, как определено стандартом HTTP, не возвращает никакого контента, кроме информации заголовка. Поэтому, если вы отправляете запрос заголовка, вы можете только проверить MIME-тип файла из заголовка ответа HTTP.
Информация заголовка может быть получена путем просмотра Представления, возвращенного после его оборачивания в ClientResource и выполнения запроса заголовка. Это дает вам высокоуровневый интерфейс для транспорта HTTP, и вам не нужно выполнять пользовательский анализ заголовка.
ClientResource resource = new ClientResource(url);
Representation representation = resource.head();
representation.getMediaType(); // returns the Media Type
Если вы хотите угадать тип контента по фактическому содержимому файла, вам необходимо загрузить фактический контент, например, с помощью запроса GET к этому ресурсу.
Или в режиме REST вы можете смоделировать дополнительный параметр запроса для вашего ресурса, который будет возвращать вашу мета-информацию для этого файла, например,
http://server/file?contentType
Аналогичным образом, чтобы получить фактический контент, вы можете получить дескриптор потока и затем отгадать кодировку.
Representation representation = resource.get();
InputStream stream = representation.getStream();
Чтобы указать диапазоны, если они поддерживаются сервером, вы можете установить диапазоны перед отправкой запроса на получение.
List<Range> ranges = new ArrayList<Range>();
ranges.add(new Range(0,100)); // this would request the first 100 bytes
resource.setRanges(ranges);
Representation representation = resource.get();
Убедитесь, что вы полностью используете ответ (поток), прежде чем вернуться.
Я предлагаю вам заняться другими делами, которые помогут вам определить тип контента.
Как здесь Java charset и Windows
Или http://glaforge.free.fr/wiki/index.php?wiki=GuessEncoding