HTTP是什麼呢?它是超文本傳輸協議,HTTP是縮寫,它的全英文名是HyperText Transfer Protocol。
javascript
那麼什麼是超文本呢?css
超文本指的是HTML,css,JavaScript和圖片等,HTTP的出現是爲了接收和發佈HTML頁面的,通過不斷的發展也能夠用於接收一些音頻,視頻,文件等內容。html
HTTP協議是用於客戶端和服務器端之間的通訊的,用於客戶端和服務器端之間的通訊有HTTP協議和TCP/IP協議族內的其餘衆多的協議相同。java
請求訪問文本或圖片等資源的一方,咱們叫作客戶端,接收端,提供響應的一端稱爲服務器端。
jquery
Client客戶端請求Server服務端,Server服務端響應給Client客戶端。HTTP是基於客戶端/服務端的架構模型,瀏覽器或其餘任何客戶端均可以用HTTP協議的,經過URL地址向HTTP的服務器即Web服務器發送全部請求,Web服務器端在接收到請求後會作出反應,響應給對方,就是向客戶端回傳響應的信息。
程序員
《圖解HTTP》web
注意:在使用HTTP協議的時候,咱們一端一定是客戶端,另外一端一定是服務器端。
瀏覽器
有時候服務端和客戶端是能夠互換的,若是要決定誰是服務器端和誰是客戶端,單就一條通訊路線來說,是能夠肯定的,由於由HTTP協議就能夠區分誰是客戶端,和誰是服務器端了。緩存
經過發送信息(請求)和迴應信息(響應)達成交易(通訊)
bash
經過請求和響應的交互達成通訊,客戶端發送請求給服務器,服務器響應回覆給客戶端。客戶端是發出請求的,服務器端是回覆響應的。
先是從客戶端開始創建通訊的,由於在服務器在沒有接受到請求前是不會發送響應的。
HTTP的特色:
支持客戶端、服務器端模式,簡單快速,客戶端向服務器端請求服務時,只需傳送請求方法和路徑,靈活,HTTP容許傳輸任意類型的數據對象,無鏈接,限制每次鏈接只處理一個請求,無狀態,HTTP協議是無狀態協議,指明協議對於事務處理沒有記憶能力。
HTTP都是由客戶端發起請求的,而且由服務器端迴應響應消息的。
靈活,咱們知道容許能夠任何類型的數據對象,包括音頻,視頻,圖片,文件等等。
無狀態,HTTP就是說,每次HTTP請求都是獨立的,任何兩個請求之間沒有必然的聯繫。
無鏈接的,每次服務器在處理完客戶端的請求後,並收到客戶的應答後,就斷開了通訊,當客戶端再次發送請求時就是一個新的鏈接,採用這種方式能夠節省傳輸時間。
這是HTTP/1.0版的主要缺點,每一個TCP鏈接只能發送一個請求,發送數據完畢後,鏈接就關閉了,若是還要請求就必需要新建一個請求鏈接。
HTTP是一種不保存狀態,無狀態協議,協議對於發送過來的請求或是響應都不作持久化處理。
HTTP1.1雖然是無狀態協議,可是爲了實現指望的保持狀態功能,因而引入了Cookie技術,有了Cookie,和HTTP協議通訊,就能夠管理狀態了。
TCP鏈接的新建成本很高,由於須要客戶端和服務器端三次握手。
交流的簡單流程:客戶端發起鏈接,客戶端發起請求,服務器端響應請求,服務器端關閉鏈接。
HTTP、1.1版本是最流行的版本,能夠持久鏈接,TCP鏈接默認不關閉,能夠被多個請求複用,只有在一段時間內,沒有請求,就能夠自動關閉。
// 不用聲明:Connection: keep-alive// 發送關閉Connection: close// 要求服務器關閉TCP鏈接複製代碼
咱們能夠把HTTP協議當作是一種客戶端和服務器端相互溝通交流的語言,一個HTTP客戶端在向服務器發送請求時會攜帶請求的消息,服務器端會根據客戶端發送過來的請求消息瞭解客戶端的需求,從而服務器端作出響應,發送響應消息給客戶端。
請求消息的結構:
一個請求消息是由請求行,請求頭字段,一個空行和消息主體構成。
消息主體是響應消息的承載數據。
客戶端:發送請求
客戶端發送給某個HTTP服務器端的請求報文中的內容
GET/HTTP/1.1Host: hackr.jp複製代碼
服務器:發送響應
HTTP/1.1 200 OKDate: Tue, 10 Jul ...Content.Length: 362Content.Type: text/html<html>...複製代碼
GET,Request Method,請求方法,Request URL,爲請求的url的地址,Status Code爲狀態碼,Remote Address爲地址。
HTTP是基於TCP/IP協議的應用層協議,不涉及數據包傳輸,規定了客戶端和服務器端之間的通訊方式,默認使用80端口,就如同他倆交流的語言。
HTTP1.0的發佈,任何格式的內容均可以發送了,不只能夠發送文件,圖片,視頻,二進制文件等。
HTTP發送請求的例子:
服務器迴應消息格式:
響應頭:
Server爲服務器的名稱,Location爲通知客戶端新的資源位置,Content-Type響應數據的類型,Content-Encoding爲響應數據的編碼格式。
頭部信息迴應的是ASCII碼,後面的數據能夠是任何形式,服務器返回信息的時候,告訴客戶端數據是什麼格式的,由Content-Type字段體現。
Content-Type的字段值:
text/plaintext/htmltext/cssimage/jpeg// 上面的圖片返回的是image/pngimage/svg+xmlaudio/mp4video/mp4application/javascriptapplication/pdfapplication/zipapplication/atom+xml複製代碼
分析一下就是,協議版本,狀態碼,狀態描述。
在尾部使用分號,添加參數,類型表示,發送的是網頁,編碼爲utf-8
Content-Type: text/html; charset=utf-8複製代碼
Accept字段聲明本身能夠接受哪些數據格式:
Accept: */*複製代碼
請求消息:
GET /index.htm HTTP/1.1User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)Host: example.comAccept-Language: en-usAccept-Encoding: gzip, deflate複製代碼
Accept爲客戶端接受哪些Mine類型,Accept-Encoding支持的編碼類型,Accept-Language爲可接受的語言,User-Agent爲一個標識客戶端的字符串。
字符串index.htm指明瞭請求訪問的資源對象,也叫作請求URL,後面的是HTTP/1.1,爲HTTP版本號,表示客戶端使用的HTTP版本協議。
URL爲請求的URL地址,協議版本爲表明在向服務器發送請求時,使用的協議以及其版本,請求頭部爲HTTP請求頭部包含若干個屬性,格式:
「屬性名」:「屬性值」,服務器端能夠據此獲取客戶端請求的相關信息。
客戶端請求用Accept-Encoding字段說明本身能夠接受哪些壓縮方式
Accept-Encoding: gzip, deflate複製代碼
請求行爲請求消息的第一行,它說明了請求方法,資源標示符,HTTP版本,以下:
請求URI定位資源:HTTP協議使用URI定位互聯網上的資源。
《圖解HTTP》
URI,URL,URN是用來識別,定位和命名互聯網上的資源。
URI:Uniform Resource Identifier,統一資源標識符URL:Uniform Resource Locator,統一資源定位符URN:Uniform Resource Name,統一資源名稱複製代碼
由HTTP版本,狀態碼,狀態描述文字構成:
HTTP/1.1 200 OK複製代碼
GET /hello.htm HTTP/1.1請求訪問某臺HTTP服務器上的index.htm頁面資源複製代碼
請求報文是由請求方法,請求URL,協議版本,可選的請求首部字段和內容實體構成的。
請求報文的解構
消息報頭
響應報文由協議版本,狀態碼,響應的首部字段,以及實體主體構成。
HTTP的請求方法有不少,可是最多見的兩種請求方法是GET和POST
提交HTML表單或上傳文件
《圖解HTTP》
《圖解HTTP》
POST:傳輸實體主體
POST 方法用來傳輸實體的主體。
《圖解HTTP》
PUT:傳輸文件
PUT 方法用來傳輸文件。
《圖解HTTP》
HEAD:得到報文首部
DELETE 方法用來刪除文件,是與 PUT 相反的方法。
OPTIONS:詢問支持的方法
OPTIONS 方法用來查詢針對請求 URI 指定的資源支持的方法。
1.GET爲獲取資源數據get方法用於請求指定的頁面信息,並返回請求消息的主體2.POST爲提交資源數據post方法用於向指定的資源提交數據3.PUT爲更新資源數據4.DELETE爲刪除資源數據5.HEAD爲讀取資源的元數據6.OPTIONS爲讀取資源多支持的全部請求方法7.TRACE爲回顯服務器收到額請求8.CONNECT爲保留未來使用複製代碼
HTTP超文本傳輸協議是一個基於請求與響應模式的,無狀態的,應用層的協議,常基於TCP的鏈接方式。HTTP表示經過HTTP協議定位網絡資源,host表示合法的Internet主機域名或者ip地址,port指定爲端口號。
第一行:方法,URL,協議版本
第二行:請求首部字段
第三行:內容實體
客戶端的請求消息:
請求方法,URL,協議版本爲請求行,請求頭部,頭部字段名,值,請求數據,一個HTTP請求的請求消息包括請求行,請求頭部,空行和請求數據。
服務器端響應消息:
狀態行,消息報頭,空行,響應正文,這是一個HTTP響應的響應消息。
狀態行,HTTP/1.1爲表示使用的協議是HTTP的版本,咱們能夠看到狀態碼常見返回「200 0k」表明是服務器成功響應了這次請求,消息報頭,與HTTP請求頭部同樣,格式爲「屬性名:屬性值",客戶端能夠根據此獲取服務器端響應的信息,響應正文是服務器返回響應的東西給到客戶端,也是客戶端想要的東西。
超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯網上應用最爲普遍的一種網絡協 議。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。經過HTTP或者HTTPS協議請求的資源由 統一資源標識符(Uniform Resource Identifiers,URI)來標識。
HTTP狀態碼(英語:HTTP Status Code)是用以表示網頁服務器HTTP響應狀態的3位數字代碼。它由RFC 2616規範定義的,並獲得RFC 251八、RFC 281七、RFC 229五、RFC 277四、RFC 4918等規範擴展。
HTTP狀態碼是用來幹什麼的呢?它的重要做用是Web服務器用來告訴客戶端,當前的網頁請求發生什麼事情了,或者是當前web服務器端的響應狀態,HTTP狀態碼是服務器端返回給客戶端的。
你比較常見的狀態碼有哪些呢?
有200,301,302,304,404,500,403。
咱們最多見的狀態碼爲200,狀態碼200表示服務器響應成功,服務器找到了客戶端請求的內容,並將內容發送給了客戶端。
咱們程序員有時候也常見的500,狀態碼500表示程序錯誤,就是說請求的網頁程序自己就報錯了。
如今的瀏覽器會對狀態碼500作出必定的處理,因此在通常狀況下會返回一個定製的錯誤頁面。
狀態碼404表示服務器上沒有該資源,或者說是服務器上沒有找到客戶端請求的資源,是最多見的請求錯誤碼。
狀態碼301表示臨時跳轉。
url地址a能夠向url地址b上跳轉,但這並不意味着是永久性的,有可能太短時間就從url地址a跳轉到地址c。
而狀態碼302表明的是永久性的重定向。
2xx:
200爲請求已經成功,202爲服務器已經接受請求,但還沒有處理,204爲服務器成功處理了請求,但不須要返回如何實體內容。
304狀態碼,被請求的資源內容沒有發生更改。
400爲包含語法錯誤,沒法被服務器解析,403爲服務器已經接收請求,可是被拒絕執行,404請求失敗。
500爲服務器內部錯誤,沒法處理請求,502爲做爲網關或者代理工做的服務器嘗試執行請求時,從上游服務器接收到無效響應,504爲做爲網關或者代理工做的服務器嘗試執行請求時,未能及時從上游服務器(URI標識出的服務器,例如HTTP、FTP、LDAP)或者輔助服務器(例如DNS)收到響應
200 OK
請求被正確處理
302 Found
所請求的資源已暫時更改.一般會重定向到另外一個 URL
404 Not Found
所請求的資源沒法找到
500 Internal Server Error
服務器出現通常性錯誤
本地服務器編寫一個demo.html文檔:
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javsscript" src="/js/jquery.js"> </script> </head> <body> <img src="/images/01.jpg"><br> </body></html>複製代碼
消息頭是在客戶端發送請求時,向服務器傳輸的信息。
Accept爲告訴服務器接收哪些格式的文件,Accept-Encoding爲接收的編碼方式,Accept-Language爲接收的語言,Cache-Control爲是否使用緩存,Connection爲鏈接方式,Cookie爲向服務器發送的Cookie信息,Host爲服務器域名。
Content-Length爲服務器返回給客戶端的內容的長度,Content-Type爲服務器返回給客戶端的內容的類型,Keep-Alive爲緩存的時間,Server爲服務器的相關信息。
HTTP過程當中包含3個重要部分,消息頭,響應頭和狀態碼。
消息頭中存放的信息是客戶端告訴服務器能回傳什麼,就是客戶端能接收的信息是什麼類型的,若是客戶端須要傳值,則傳值信息也會放在消息頭中。
響應頭中存放的信息是服務器告訴客戶端返回的內容相關信息,包括回傳內容的長度,內容和緩存的時間等。
狀態碼爲服務器告訴客戶端它的響應結果是什麼。
打開Chrome,在菜單中選擇「視圖」,「開發者」,「開發者工具」:
Elements顯示網頁的結構,Network顯示瀏覽器和服務器的通訊。Content-Type指示響應的內容,這裏是text/html表示HTML網頁。
HTTP的消息分爲兩種,請求和響應。
// 一個 簡單的HTTP請求:GET / HTTP/1.1Host: example.comConnection: close複製代碼
HTTP/1.1 200 OKContent-Type: text/plain; charset=utf-8Content-Length: 8response複製代碼
HTTP消息由三部分組成,首行,消息頭和消息體。消息頭和消息體都可覺得空。
請求行
請求行由三部分組成,分別是方法(GET),URI(/)和http版本(HTTP/1.1)
GET / HTTP/1.1複製代碼
消息頭
消息頭host用於指定所請求的域名。
請求消息包括如下格式:
更多狀態碼:
https://www.runoob.com/http/http-status-codes.html複製代碼
參考資料
http://yuez.me/http-xie-yi-jie-xi/
《圖解HTTP》
感謝閱讀,原創不易,喜歡就點個[在看] or [轉發朋友圈],這是我寫做最大的動力。
—————END—————
喜歡本文的朋友,歡迎關注公衆號 程序員小灰,收看更多精彩內容