http請求

HTTP--Hyper Text Transfer Protocol,超文本傳輸協議,是一種創建在TCP上的無狀態鏈接。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器處理請求而後響應,響應的內容包括協議的版本、狀態碼、狀態短語、響應頭部和響應數據。html

 

HTTP之請求消息Request

客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:瀏覽器

請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
Http請求消息結構.png
  • 請求行包括請求方法,請求URL和協議的版本。
POST請求例子,使用Charles抓取的request:
POST / HTTP1.1 Host:www.wrox.com User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Content-Type:application/x-www-form-urlencoded Content-Length:40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley

第一部分:請求行,第一行明瞭是post請求,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請求數據,第八行。緩存

 

HTTP之響應消息Response

通常狀況下,服務器接收並處理客戶端發過來的請求後會返回一個HTTP的響應消息。安全

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。

 


http響應消息格式.jpg

例子服務器

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html> <head></head> <body> <!--body goes here--> </body> </html>
第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態短語 三部分組成。

第一行爲狀態行,(HTTP/1.1)代表HTTP版本爲1.1版本,狀態碼爲200,狀態消息爲(ok)app

第二部分:消息報頭,用來講明客戶端要使用的一些附加信息

第二行和第三行爲消息報頭,
Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8框架

第三部分:空行,消息報頭後面的空行是必須的
第四部分:響應正文,服務器返回給客戶端的文本信息。

空行後面的html部分爲響應正文。分佈式

 

HTTP之狀態碼

狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:post

1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已經處理完成
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態碼:大數據

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

更多狀態碼http://www.runoob.com/http/http-status-codes.html

 

Cookie和Session的區別和聯繫

  Cookie和Session都是爲了保存客戶端和服務端之間的交互狀態,實現機制不一樣,各有優缺點。

首先一個最大的區別就是Cookie是保存在客戶端而Session就保存在服務端的。在實際使用中就要結合Cookie和Session的優缺點針對不一樣的問題來設計解決方案。

Cookie是客戶端請求服務端時服務器會將一些信息以鍵值對的形式返回給客戶端,保存在瀏覽器中,交互的時候能夠加上這些Cookie值。用Cookie就能夠方便的作一些緩存。Cookie的缺點是大小和數量都有限制;Cookie是存在客戶端的可能被禁用、刪除、篡改,是不安全的;Cookie若是很大,每次要請求都要帶上,這樣就影響了傳輸效率。

Session是基於Cookie來實現的,不一樣的是Session自己存在於服務端,可是每次傳輸的時候不會傳輸數據,只是把表明一個客戶端的惟一ID(一般是JSESSIONID)寫在客戶端的Cookie中,這樣每次傳輸這個ID就能夠了。Session的優點就是傳輸數據量小,比較安全。可是Session也有缺點,就是若是Session不作特殊的處理容易失效、過時、丟失或者Session過多致使服務器內存溢出,而且要實現一個穩定可用安全的分佈式Session框架也是有必定複雜度的。

 

什麼是Http協議無狀態協議?怎麼解決Http協議無狀態協議?

  • 無狀態協議,指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。

  • 能夠使用Cookie來解決無狀態的問題,Cookie就至關於一個通行證,第一次訪問的時候給客戶端發送一個Cookie,當客戶端再次來的時候,拿着Cookie(通行證),那麼服務器就知道這個是」老用戶「。

 

http1.1的特色
a、默認持久鏈接,節省通訊量,只要客戶端服務端任意一端沒有明確提出斷開TCP鏈接,就一直保持鏈接,能夠發送屢次HTTP請求 。
b、管線化(pipelining),客戶端能夠同時發出多個HTTP請求,而不用一個個等待響應 。
c、斷點續傳,就是能夠將一個大數據,分段傳輸,客戶端能夠慢慢顯示。

http2.0的特色 a、二進制分幀,採用二進制格式而非文本格式 。其中 HTTP1.x 的首部信息會被封裝到 HEADER frame,而相應的 Request Body 則封裝到 DATA frame 裏面。b、多路複用,容許同時經過單一的 HTTP/2 鏈接發起多重的請求-響應消息。c、首部壓縮,下降開銷 d、服務器推送,服務器能夠對一個客戶端請求發送多個響應,服務器向客戶端推送資源無需客戶端明確的請求。

相關文章
相關標籤/搜索