Http請求

HTTP簡介

HTTP協議,全稱為Hyper Text Transfer Protocol,中文名為超文本傳輸協議,是互聯網中最常用的一種網絡協議。

當我們設計一個通信協議時,“消息頭/消息體”的分割方式是很常用的,消息頭告訴對方這個消息是干什么的,消息體告訴對方怎么干。HTTP協議傳輸的消息也是這樣規(guī)定的,每一個HTTP包都分為HTTP頭和HTTP體兩部分,消息體是可選的,而消息頭是必須的。每當我們打開一個網頁,在上面點擊右鍵,選擇“查看源文件”,這時看到的HTML代碼就是HTTP的消息體,那么消息頭可以通過瀏覽器的開發(fā)工具或者插件可以看到,如果火狐的Firebug,IE的Httpwatch。

客戶端通過發(fā)送 HTTP 請求向服務器請求對資源的訪問。 它向服務器傳遞了一個數據塊,也就是請求信息,HTTP 請求由三部分組成:請求行、 請求頭和請求正文。

請求行:請求方法 URI 協議/版本

請求頭(Request Header)
請求正文

下面是一個HTTP請求的數據:

POST /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: <a target=_blank href="http://localhost/" style="color: rgb(51, 102, 153); text-decoration: none;">http://localhost/</a>
Content-Length:25
Content-Type:application/x-www-form-urlencoded
 
username=aa&password=1234

HTTP協議中最主要的是HTTP/1.0HTTP/1.1,其中HTTP/1.0是第一個得到廣泛使用的版本,而1.1逐漸成為當前使用的主流。

HTTP協議永遠都是客戶端發(fā)起請求,服務器回送響應。見下圖:


Client-Server.jpg
1、HTTP請求行:請求方法URI協議/版本

HTTP1.0定義了三種請求方法: GET, POSTHEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。

HTTP1.1 中的請求方式:

序號 方法 作用
1 GET 請求獲取由 Request-URI 所標識的資源
2 POST 請求服務器接收在請求中封裝的實體,并將其作為由 Request-Line中的 Request-URI 所標識的資源的一部分
3 HEAD 請求獲取由 Request-URI 所標識的資源的響應消息報頭
4 PUT 請求服務器存儲一個資源,并用 Request-URI 作為其標識符
5 DELETE 請求服務器刪除由 Request-URI 所標識的資源
6 TRACE 請求服務器回送到的請求信息,主要用于測試或診斷
7 CONNECT 保留將來使用
8 OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
2、請求頭

每個頭域由一個域名,冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴展為多行,在每行開始處,使用至少一個空格或制表符。

HTTP最常見的請求頭如下:

Transport 頭域
Connection:
作用:表示是否需要持久連接。

例如: Connection: keep-alive 當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的 網頁,會繼續(xù)使用這一條已經建立的連接

例如: Connection: close 代表一個Request完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接會關閉, 當客戶端再次發(fā)送Request,需要重新建立TCP連接。

HTTP響應格式

在接收和解釋請求消息后,服務器會返回一個 HTTP 響應消息。與 HTTP 請求類似,HTTP 響應也是由三個部分組成,分別是:狀態(tài)行、消息報頭和響應正文。如:

<p>HTTP/1.1 200 OK
Date: Sun, 17 Mar 2013 08:12:54 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8</p><p>
<html>
<head>
<title>HTTP響應示例<title>
</head>
<body>
Hello HTTP!
</body>
</html></p><p> </p>
1、狀態(tài)行

狀態(tài)行由協議版本、數字形式的狀態(tài)代碼,及相應的狀態(tài)描述組成,各元素之間以空格分隔,結尾時回車換行符,格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

HTTP-Version 表示服務器 HTTP 協議的版本,Status-Code 表示服務器發(fā)回的響應代碼,Reason-Phrase 表示狀態(tài)代碼的文本描述,CRLF 表示回車換行。例如:

HTTP/1.1 200 OK (CRLF)

狀態(tài)代碼與狀態(tài)描述

狀態(tài)代碼由 3 位數字組成, 表示請求是否被理解或被滿足,狀態(tài)描述給出了關于狀態(tài)碼的簡短的文字描述。狀態(tài)碼的第一個數字定義了響應類別,后面兩位數字沒有具體分類。第一個數字有 5 種取值,如下所示。

1xx:指示信息——表示請求已經接受,繼續(xù)處理
2xx:成功——表示請求已經被成功接收、理解、接受。
3xx:重定向——要完成請求必須進行更進一步的操作
4xx:客戶端錯誤——請求有語法錯誤或請求無法實現
5xx:服務器端錯誤——服務器未能實現合法的請求。

常見狀態(tài)代碼、狀態(tài)描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發(fā)生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常

2、響應正文

響應正文就是服務器返回的資源的內容,響應頭和正文之間也必須用空行分隔。如:

<html>  
<head>  
<title>HTTP響應示例<title>  
</head>  
<body>  
Hello HTTP!  
</body>  
</html> 
3 、響應頭信息

HTTP最常見的響應頭如下所示:
Cache頭域
Date:

作用:生成消息的具體時間和日期,即當前的GMT時間。
例如: Date: Sun, 17 Mar 2013 08:12:54 GMT

瀏覽器緩存

瀏覽器緩存:包括頁面html緩存和圖片js,css等資源的緩存。如下圖,瀏覽器緩存是基于把頁面信息保存到用戶本地電腦硬盤里。


瀏覽器緩存

緩存的優(yōu)點:
1)服務器響應更快:因為請求從緩存服務器(離客戶端更近)而不是源服務器被相應,這個過程耗時更少,讓服務器看上去響應更快。
2)減少網絡帶寬消耗:當副本被重用時會減低客戶端的帶寬消耗;客戶可以節(jié)省帶寬費用,控制帶寬的需求的增長并更易于管理。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,590評論 19 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,742評論 6 152
  • 通常HTTP消息包括客戶機向服務器的請求消息和服務器向客戶機的響應消息??蛻舳讼蚍掌靼l(fā)送一個請求,請求頭包含請求...
    簡不簡單_都好閱讀 756評論 0 4
  • 當我們在瀏覽器的地址欄輸入 www.linux178.com ,然后回車,回車這一瞬間到看到頁面到底發(fā)生了什么呢?...
    Ddaidai閱讀 1,287評論 0 12
  • 回到故鄉(xiāng) 溫麻新姿 遠離父母的故鄉(xiāng),生長在一個全新的天地。我的思緒早已迷失在這塊父母曾經流浪過的土地上,抑或她已經...
    溫麻新姿A閱讀 227評論 0 8

友情鏈接更多精彩內容