HTTP協議通訊原理 (資源)

瞭解HTTP

HTTP(HyperText Transfer Protocol)是一套計算機經過網絡進行通訊的規則。計算機專家設計出HTTP,使HTTP客戶(如Web瀏覽器)可以從HTTP服務器(Web服務器)請求信息和服務。html

HTTP 是一個網絡協議,是專門用來幫你傳輸 Web 內容nginx

HTTPS   HTTP 協議」和「SSL/TLS 協議」的組合。web

·  http協議是無狀態的:每次請求都是一次新的請求,不會記得以前通訊的狀態chrome

·  httpd的多道處理三種模型  :   prefork 、work、event、apache

·  經過URL標記請求資源編程

·  Client    :     IE、Firefox、chrome、Opera、Safari瀏覽器

·  Server     :    Apache-httpd、IIS、nginx、lightpd、thttpd緩存

·  應用程序服務器tomcat

IIS、tomcat (apache ,解析jsp的,開源軟件)、Websphere (IBM,解析jsp的,商業軟件)、Weblogic (Oracle,解析jsp的,商業軟件 )、JBoss (RedHat)、、安全

·  在請求中 ,HTTP報文由方法、URI、HTTP版本、HTTP首部字段等部分構成 

· 在響應中 ,HTTP報文由狀態碼(數字和緣由短語)、HTTP版本、HTTP首部字段3部分構成 

· HTTP首部字段是由首部字段名字段值構成

· HTTP首部字段類型

             通用首部字段

             請求首部字段

             響應首部字段

             實體首部字段

· 次完整的http請求過程

    (1)創建或處理鏈接: 接收請求或拒絕請求

    (2)接收請求 :接收來自於網絡的請求報文中對某資源的一次請求的過程;

             併發訪問響應模型(Web I/O)

                 單進程 I/O結構 :  啓動一個進程處理用戶請求,並且一次只處理一個:多個請求被串行響應;               

                 多進程 I/O結構 :     並行啓動多個進程,每一個進程響應一個請求;

                 複用I/O結構 :一個進程響應n個請求;

                       多線程模型 : 一個進程生成N個線程,每一個線程響應一個用戶請求;

                       事件驅動 : event-driven

                複用的多進程 I/O結構 : 啓動多個(m)進程,每一個進程響應n個請求;

    (3)處理請求 : 對請求報文進行解析,並獲取請求的資源及請求方法等相關信息

            元數據 : 請求報文首部

                   <method>URL<VERSION>

                   Host : www.magedu.com  請求的主機名稱

                   Connection :

 

    (4)訪問資源 :獲取請求報文中請求的資源

             web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後生成的資源:這些資源放置於本地系統某路徑下,此路徑一般稱爲DocRoot

            /var/www/html/

                     images/1.jpg

           https://www.ming.com/images/1.jpg

          web服務器資源路徑映射方式 :

                      (a) docroot

                      (b)  alias          

                      (c) 虛擬主機docroot

                      (d)  用戶家目錄docroot

    (5)構建響應報文 :

              MIME類型 :

                       顯式分類 

                       魔法分類 

                       協商分類 

             URL重定向 :

                    web服務構架的響應並不是客戶端請求的資源,而是資源另一個訪問路徑;

    (6)發送響應報文

               

    (7)記錄日誌

http服務器程序 :

            httpd (apache)

            nginx

            lighttpd(輕量級)

            應用程序服務器 :

                    IIS

                   (輕量級)tomcat   , jetty   ,jboss   ,resin  ,

                   (重量級)webshpere  ,weblogic   ,   oc4j ,          

Web服務器的主要操做  : 

一、創建鏈接 --- 接受或拒絕客戶端鏈接請求;

二、接收請求 --- 經過網絡讀取HTTP請求報文;

三、處理請求 --- 解析請求報文並作出相應的動做;

四、訪問資源 --- 訪問請求報文中相關的資源;

五、構架響應 --- 使用正確的首部生成HTTP響應報文;

六、發送響應 --- 向客戶端發送生成的響應報文; 

七、記錄日誌 --- 當已經完成的HTTP事務記錄進日誌文件;

 

· httpd的特性

             高度模塊化 : core + modules

            DSO (動態共享對象): Dynamic Shared Object

            MMP(多路訪問模塊) :Multipath Processing Modules

                 prefork : 多進程模型,每個進程響應一個請求

                            一個主進程,負責生成n個子進程,子進程也稱爲工做流程,每一個子進程處理一個用戶請求,也會預先生成多個空閒進程,隨時等待請求到達:最大不會超過1024個;

                 worker :

                 event : 

· 客戶端與服務器端的一次通訊,就是一次會話

· 實現狀態保持的方式:在客戶端或服務器端存儲與會話有關的數據

· 存儲方式包括cookie、session,會話通常指session對象

· 使用cookie,全部數據存儲在客戶端,注意不要存儲敏感信息

· 推薦使用sesison方式,全部數據存儲在服務器端,在客戶端cookie中存儲session_id

