Коллекция заголовков "защищает" некоторые из возможных заголовков, как описано на странице msdn здесь: http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx
Эта страница, кажется, дает все ответы, которые вам нужны, но процитирует важную часть:
Некоторые общие заголовки считаются ограниченными и защищены системой и не могут быть установлены или изменены в объекте WebHeaderCollection.Любая попытка установить один из этих ограниченных заголовков в объекте WebHeaderCollection, связанном с объектом WebClient, вызовет исключение позже при попытке отправить запрос WebClient.
Ограниченные заголовки, защищенные системой, включают, но не ограничиваютсяследующее:
Date
Host
Кроме того, некоторые другие заголовки также ограничены при использовании объекта WebClient.Эти ограниченные заголовки включают, но не ограничиваются следующим:
Accept
Connection
Content-Length
Expect (when the value is set to "100-continue"
If-Modified-Since
Range
Transfer-Encoding
Класс HttpWebRequest имеет свойства для установки некоторых из вышеуказанных заголовков.Если для приложения важно установить эти заголовки, то вместо класса WebRequest следует использовать класс HttpWebRequest.
Я подозреваю, что причина этого заключается в том, что многие заголовки, такие как Date ихост должен быть установлен по-другому на другой запрос.Вы не должны копировать их.На самом деле, я бы лично предложил вам не копировать ни одну из них.Вставьте свой собственный пользовательский агент - если страница, которую вы получаете, использует определенное значение, то я думаю, вы хотите убедиться, что вы всегда отправляете действительное значение, а не полагаетесь на то, что исходный пользователь предоставит вам эту информацию.
По существу работайте над тем, что вам нужно делать, а не находите что-то, что работает, и делайте это без полного понимания того, что вы делаете.