1. 程式人生 > >【Http協議】Http協議簡介

【Http協議】Http協議簡介

HTTP簡介

HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。

HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等)。

HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。

HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求。Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。

http請求-響應模型.jpg

主要特點

1、簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

2、靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

3.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。HTTP1.1 開始支援長連線。

4.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
5、支援B/S及C/S模式。

HTTP之URL

HTTP使用統一資源識別符號(Uniform Resource Identifiers, URI)來傳輸資料和建立連線。URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊

URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是網際網路上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:

從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔符

2.域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用

3.埠部分:跟在域名後面的是埠,域名和埠之間使用“:”作為分隔符。埠不是一個URL必須的部分,如果省略埠部分,將採用預設埠

4.虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”

5.檔名部分:從域名後的最後一個“/”開始到“?”為止,是檔名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”為止,是檔案部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是檔名部分。本例中的檔名是“index.asp”。檔名部分也不是一個URL必須的部分,如果省略該部分,則使用預設的檔名

6.錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分

7.引數部分:從“?”開始到“#”為止之間的部分為引數部分,又稱搜尋部分、查詢部分。本例中的引數部分為“boardID=5&ID=24618&page=1”。引數可以允許有多個引數,引數與引數之間用“&”作為分隔符。

URI和URL的區別

URI,是uniform resource identifier,統一資源識別符號,用來唯一的標識一個資源。

Web上可用的每種資源如HTML文件、影象、視訊片段、程式等都是一個來URI來定位的
URI一般由三部組成:
①訪問資源的命名機制
②存放資源的主機名
③資源自身的名稱,由路徑表示,著重強調於資源。

URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何locate這個資源。

URL是Internet上用來描述資訊資源的字串,主要用在各種WWW客戶程式和伺服器程式上,特別是著名的Mosaic。
採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的地址和目錄等。URL一般由三部組成:
①協議(或稱為服務方式)
②存有該資源的主機IP地址(有時也包括埠號)
③主機資源的具體地址。如目錄和檔名等

URN,uniform resource name,統一資源命名,是通過名字來標識資源,比如mailto:[email protected]

URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。籠統地說,每個 URL 都是 URI,但不一定每個 URI 都是 URL。這是因為 URI 還包括一個子類,即統一資源名稱 (URN),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。

在Java的URI中,一個URI例項可以代表絕對的,也可以是相對的,只要它符合URI的語法規則。而URL類則不僅符合語義,還包含了定位該資源的資訊,因此它不能是相對的。
在Java類庫中,URI類不包含任何訪問資源的方法,它唯一的作用就是解析。
相反的是,URL類可以開啟一個到達資源的流。

HTTP之請求訊息Request

客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式:

請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成。

<br />

Http請求訊息結構.png

  • 請求行以一個方法符號開頭,以空格分開,後面跟著請求的URI和協議的版本。

Get請求例子,使用\抓取的request:

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept  image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8

第一部分:請求行,用來說明請求型別,要訪問的資源以及所使用的HTTP版本.

GET說明請求型別為GET,[/562f25980001b1b106000338.jpg]為要訪問的資源,該行的最後一部分說明使用的是HTTP1.1版本。

第二部分:請求頭部,緊接著請求行(即第一行)之後的部分,用來說明伺服器要使用的附加資訊

從第二行起為請求頭部,HOST將指出請求的目的地.User-Agent,伺服器端和客戶端指令碼都能訪問它,它是瀏覽器型別檢測邏輯的重要基礎.該資訊由你的瀏覽器來定義,並且在每個請求中自動傳送等等

第三部分:空行,請求頭部後面的空行是必須的

即使第四部分的請求資料為空,也必須有空行。

第四部分:請求資料也叫主體,可以新增任意的其他資料。

這個例子的請求資料為空。

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響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文。

<br />

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)

第二部分:訊息報頭,用來說明客戶端要使用的一些附加資訊

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

第三部分:空行,訊息報頭後面的空行是必須的

第四部分:響應正文,伺服器返回給客戶端的文字資訊。

空行後面的html部分為響應正文。

HTTP之狀態碼

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

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請求方法

根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET  請求指定的頁面資訊,並返回實體主體。
HEAD     類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
POST     向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
PUT  從客戶端向伺服器傳送的資料取代指定的文件的內容。
DELETE   請求伺服器刪除指定的頁面。
CONNECT  HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
OPTIONS  允許客戶端檢視伺服器的效能。
TRACE    回顯伺服器收到的請求,主要用於測試或診斷。

HTTP工作原理

HTTP協議定義Web客戶端如何從Web伺服器請求Web頁面,以及伺服器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向伺服器傳送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求資料。伺服器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤程式碼、伺服器資訊、響應頭部和響應資料。

以下是 HTTP 請求/響應的步驟:

1、客戶端連線到Web伺服器

一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。例如,http://www.oakcms.cn

2、傳送HTTP請求

通過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。

