Понял:
Найден следующий исходный код .Net Fx (в классе HttpWebResponse):
/// <devdoc>
/// <para>Gets the stream used for reading the body of the response from the
/// server.</para>
/// </devdoc>
public override Stream GetResponseStream()
{
if (Logging.On)
Logging.Enter(Logging.Web, this, "GetResponseStream", "");
CheckDisposed();
if (!CanGetResponseStream()) {
// give a blank stream in the HEAD case, which = 0 bytes of data
if (Logging.On)
Logging.Exit(Logging.Web, this, "GetResponseStream",
Stream.Null);
return Stream.Null;
}
if (Logging.On)
Logging.PrintInfo(Logging.Web,
"ContentLength=" + m_ContentLength);
if (Logging.On)
Logging.Exit(Logging.Web, this, "GetResponseStream",
m_ConnectStream);
return m_ConnectStream;
}
Как вы можете видеть, он явно возвращает нулевой поток для "HEAD"Запросы."Зачем это делать?"Я спрашиваю.
Я нашел это в http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html:
9.4 HEAD
Метод HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН возвращать тело сообщения вответ.Метаинформация, содержащаяся в заголовках HTTP в ответ на запрос HEAD, ДОЛЖНА быть идентична информации, отправленной в ответ на запрос GET.Этот метод может использоваться для получения метаинформации о сущности, подразумеваемой запросом, без передачи самого тела сущности.Этот метод часто используется для тестирования гипертекстовых ссылок на валидность, доступность и последние изменения.
Вау.Я взял из книги Richardson и Ruby RESTful Web Services, что вы можете быть умным и ответить на запрос «HEAD» с пустой формой XHTML, которая бы полностью описывала структуру элементов ресурса, включая обязательность, тип данных, длину и т. Д., Используя всеатрибуты поля формы XHTML (5).Однако после прочтения спецификации HTTP становится ясно, что все данные ответов 'HEAD' должны идти в заголовках HTTP.
Ну да, каждый день вы узнаете что-то новое ...