封包:
封包是用戶端和伺服器端進行通信的内容,因為可以了解為機器之間通信的傳輸内容。
封包格式:
封包分為請求封包和響應封包
關于請求封包
請求封包格式
請求首行(請求行);
請求頭資訊(請求頭);
空行;
請求體;
請求封包分為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位址;