3、伺服器接受請求並返回HTTP響應

Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。

4、釋放連線TCP連線

若connection 模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection 模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;

5、客戶端瀏覽器解析HTML內容

客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。然後解析每一個響應頭,響應頭告知以下為若干位元組的HTML文件和文件的字符集。客戶端瀏覽器讀取響應資料HTML,根據HTML的語法對其進行格式化,並在瀏覽器視窗中顯示。

例如:在瀏覽器位址列鍵入URL,按下回車之後會經歷以下流程:

1、瀏覽器向 DNS 伺服器請求解析該 URL 中的域名所對應的 IP 地址;

2、解析出 IP 地址後,根據該 IP 地址和預設埠 80,和伺服器建立TCP連線;

3、瀏覽器發出讀取檔案(URL 中域名後面部分對應的檔案)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的資料傳送給伺服器;

4、伺服器對瀏覽器請求作出響應,並把對應的 html 文字傳送給瀏覽器;

5、釋放 TCP連線;

6、瀏覽器將該 html 文字並顯示內容;

GET和POST請求的區別

GET請求

GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive

注意最後一行是空行

POST請求

POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

1、GET提交,請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),以?分割URL和傳輸資料,多個引數用&連線;例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果資料是英文字母/數字,原樣傳送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進製表示的ASCII。

POST提交:把提交的資料放置在是HTTP包的包體中。上文示例中紅色字型標明的就是實際的傳輸資料

因此,GET提交的資料會在位址列中顯示出來,而POST提交,位址列不會改變

2、傳輸資料的大小:首先宣告:HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。

而在實際開發中存在的限制主要有:

GET:特定瀏覽器和伺服器對URL長度有限制,例如 IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系 統的支援。

因此對於GET提交時,傳輸資料就會受到URL長度的 限制。

POST:由於不是通過URL傳值,理論上資料不受 限。但實際各個WEB伺服器會規定對post提交資料大小進行限制,Apache、IIS6都有各自的配置。

3、安全性

POST的安全性要比GET的安全性高。比如:通過GET提交資料,使用者名稱和密碼將明文出現在URL上,因為(1)登入頁面有可能被瀏覽器快取;(2)其他人檢視瀏覽器的歷史紀錄,那麼別人就可以拿到你的賬號和密碼了,除此之外,使用GET提交資料還可能會造成Cross-site request forgery攻擊

4、Http get,post,soap協議都是在http上執行的

(1)get:請求引數是作為一個key/value對的序列(查詢字串)附加到URL上的
查詢字串的長度受到web瀏覽器和web伺服器的限制(如IE最多支援2048個字元),不適合傳輸大型資料集同時,它很不安全

(2)post:請求引數是在http標題的一個不同部分(名為entity body)傳輸的,這一部分用來傳輸表單資訊,因此必須將Content-type設定為:application/x-www-form- urlencoded。post設計用來支援web窗體上的使用者欄位,其引數也是作為key/value對傳輸。
但是:它不支援複雜資料型別,因為post沒有定義傳輸資料結構的語義和規則。

(3)soap:是http post的一個專用版本,遵循一種特殊的xml訊息格式
Content-type設定為: text/xml 任何資料都可以xml化。

Http協議定義了很多與伺服器互動的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個URL地址用於描述一個網路上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了。GET一般用於獲取/查詢資源資訊,而POST一般用於更新資源資訊.

我們看看GET和POST的區別

  1. GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的資料放在HTTP包的Body中.

  2. GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制.

  3. GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來獲取變數的值。

  4. GET方式提交資料,會帶來安全問題,比如一個登入頁面,通過GET方式提交資料時,使用者名稱和密碼將出現在URL上,如果頁面可以被快取或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該使用者的賬號和密碼.



連結:https://www.jianshu.com/p/80e25cb1d81a

相關推薦

Http協議Http協議簡介

HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。 HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML

PHP常見面試題 PHP基礎-網路協議HTTP/1.1中,狀態碼 200 301 304 403 404 500 的含義。

文章目錄 一、考點 1、HTTP協議狀態碼 ① 狀態碼的作用: ② 五類響應:1XX、2XX、3XX、4XX、5XX ③ 常見狀態碼:

基礎原理HTTP協議

【前言】        最近被調到了測試組工作,再熟悉了Jmeter的使用之後,發現Jmeter返回的測試報告中多數是http的報文,或者狀態碼。 趁著這次機會也把原來欠的知識都補上,http協議這塊

Java網路協議Http,TCP/IP,Socket,XMMP

// 網路層次結構:應用層,傳輸層,網路層,資料鏈路層,物理層 // Http協議:應用層協議,定義資料如何包裝 // TCP/IP協議:傳輸層協議,定義資料如何傳輸 // UDP協議:也是傳輸層協議,定義資料如何傳輸 // Socket:一組對TCP/IP協

筆試必備HTTP協議各種狀態程式碼

