天天看點

網絡工程之封包

封包:

封包是用戶端和伺服器端進行通信的内容,因為可以了解為機器之間通信的傳輸内容。

封包格式:

網絡工程之封包

封包分為請求封包和響應封包

關于請求封包

請求封包格式

請求首行(請求行);
請求頭資訊(請求頭);
空行;
請求體;
           

請求封包分為GET請求和POST請求

GET請求:

GET /Hello/index.jsp HTTP/1.1
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=C55836CDA892D9124C03CF8FE8311B15
           

1.GET /Hello/index.jsp HTTP/1.1:GET請求,請求伺服器路徑為Hello/index.jsp,協定為1.1;

2.Host:localhost:請求的主機名為localhost;

3.User-Agent: Mozilla/4.0 (compatible; MSIE 8.0…:與浏覽器和OS相關的資訊。有些網站會顯示使用者的系統版本和浏覽器版本資訊,這都是通過擷取User-Agent頭資訊而來的;

4.Accept: /:告訴伺服器,目前用戶端可以接收的文檔類型, /,就表示什麼都可以接收;

5.Accept-Language: zh-CN:目前用戶端支援的語言,可以在浏覽器的工具選項中找到語言相關資訊;

6.Accept-Encoding: gzip, deflate:支援的壓縮格式。資料在網絡上傳遞時,可能伺服器會把資料壓縮後再發送;

7.Connection: keep-alive:用戶端支援的連結方式,保持一段時間連結,預設為3000ms;

8.Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因為不是第一次通路這個位址,是以會在請求中把上一次伺服器響應中發送過來的Cookie在請求中一并發送過去。

POST請求:

POST請求要求将form标簽的method的屬性設定為post

網絡工程之封包
POST /Hello/target.html HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/Hello/
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 14
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=774DA38C1B78AE288610D77621590345

username=admin
           

1.POST請求有請求體,而GET請求沒有請求體。

2.Referer: http://localhost:8080/hello/index.jsp:請求來自哪個頁面,例如你在百度上點選連結到了這裡,那麼Referer:http://www.baidu.com;如果你是在浏覽器的位址欄中直接輸入的位址,那麼就沒有Referer這個請求頭了;

3.Content-Type: application/x-www-form-urlencoded:表單的資料類型,說明會使用url格式編碼資料;url編碼的資料都是以“%”為字首,後面跟随兩位的16進制,例如“傳智”這兩個字使用UTF-8的url編碼用為“%E4%BC%A0%E6%99%BA”;

4.Content-Length:13:請求體的長度,這裡表示13個位元組。

5.keyword=hello:請求體内容!hello是在表單中輸入的資料,keyword是表單字段的名字。

關于響應封包

封包格式

響應首行(響應行);
響應頭資訊(響應頭);
空行;
響應體;
           

代碼展示

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 274
Date: Tue, 07 Apr 2015 10:08:26 GMT


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
           

1.HTTP/1.1 200 OK:響應協定為HTTP1.1,狀态碼為200,表示請求成功;

2.Server: Apache-Coyote/1.1:伺服器的版本資訊;

3.Content-Type: text/html;charset=UTF-8:響應體使用的編碼為UTF-8;

4.Content-Length: 274:響應體為274位元組;

5.Date: Tue, 07 Apr 2015 10:08:26 GMT:響應的時間,這可能會有8小時的時區差;

附贈響應碼

響應碼對浏覽器來說很重要,它告訴浏覽器響應的結果;

200:請求成功,浏覽器會把響應體内容(通常是html)顯示在浏覽器中;

404:請求的資源沒有找到,說明用戶端錯誤的請求了不存在的資源;

500:請求資源找到了,但伺服器内部出現了錯誤;

302:重定向,當響應碼為302時,表示伺服器要求浏覽器重新再發一個請求,伺服器會發送一個響應頭Location,它指定了新請求的URL位址;

繼續閱讀