HTTP概述html
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。java
一、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。web
二、靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。瀏覽器
三、無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。緩存
四、無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。
五、支持B/S及C/S模式。服務器
HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行做爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。cookie
工做流程網絡
1. 客戶端鏈接到Web服務器
一個HTTP客戶端,一般是瀏覽器,與Web服務器的HTTP端口(默認爲80)創建一個TCP套接字鏈接。架構
2. 發送HTTP請求
經過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。分佈式
3. 服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
4. 釋放鏈接TCP鏈接
若connection 模式爲close,則服務器主動關閉TCP鏈接,客戶端被動關閉鏈接,釋放TCP鏈接;若connection 模式爲keepalive,則該鏈接會保持一段時間,在該時間內能夠繼續接收請求;
5. 客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看代表請求是否成功的狀態代碼。而後解析每個響應頭,響應頭告知如下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語 法對其進行格式化,並在瀏覽器窗口中顯示。
HTTP請求方式
HTTP最大的做用就是客戶端發送請求,服務器給出響應,客戶端想服務器發送請求的方式有不少。
PUT
和GET從服務器獲取資源相反,PUT用於想服務器寫入資源。PUT的語義就是讓服務器用請求的主體部分建立一個請求URL命名的文檔,若是存在就替換
TRACE
客戶端發送一個請求的時候,這個請求可能會穿過防火牆、代理、網關和一些其它應用程序,沒箇中間節點均可能修改HTTP請求,TRACE方法容許客戶端在最終請求發往服務器的時候,看看它變成了什麼樣子。
TRACE請求會在目的服務器端發送一個「閉環」診斷,行程最後一站服務器會彈回一條TRACE響應,並在響應主題中攜帶它收到的原始請求報文。
DELETE
DELETE方法用於要求服務器刪除請求的URL,和PUT同樣,服務器可能會不支持。
OPTIONS
OPTIONS方法用於請求 web服務器告知其支持的各類功能。
常見的狀態碼
200狀態碼:表示請求已成功,請求所但願的響應頭或數據體將隨此響應返回
201狀態碼:表示請求成功而且服務器建立了新的資源,且其 URI 已經隨Location 頭信息返回。假如須要的資源沒法及時創建的話,應當返回 '202 Accepted'
202狀態碼:服務器已接受請求,但還沒有處理
301狀態碼:被請求的資源已永久移動到新位置。服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。
302狀態碼:請求的資源臨時從不一樣的URI響應請求,但請求者應繼續使用原有位置來進行之後的請求
304自從上次請求後,請求的網頁未修改過。服務器返回此響應時,不會返回網頁內容。 若是網頁自請求者上次請求後再也沒有更改過,您應將服務器配置爲返回此響應(稱爲 If-Modified-Since HTTP 標頭)。
401狀態碼:請求要求身份驗證。 對於須要登陸的網頁,服務器可能返回此響應。
403狀態碼:服務器已經理解請求,可是拒絕執行它。與401響應不一樣的是,身份驗證並不能提供任何幫助,並且這個請求也不該該被重複提交。
404狀態碼:請求失敗,請求所但願獲得的資源未被在服務器上發現。沒有信息可以告訴用戶這個情況究竟是暫時的仍是永久的。假如服務器知道狀況的話,應當使用410狀態碼來告知舊資源由於某些內部的配置機制問題,已經永久的不可用,並且沒有任何能夠跳轉的地址。
404這個狀態碼被普遍應用於當服務器不想揭示到底爲什麼請求被拒絕或者沒有其餘適合的響應可用的狀況下。
500狀態碼:服務器遇到了一個不曾預料的情況,致使了它沒法完成對請求的處理。通常來講,這個問題都會在服務器的程序碼出錯時出現。
503狀態碼:因爲臨時的服務器維護或者過載,服務器當前沒法處理請求。一般,這個是暫時狀態,一段時間會恢復
URL
在WWW上,每一信息資源都有統一的且在網上惟一的地址,該地址就叫URL(Uniform Resource Locator,統一資源定位符),它是WWW的統一資源定位標誌,就是指網絡地址。
就如下面這個URL爲例,介紹下普通URL的各部分組成
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL能夠看出,一個完整的URL包括如下幾部分:
一、協議部分:該URL的協議部分爲「http:」,這表明網頁使用的是HTTP協議。在Internet中可使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的「//」爲分隔符
二、域名部分:該URL的域名部分爲「www.aspxfans.com」。一個URL中,也可使用IP地址做爲域名使用
三、端口部分:跟在域名後面的是端口,域名和端口之間使用「:」做爲分隔符。端口不是一個URL必須的部分,若是省略端口部分,將採用默認端口80
四、虛擬目錄部分:從域名後的第一個「/」開始到最後一個「/」爲止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是「/news/」
五、文件名部分:從域名後的最後一個「/」開始到「?」爲止,是文件名部分,若是沒有「?」,則是從域名後的最後一個「/」開始到「#」爲止,是文件部分,若是沒有「?」和「#」,那麼從域名後的最後一個「/」開始到結束,都是文件名部分。本例中的文件名是「index.asp」。文件名部分也不是一個URL必須的部分,若是省略該部分,則使用默認的文件名
六、錨部分:從「#」開始到最後,都是錨部分。本例中的錨部分是「name」。錨部分也不是一個URL必須的部分
七、參數部分:從「?」開始到「#」爲止之間的部分爲參數部分,又稱搜索部分、查詢部分。本例中的參數部分爲「boardID=5&ID=24618&page=1」。參數能夠容許有多個參數,參數與參數之間用「&」做爲分隔符。
原文連接:https://blog.csdn.net/ergouge/java/article/details/8185219
HTTP請求報文
一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,下圖給出了請求報文的通常格式。
報文由三個部分組成: 開始行,首部行和實體主體.在請求報文中,開始行就是請求行
1.請求行:由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
2.請求頭部:由鍵/值對組成,每行一對,鍵和值用英文冒號「:」分隔。請求頭部通知服務器有關於客戶端請求的信息
典型的經常使用請求頭有:
HTTP響應報文
通常狀況下,服務器接收並處理客戶端發過來的請求後會返回一個HTTP的響應消息。HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
常見的響應頭
Allow:服務器支持哪些請求方法(如GET、POST等)
參考連接:https://www.cnblogs.com/Saoz/articles/9979859.html
https://www.cnblogs.com/an-wen/p/11180076.html