· 狀態保持的目的是在一段時間內跟蹤請求者的狀態,能夠實現跨頁面訪問當前請求者的數據

· 注意:不一樣的請求者之間不會共享這個數據,與請求者一一對應

HTTP使用內容類型,是指Web服務器向Web瀏覽器返回的文件都有與之相關的類型。全部這些類型都被模型化,即Web服務器告訴Web瀏覽器該文件所具備的種類,是文檔、GIF格式圖像聲音文件仍是應用程序。它們告訴瀏覽器應該如何處理Web服務器發送過來的各類內容類型。

       端口可分爲虛擬端口和物理端口,其中虛擬端口指計算機內部或交換機路由器內的端口,不可見。例如計算機中的80端口、21端口、23端口等。物理端口又稱爲接口,是可見端口,計算機背板的RJ45網口,交換機路由器集線器等RJ45端口。電話使用RJ11插口也屬於物理端口的範疇。

     CPU經過接口寄存器或特定電路與外設進行數據傳送,這些寄存器或特定電路稱之爲端口。

      端口是指接口電路中的一些寄存器,這些寄存器分別用來存放數據信息、控制信息和狀態信息,相應的端口分別稱爲數據端口、控制端口和狀態端口。

 

HTTP 和 TCP 之間的關係

TCP 協議是 HTTP 協議的基石——HTTP 協議須要依靠 TCP 協議來傳輸數據。

在網絡分層模型中,TCP 被稱爲「傳輸層協議」,而 HTTP 被稱爲「應用層協議」。

TCP 被稱爲「面向鏈接」的傳輸層協議。傳輸層主要有兩個協議,分別是 TCP 和 UDP。TCP 比 UDP 更可靠。

有不少常見的應用層協議是以 TCP 爲基礎的,好比「FTP、SMTP、POP、IMAP」等。

 

HTTP 協議如何使用 TCP 鏈接:HTTP 對 TCP 鏈接的使用,分爲兩種方式:俗稱「短鏈接」和「長鏈接」(「長鏈接」又稱「持久鏈接」,洋文叫作「Keep-Alive」或「Persistent Connection」)

HTTP請求信息和響應信息的格式

請求:

(1)請求行

(2)請求頭信息

(3)請求主題信息(能夠沒有)

(4)頭信息結束後和主題信息之間要空一行

請求行又分3部分

請求方法   、請求路徑、所用的協議

請求 方法:GET、POST、PUT、DELETE、TRACE、OPTIONS

GET                  獲取資源       

POST                傳輸實體主體

PUT                       傳輸文件

HEAD                     得到報文首部

DELETE                   刪除文件

OPTIONS               詢問支持的方法

TRACE                    追蹤路徑

CONNECT              要求用隧道協議鏈接代理

LINK                       創建和資源之間的聯繫

UNLINK                  斷開鏈接關係

狀態碼,狀態文字

狀態碼是用來反服務器響應狀況

最多見的如200 OK,404 NOT FOUND

狀態文字是用來描述狀態碼的,便於人觀察。

 

                          HTTP響應中的狀態嗎

狀態碼                           定義                           說明

1xx                                信息                           接收到請求,繼續處理

2xx                                成功                           操做成功的收到,理解和接收

3xx                                重定向                         爲了完成請求,必須採起進一部措施

4xx                            客戶端錯誤                      請求的語法有錯誤或不能徹底被知足

5xx                             服務端錯誤                      服務器沒法完成明顯有效的請求

 

常見返回值

200       ---服務器成功返回網頁

301/2 ---   永久/臨時重定向

304 Not  ----  未修改                  --取緩存

失敗的狀態碼

404   ---請求的網頁不存在

503   -- 服務器暫時不可用

500 ---服務器內部錯誤

對稱加密和非對稱加密

「對稱加密技術」,意思就是說:「加密」和「解密」使用【相同的】密鑰。

「非對稱加密技術」,意思就是說:「加密」和「解密」使用【不一樣的】密鑰。

)「非對稱加密」能幹的事情比「對稱加密」要多。

                                                    HTTP通訊過程

HTTP通訊機制是在一次完整的HTTP通訊過程當中,Web瀏覽器與Web服務器之間將完成下列7個步驟

一、創建TCP鏈接

在HTTP工做開始以前,Web瀏覽器首先要經過網絡與Web服務器創建鏈接,該鏈接是經過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,所以Internet又被稱做是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議創建以後才能進行更深層協議的鏈接,所以,首先要創建TCP鏈接,通常TCP鏈接的端口號是80

 

二、Web瀏覽器向Web服務器發送請求命令

一旦創建了TCP鏈接,Web瀏覽器就會向Web服務器發送請求命令

例如:GET/sample/hello.jsp HTTP/1.1。

 

三、 Web瀏覽器發送請求頭信息

瀏覽器發送其請求命令以後,還要以頭信息的形式向Web服務器發送一些別的信息,以後瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。

 

