朋友炒股兩個月賺了10萬,我幫他推廣一下公眾號,把錢用來投資總比放銀行連通貨膨脹都跑不過里強, 硬核離職,在家炒股 ,這是他每天的日志,有些經驗是花錢也買不到的。
目錄:
一、概念
二、詳解
a) 客戶端
b) 傳輸內容
c) 服務器
三、擴展內容引導
一、概念
Http協議中包含了兩個概念,一是Http,二是協議。
Http:HyperText Transfer Protocol,即是超文本傳輸協議。
協議:共同計划與協商。
課本上的概念總是讓人難以理解,下面用戶白話解釋下什么是Http和協議。我們從協議開始。
協議:多個方面在一起約定的一系列規則,然后大家一起去執行這個規則。
舉個例子:我們平時去飯店吃飯通常會有以下幾個步驟:1.坐到合適的座位上。2.服務員拿出菜單點餐。3.服務員按照點餐菜單下單。4.服務員上菜。5.吃飯。6.結賬走人。這是我們通常的步驟。如果把這些步驟和飯店約定好,每次到了這家飯店就按這個流程來執行,這一系列步驟就成了“我去飯店吃飯的協議”。我要遵循這個步驟,同樣飯店也要遵循這個步驟。再如:我們每天中午都會在12:00鍾准時去這家飯店吃一份“蛋炒飯”。如果我們與商家協定好,到了12點我們過去,商家就會主動提供一份“蛋炒飯”,那么這個就是“我們的午餐協議”。
Http協議(超文本傳輸協議):將各種不同空間的文字信息組織在一起的網狀文本數據交換而建立的規則、標准或約定。用技術語言解釋下就是:客戶端與服務端的一種數據通信約定與規則。客戶端如:瀏覽器、自己開發的應用程序或APP。服務端如:IIS\Tomcat等。說的再直白點,可以理解為我們使用瀏覽器訪問服務器端網頁時需要遵循的一系列規則(注:可以這么理解,但片面)。
二、詳解
1) 客戶端
客戶端主要職能有兩個,一個向服務器發送請求,另一個是接收服務器返回的報文並解釋成友善的信息供我們閱讀。
客戶端大概有以下幾類:瀏覽器、我們自己寫的應用程序(桌面應用和APP應用)、其他。我們在日常生活中使用最多的就是瀏覽器了。
下面我們以IE為示例:
我們在地址欄輸入網址並巧下回車,瀏覽器會為我們做如下的處理:
1、 解析出協議(http)、域名(www.cncoder.me)及訪問資源(index.html)
2、 使用http協議並創建請求報文向服務器端發送請求,圖2-2中的請求標頭。
3、 接收到服務器返回的內容並渲染展示。
在日常生活中,大部份客戶端的工作都由客戶端軟件進行了包裝和處理。但出於學習的目的我們使用最原始的命令telnet來模擬http請求,以加深對客戶端職能的理解。
點擊【開始】--【運行】--輸入cmd打開命令行窗口。在命令行窗口中輸入telnet www.cncoder.me 80 ,如下圖所示:
然后敲擊一下回車。
使用快捷鍵"Ctrl+]"(ctrl+右中括號)來打開本地回顯功能,這樣我們可以看到輸入到窗口的內容,否則輸入的內容不顯示。
再次敲擊一下回車。
此時出現空白窗口,我們就可以模擬http請求向服務器發送請求報文了。在窗口中輸入:
GET /index.html HTTP/1.1
Host:www.cncoder.me
如下圖所示:
注意此處敲擊兩下回車。成功后服務器返回的報文會顯示在命令行窗口,如下圖所示:
小結:客戶端主要處理發送請求及處理服務器返回的報文。
1) 傳輸內容
(1) URL:URL是尋找信息時所需要的資源位置。通過URL客戶端才能找到網絡中的大量數據資源 。如:http://www.cncoder.me/index.html 。
URL分為三個部分:
第一部分http是URL的方案,方案告訴客戶端使用什么樣的協議去訪問服務器了,也可以是fpt或https等。
第二部分www.cncoder.me ,指服務器的位置。
第三部分 /index.html是資源路徑,說明了請求的是服務器上哪個特定的本地資源。
URL語法:<方案>://<用戶名>:<密碼>@主機:端口/路徑;參數?查詢#片段
幾乎沒有幾個URL包含了所有這些組件。
方案:訪問服務器時使用的協議類型
用戶名:有些協議需要使用用戶名,如FTP匿名用戶登錄:ftp://anonymous@cncoder.me
密碼:有些協議需要使用密碼,如FTP用戶名密碼登錄:ftp://username:password@cncoder.me
主機:資源服務器的域名或IP地址
端口:服務器監聽的端口號,http協議默認是80端口。
路徑:服務器上本地資源的路徑。用“/”來分格。如:/theme/image/logo.png
參數:某些協議會輸入指定的參數,參數以name:value形式出現,中間用“;”來分格。
查詢:用“?”與其他的組件分格開,並用“&”來分隔查詢。如:?id=1&name=cncoder
片段:通常我們說是html中的錨點。使用在客戶端,不會傳送給服務器。
(2) 報文:HTTP報文可以分為兩類:請求報文和響應報文,清求報文會向服務器請求一個動作,響應報文會將請求的結果返回給客戶端。請求報文和響應報文的結構基本相同。
下面為我們獲取服務器上一張圖片的報文。
請求報文:
GET /Theme/Image/logo.png HTTP/1.1
Host:www.cncoder.me
響應報文:
HTTP/1.1 200 OK
Content-Type:image/gif
Conetnt-Length4567
圖片 |
請求報文的格式:
<方法><資源路徑><協議版本>
<報文頭信息>
<報文體信息>
響應報文格式
<協議版本><狀態碼><原因短語>
<報文頭信息>
<報文體信息>
請求報文和響應報文只有起始行的語法不同。
常見請求報文頭信息
Host:” www.cncoder.me”
User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"
Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
Accept-Encoding:"gzip, deflate"
Connection:"keep-alive"
常見響應頭信息
Content-Encoding:"gzip"
Content-Length:"1779"
Content-Type:"text/html"
Date:"Sun, 21 Aug 2016 11:45:07 GMT"
Last-Modified:"Sun, 21 Aug 2016 11:33:32 GMT"
Server:"Microsoft-IIS/7.5"
X-Powered-By:"ASP.NET"
(3) 方法:請求的起始行以方法作為起始,方法用來告訴服務器要如何做。如:GET /index.html HTTP/1.1 中的GET就是方法
- GET 請求指定的頁面信息,並返回實體主體。
- HEAD 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
- POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
- PUT 從客戶端向服務器傳送的數據取代指定的文檔的內容。
- DELETE 請求服務器刪除指定的頁面。
- CONNECT HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。
- OPTIONS 允許客戶端查看服務器的性能。
- TRACE 回顯服務器收到的請求,主要用於測試或診斷。
在開發過程中我們最常用的就是GET和POST方法。
(4) 狀態碼:當客戶端發起一次http請請求后,服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應客戶端的請求。HTTP狀態碼的英文為HTTP Status Code。
- 100~199 信息,服務器收到請求,需要請求者繼續執行操作
- 200~299 成功,操作被成功接收並處理
- 300~399 重定向,需要進一步的操作以完成請求
- 400~499 客戶端錯誤,請求包含語法錯誤或無法完成請求
- 500~599 服務器錯誤,服務器在處理請求的過程中發生了錯誤
常用狀態碼如下:
200-請求成功
404-請求的資源不存在
500-內部服務器錯誤
3) 服務器
(0) 服務器軟件一直在監聽端口是否有新的請求到達,如iis或tomcat在建立web站點后,默認會一直監聽80端口等待http請求到過服務器。
(1) 建立連接:如果客戶端已經打開一條到服務器的持久連接,則可以直接使用,否則,客戶端需要在服務器打開一條新的連接。
(2) 接收請求報文:連接上有數據到過時,Web服務器會從網絡連接中讀取數據,並將請求報文中的內容解析出來。
如請求報文
GET /index.html HTTP/1.1CRLF
Host:www.cncoder.me
Accept:text/htmlCRLF
接收后會被表示為
Name:Method Value:GET
Name:Uri Value:index.html
Name:Version 1.1
Name:Host Value:www.cncoder.me
Name:Accept Value:test/html
(3) 處理請求:當請求被接收和表示后,服務器便可以根據請求報文進行處理了。如:POST方法中提出報文主體的數據並插入到數據庫中。
(4) 訪問資源:請求處理完成后,比如Web會根據數據生成一系列的HTML頁面或圖片等信息。此步驟將訪問這些存儲在服務器上的物理文件。
(5) 構建響應:Web服務器在識別資源后,構造響應報文。響應報文中包含狀態碼、首行、主體等內容。
(6) 發送響應:服務器將響應的數據發送給客戶端機器。
(7) 記錄日志:請求結束會Web服務器會在日志文件中添加一條請求記錄。
三、擴展內容引導
- Web的組件結構中還包含代理、緩存、網關、隧道。
- HTTP協議是建立在TCP/IP協議基礎之上。
- HTTP性能很大一方面在於建立連接。HTTP/1.0時使用Keep-Alive。HTTP/1.1使用管道連接。
關注下面二維碼,同學習共進步。