當瀏覽器向Web伺服器請求服務時,有時會有錯誤產生,這是筆試經常會有的,記住了就簡單,沒記住就傻逼吧。以下列表給出了產生錯誤時返回的HTTP狀態程式碼: 1xx:資訊 狀態程式碼: 描述: 100 Continue 伺服器收到的請求不完整,但伺服器沒有拒絕請求,

網絡協議TCP協議簡單介紹

tis sim 發生 ron html tcp協議 緩沖 應用程序 不可 ? ? 本文僅僅是對TCP協議做個簡要的介紹。? ? TCP協議,即傳輸控制協議。與UDP協

總結整理http-https

log 整理 消息 cer 基本原理 ati 公鑰加密 簽名 如何 上面這種加密消息的方式就是對稱加密,你知道如何加密,也知道如何解碼。然後李雷跟韓梅梅用的字母表偏移的加密方法叫 Caesar cipher, 凱撒加密。現實世界中用的加密算法會更復雜,但是基本原理相同。 上

無極圈wxid協議軟件加人效果如何

網絡 宣傳 標簽 名稱 輸入 依然 單純 軟件 但是 網絡推廣加粉,無論是以前加到QQ,還是現在加到微信,在網上永遠都是一個經久不衰的話題,也永遠有人在網上不斷的找加粉的方法,一個不行就換下一個,不停的周而復始。而很多的人本身又比較懶,手工的方法還不想做,就想著怎麽樣用軟件

SIP基礎SIP協議訊息-掌握SIP的核心方法

SIP訊息有兩種型別:請求和響應。 一個請求的開啟行包含定義,其中該請求是要被髮送的方法,它定義請求,以及請求URI。 同樣響應的開啟行包含一個響應程式碼。 請求方法 SIP請求是用於建立通訊的程式碼。為了補充它們,SIP響應其通常指示請求是成功還是失敗。 有

angularjs學習$http

General usage The $http service is a function which takes a single argument — a configuration object — that is used to generat

經驗總結Http,網頁訪問,HttpRequest,HttpResponse相關的知識

以下記錄自己在用C#語言,實現網頁內容抓取,模擬登陸網頁等過程中,所從無到有,一點點知道的一些知識,記錄下來,以供參考(高手不要笑哈): 1.Host不是自己指定/設定的,而是http請求會自動去設定 用C#寫http請求的header中,開始以為Host也是自己設

檔案操作Http的request上傳檔案獲取檔名稱

public static String getFileName(InputStream is) throws IOException { StringBuffer sb =

ASP.NETHTTP中的 get 和 post 請求

GET和POST是什麼?HTTP協議中的兩種傳送請求的方法。 HTTP是什麼?HTTP是基於TCP/IP的關於資料如何在全球資訊網中如何通訊的協議。 HTTP的底層是TCP/IP。所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP連

Http認證Http的四種認證方式

一、Http Basic Authentication 基本認證 將認證的資訊填寫到請求頭,參考部落格文章: 二、Http Digest Authentication Digest認證 以上這兩種認證方式都是一種無狀態的認證方式,就是不需要伺服器端

C#.NETHttp Handler 介紹

Http Handler 介紹 引言 在 Part.1 Http請求處理流程 一文中,我們瞭解了Http請求的處理過程以及其它一些運作原理。我們知道Http管道中有兩個可用介面,一個是IHttpHandler,一個是IHttpModule,但在Part.1中,我並沒

Web基礎HTTP長連線和短連線以及推送技術原理

HTTP長連線和短連線 1. HTTP協議與TCP/IP協議的關係 HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。IP協議主要解決網路路由和定址問題,TCP協議主要解決

WebAPI系列http請求方法

2、http的請求方法 2.1Get (1)一般由於獲取查詢資源,對應DB中的Select操作,為http請求常用方法 ;(2)該操作對系統來說,是安全的,因為其只查詢而不修改資料; (3)冥等的,對同一URL多次請求得到的結果應該是相同的;(4)引數

計算機網路:SMTP協議詳解(如何在控制檯發郵件)

SMTP的連線和傳送過程 (a)建立TCP連線 (b)客戶端傳送HELO命令以標識發件人自己的身份,然後客戶端傳送MAIL命令; 伺服器端正希望以OK作為響應,表明準備接收 (c)客戶端傳送RCPT命令,以標識該電子郵件的計劃接收人,可以有多

B/SHTTP錯誤500.23-Internal Server Error

前言:        今天在釋出網站的時候遇到了HTTP錯誤500.23,因為釋出網站的經驗不足,所以看見這種錯誤就蒙圈了,實在不知道該如何是好,首先來張圖:   後來通過查資料解決了這個問題。

報錯HTTP Status 405

在jsp通過js跳轉到servlet學習中,總是遇到如下錯誤:HTTP Status 405 - HTTP method GET is not supported by this URL查閱到相關的文章:https://blog.csdn.net/qfs_v/article/