四、Web服務器應答

客戶機向服務器發出請求後,服務器會客戶機回送應答,

HTTP/1.1 200 OK

應答的第一部分是協議的版本號和應答狀態碼。

五、Web服務器發送應答頭信息

正如客戶端會隨同請求發送關於自身的信息同樣,服務器也會隨同應答向用戶發送關於它本身的數據及被請求的文檔。

 

六、Web服務器向瀏覽器發送數據

Web服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。

 

七、Web服務器關閉TCP鏈接

通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼

Connection:keep-alive

TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。

                                               HTTP請求格式

當瀏覽器向Web服務器發出請求時,它向服務器傳遞了一個數據塊,也就是請求信息,HTTP請求信息由3部分組成:

  • 請求方法URI協議/版本

  • 請求頭(Request Header)

  • 空行

  • 請求正文

下面是一個HTTP請求的例子:

1GET/sample.jspHTTP/1.1
2Accept:image/gif.image/jpeg,*/*
3Accept-Language:zh-cn
4Connection:Keep-Alive
5Host:localhost
6User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
7Accept-Encoding:gzip,deflate
8username=jinqiao&password=1234

請求方法URI協議/版本

請求的第一行是「方法URL議/版本」:GET/sample.jsp HTTP/1.1

以上代碼中「GET」表明請求方法,「/sample.jsp」表示URI,「HTTP/1.1表明協議和協議的版本。

URL完整地指定了要訪問的網絡資源,一般只要給出相對於服務器的根目錄的相對目錄便可,所以老是以「/」開頭,最後,協議版本聲明瞭通訊過程當中使用HTTP的版本。

 

請求頭(Request Header)

請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭能夠聲明瀏覽器所用的語言,請求正文的長度等。

1Accept:image/gif.image/jpeg.*/*
2Accept-Language:zh-cn
3Connection:Keep-Alive
4Host:localhost
5User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
6Accept-Encoding:gzip,deflate.

 

請求正文

請求頭和請求正文之間是一個空行,這個行很是重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中能夠包含客戶提交的查詢字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP請求中,請求的正文只有一行內容。固然,在實際應用中,HTTP請求正文能夠包含更多的內容。

                                                      HTTP請求方法

 

方法

          描述

GET

客戶端請求指定資源信息,服務器返回指定資源

HEAO

只請求響應報文中的HTTP首部

POST

將客戶端的數據提交到服務器

PUT

用從客戶端向服務器傳送的數據取代指定文檔內容

DELETE

請求服務器刪除Request-URI所表示的資源

MOVE

請求服務器將指定的頁面移至另外一個網絡地址

 

這裏只討論GET方法與POST方法。

GET方法

GET方法是默認的HTTP請求方法,咱們平常用GET方法來提交表單數據,然而用GET方法提交的表單數據只通過了簡單的編碼,同時它將做爲URL的一部分向Web服務器發送,所以,若是使用GET方法來提交表單數據就存在着安全隱患上。

 

例如:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

從上面的URL請求中,很容易就能夠辯認出表單提交的內容。(?以後的內容)另外因爲GET方法提交的數據是做爲URL請求的一部分因此提交的數據量不能太大。

POST方法

POST方法是GET方法的一個替代方法,它主要是向Web服務器提交表單數據,尤爲是大批量的數據。POST方法克服了GET方法的一些缺點。經過POST方法提交表單數據時,數據不是做爲URL請求的一部分而是做爲標準數據傳送給Web服務器,這就克服了GET方法中的信息沒法保密和數據量過小的缺點。所以,出於安全的考慮以及對用戶隱私的尊重,一般表單提交時採用POST方法。

從編程的角度來說,若是用戶經過GET方法提交數據,則數據存放在QUERY_STRING環境變量中,而POST方法提交的數據則能夠從標準輸入流中獲取。

 

連接:HTTP 斷點續傳(PHP實現)https://mp.weixin.qq.com/s/nOUIj9q6-8b7_os5zQvxPQ

HTTP協議中POST、GET、HEAD、PUT等請求方法及相應值得含義  https://mp.weixin.qq.com/s/_X-eqZHlWVX3QA_evR8aRA

 

 

OSI模型 :https://mp.weixin.qq.com/s/5pxA2kyQO-tiSMbQRRZBnA

網際協議 -- IP : https://mp.weixin.qq.com/s/tyz2m3cdynCuqgKIPI3hAQ

傳輸控制協議 -- TCP : https://mp.weixin.qq.com/s/5t3MAed4VsYiFr84E6Dm-w

UNIX下的五種IO模型 : https://mp.weixin.qq.com/s/bXl9yKTuUyjAoR9FK7MzSg

TCP/IP 協議族簡介 : https://mp.weixin.qq.com/s/ZegPYeJk5vuA55S3euPnrg

HTTP 協議簡介 : https://mp.weixin.qq.com/s/oOJK-OU9U4GDkvw8izMKNw

相關文章
相關標籤/搜索