2012-06-19 1 views
1

Как я узнал, метод HTTP HEAD на практике не всегда надежный: Reliability of HTTP HEAD methodКак прервать WebRequest (GET) после определенного количества данных?

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

Спасибо!

ответ

1

Можно ли эмулировать метод HTTP HEAD методом HTTP GET?

Нет, конечно нет. Запрос GET всегда приходит с телом в ответ. Вот что говорит спецификация HTTP. Поэтому, если вы не найдете веб-сервер, который нарушает спецификацию HTTP, я не думаю, что он будет работать. Только глагол HEAD предназначен для достижения того, что вы ищете.

+0

Да, но ответ загружается через TCP/IP. Поэтому я должен иметь возможность прервать соединение, если у меня будет достаточно данных, верно? –

+0

Нет, поскольку веб-сервер уже написал ответ на сетевой сокет, если, конечно, сервер не использует закодированную кодировку передачи, но даже в этом случае он написал бы несколько фрагментов. Конечно, вы можете прерывать чтение (если вы используете TcpListener и опускаетесь на уровень TCP/IP), но вы уже потратили впустую полосу пропускания, о которой я думал, это то, чего вы изначально хотели избежать. –

+0

Я хочу сохранить пропускную способность, но, с другой стороны, он не должен быть на 100% эффективным. Это вопрос меры. Спасибо за ваш ответ и комментарий! –

0

Используйте WebClient.OpenRead(), который возвращает поток. Прочитайте нужное количество байтов и закройте поток.

+1

Тот факт, что вы прочитали только необходимое количество байтов из потока, вовсе не означает, что сервер еще не написал все тело ответа в сетевой сокет, теряя всю ширину полосы пропускания, которую хочет OP избегайте в первую очередь. –