Создайте http-запрос с помощью TcpClient

Я создал пустое веб-приложение asp.net, где у меня есть простая страница aspx:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello world");
}

когда я пойдуhttp://localhost:2006/1.aspx Я вижу страницу с надписью "Привет, мир".

Хорошо, так на c #, если я делаю:

WebClient webClient = new WebClient() { Proxy = null };
var response2 = webClient.DownloadString("http://localhost:2006/1.aspx");

тогда response2 == "Привет, мир"

Мне нужно добиться того же самого с помощью необработанного соединения TCP

Я пытаюсь добиться того же с помощью TCP-соединения, и по какой-то причине это не работает:

byte[] buf = new byte[1024];
string header = "GET http://localhost:2006/1.aspx HTTP/1.1\r\n" +
                "Host: localhost:2006\r\n" +
                "Connection: keep-alive\r\n" +
                "User-Agent: Mozilla/5.0\r\n" +
                "\r\n";

var client = new TcpClient("localhost", 2006);            

// send request
client.Client.Send(System.Text.Encoding.ASCII.GetBytes(header));

// get response
var i = client.Client.Receive(buf);
var response1 = System.Text.Encoding.UTF8.GetString(buf, 0, i);

здесь response1! = "Привет, Волд ".(обратите внимание, я использую! = значение НЕ равно)

В этом примере я получаю ошибку неверного запроса.

Я хочу использовать TCP-соединение в учебных целях. Я не понимаю, почему второй пример не работает. Моя первая реакция была, может быть, заголовки неверны, поэтому я запустил wireshark, чтобы увидеть заголовки, отправленные моим браузером chrom. На самом деле фактический запрос, отправленный моим браузером, когда я идуhttp://localhost:2006/1.aspx является:

GET http://localhost:2006/1.aspx HTTP/1.1
Host: localhost:2006
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

Я также пытался использовать этот запрос, и когда я это делаю, я также получал ответ на Bad Request! Зачем?

Другими словами я заменил

string header = "GET http://localhost:2006/1.aspx HTTP/1.1\r\n" +
                "Host: localhost:2006\r\n" +
                "Connection: keep-alive\r\n" +
                "User-Agent: Mozilla/5.0\r\n" +
                "\r\n";

ЗА

string header = "GET http://localhost:2006/1.aspx HTTP/1.1\r\n" +
        "Host: localhost:2006\r\n" +
        "Connection: keep-alive\r\n" +
        "Cache-Control: max-age=0\r\n" +
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n" +
        "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36\r\n" +
        "Accept-Encoding: gzip,deflate,sdch\r\n" +
        "Accept-Language: en-US,en;q=0.8" +
        "\r\n\r\n";

и все равно не работает.

Ответы на вопрос(1)

Ваш ответ на вопрос