Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日韩精品一区二区三区在线观看,亚洲精品www,亚洲免费成人在线

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          架構基礎之了解一下HTTP協議

          、概念

          HTTP協議:即超文本傳輸協議(Hypertext transfer protocol)。是一種詳細規定了瀏覽器和Web服務器之間互相通信的規則,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。
          它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先于圖形)等。
          HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。

          在Internet中所有的傳輸都是通過TCP/IP進行的。HTTP協議作為TCP/IP模型中應用層的協議也不例外。HTTP協議通常承載于TCP協議之上,有時也承載于TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。
          HTTP是一個屬于應用層的面向對象的協議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統。它于1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規范化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。

          無狀態協議:
          協議的狀態是指下一次傳輸可以“記住”這次傳輸信息的能力。
          HTTP是不會為了下一次連接而維護這次連接所傳輸的信息,為了保證服務器內存。
          比如客戶獲得一張網頁之后關閉瀏覽器,然后再一次啟動瀏覽器,再登陸該網站,但是服務器并不知道客戶關閉了一次瀏覽器。
          由于Web服務器要面對很多瀏覽器的并發訪問,為了提高Web服務器對并發訪問的處理能力,在設計HTTP協議時規定Web服務器發送HTTP應答報文和文檔時,不保存發出請求的Web瀏覽器進程的任何狀態信息。這有可能出現一個瀏覽器在短短幾秒之內兩次訪問同一對象時,服務器進程不會因為已經給它發過應答報文而不接受第二期服務請求。由于Web服務器不保存發送請求的Web瀏覽器進程的任何信息,因此HTTP協議屬于無狀態協議(Stateless Protocol)。

          HTTP協議是無狀態的和Connection: keep-alive的區別:
          無狀態是指協議對于事務處理沒有記憶能力,服務器不知道客戶端是什么狀態。從另一方面講,打開一個服務器上的網頁和你之前打開這個服務器上的網頁之間沒有任何聯系。
          HTTP是一個無狀態的面向連接的協議,無狀態不代表HTTP不能保持TCP連接,更不能代表HTTP使用的是UDP協議(無連接)。
          從HTTP/1.1起,默認都開啟了Keep-Alive,保持連接特性,簡單地說,當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。
          Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。

          HTTP中文譯名問題
          HTTP超文本傳輸協議,聽上去像是傳輸層的協議一樣,但事實上大家都知道HTTP和FTP一樣都是屬于應用層的協議。既然是應用層的協議,怎 么就取這樣一個誤導人的名稱?在對TCP/IP協議還不熟悉的時候,這很容易讓人誤解和納悶的。在wiki上有這么一段話:
          HTTP在中國大陸被翻譯為“超文本傳輸協議”,因為“transfer”在中文里有“傳輸”的含意。但依據 HTTP 定制者之一的 Roy Fielding博士的論文[1](6.5.3節),作者專門強調“transfer”表示的是“(表述狀態的)轉移” (Representational State Transfer),而不是“傳輸”(transport)。故其中文譯名“超文本傳輸協議”恰恰反映了這種誤解。更符合原義的譯名應該為“超文本轉移協議”。

          二、特點

          HTTP協議的主要特點可概括如下:

          支持客戶/服務器模式。支持基本認證和安全認證。

          簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

          靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

          HTTP 0.9和1.0使用非持續連接:限制每次連接只處理一個請求,服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。
          HTTP 1.1使用持續連接:不必為每個Web對象創建一個新的連接,一個連接可以傳送多個對象,采用這種方式可以節省傳輸時間。

          無狀態:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

          永遠都是客戶端發起請求,服務器回送響應。這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。

          HTTP默認的端口號為80,HTTPS的端口號為443。

          三、工作流程

          一次HTTP操作稱為一個事務,其工作過程可分為四步:

          首先客戶機與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。

          建立連接后,客戶機發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號,后邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。

          服務器接到請求后,給予相應的響應信息,其格式為一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,后邊是MIME信息包括服務器信息、實體信息和可能的內容。

          客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然后客戶機與服務器斷開連接。
          如果在以上過程中的某一步出現錯誤,那么產生錯誤的信息將返回到客戶端,有顯示屏輸出。對于用戶來說,這些過程是由HTTP自己完成的,用戶只要用鼠標點擊,等待信息顯示就可以了。
          HTTP是基于傳輸層的TCP協議,而TCP是一個端到端的面向連接的協議。所謂的端到端可以理解為進程到進程之間的通信。所以HTTP在開始傳輸之前,首先需要建立TCP連接,而TCP連接的過程需要所謂的“三次握手”。在TCP三次握手之后,建立了TCP連接,此時HTTP就可以進行傳輸了。一個重要的概念是面向連接,既HTTP在傳輸完成之間并不斷開TCP連接。在HTTP1.1中(通過Connection頭設置)這是默認行為。

          四、頭域

          每個頭域由一個域名,冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴展為多行,在每行開始處,使用至少一個空格或制表符。
          HTTP消息由客戶端到服務器的請求和服務器到客戶端的響應組成。請求消息和響應消息都是由開始行(對于請求消息,開始行就是請求行,對于響應消息,開始行就是狀態行),消息報頭(可選),空行(只有CRLF的行),消息正文(可選)組成。

          1、 請求消息

          HTTP請求由三部分組成,分別是:請求行、消息報頭、請求正文。發出的請求消息格式如下:

          請求行,例如GET /images/logo.gif HTTP/1.1,表示從/images目錄下請求logo.gif這個文件。

          請求頭,每一個報頭域都是由名字+“:”+空格+值 組成,消息報頭域的名字是大小寫無關的。例如Accept-Language: en

          可選的消息體 請求行和標題必須以<CR><LF>作為結尾(也就是,回車然后換行)。空行內必須只有<CR><LF>而無其他空格。在HTTP/1.1協議中,所有的請求頭,除post外,都是可選的。

          (1)請求行

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

          格式如下:Method Request-URI HTTP-Version CRLF

          Method表示請求方法;

          Request-URI是一個統一資源標識符;

          HTTP-Version表示請求的HTTP協議版本;

          CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字符)。
          a.請求方法:

          HTTP/1.1協議中共定義了八種方法(有時也叫“動作”)來表明Request-URI指定的資源的不同操作方式:GET 向特定的資源發出請求。注意:GET方法不應當被用于產生“副作用”的操作中,例如在web app.中。其中一個原因是GET可能會被網絡蜘蛛等隨意訪問。POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。HEAD 向服務器索要與GET請、求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容

          一般情況下,就可以獲取包含在響應消息頭中的元信息。該方法常用于測試超鏈接的有效性,是否可以訪問,以及最近是否更新。PUT 向指定資源位置上傳其最新內容。DELETE 請求服務器刪除Request-URI所標識的資源。TRACE 回顯服務器收到的請求,主要用于測試或診斷。CONNECT HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。OPTIONS 返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發送'*'的請求來測試服務器的功能性。注:HTTP服務器至少應該實現GET和HEAD方法,其他方法都是可選的。此外,除了上述方法,特定的HTTP服務器還能夠擴展自定義的方法。

          b.GET和POST的區別:

          GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中。
          GET提交的數據大小有限制,最多只能有1024字節(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制。
          GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。
          GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼。


          (2)請求報頭

          請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
          常用的請求報頭:

          Accept:瀏覽器端可以接受的MIME類型。例如:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文本。
          Accept-Charset:Accept-Charset請求報頭域用于指定客戶端接受的字符集。例如:Accept-Charset:iso-
          8859-1,gb2312.如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受。
          Accept-Encoding:瀏覽器申明自己可接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate)
          Accept-Language :瀏覽器申明自己接收的語言。語言跟字符集的區別:中文是語言,中文有多種字符集,比如big5,gb2312,gbk等等;例如:Accept-Language: en-us。如果請求消息中沒有設置這個報頭域,服務器假定客戶端對各種語言都可以接受。
          Accept-Charset:瀏覽器可接受的字符集。如果在請求消息中沒有設置這個域,缺省表示任何字符集都可以接受。
          User-Agent:告訴HTTP服務器,客戶端使用的操作系統和瀏覽器的名稱和版本。
          例如:User-Agent: Mozilla/
          4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
          Authorization:授權信息,通常出現在對服務器發送的WWW-Authenticate頭的應答中。主要用于證明客戶端有權查看某個資源。當瀏覽器訪問一個頁面時,如果收到服務器的響應代碼為401(未授權),可以發送一個包含Authorization請求報頭域的請求,要求服務器對其進行驗證。
          Host:(發送請求時,該頭域是必需的)主要用于指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的,發送請求時,該報頭域是必需的。HTTP/
          1.1請求必須包含主機頭域,否則系統會以400狀態碼返回。
          例如: 我們在瀏覽器中輸入:http:
          //luyucheng.cnblogs.com/index.html
          瀏覽器發送的請求消息中,就會包含Host請求報頭域,如下:
          Host:luyucheng.cnblogs.com
          此處使用缺省端口號80,若指定了端口號,則變成:Host:luyucheng.cnblogs.com:指定端口號
          Cookie:最重要的請求頭之一, 將cookie的值發送給HTTP服務器。
          Content-Length:表示請求消息正文的長度。例如:Content-Length:
          38
          Content-Type:例如:Content-Type: application/x-www-form-urlencoded。
          From:請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。
          Range:可以請求實體的一個或者多個子范圍。例如,
          表示頭500個字節:bytes=
          0-499
          表示第二個500字節:bytes=
          500-999
          表示最后500個字節:bytes=-
          500
          表示500字節以后的范圍:bytes=
          500-
          第一個和最后一個字節:bytes=
          0-0,-1
          同時指定幾個范圍:bytes=
          500-600,601-999
          但是服務器可以忽略此請求頭,如果無條件GET包含Range請求頭,響應會以狀態碼206(PartialContent)返回而不是以200(OK)。
          If-Modified-Since:把瀏覽器端緩存頁面的最后修改時間發送到服務器去,服務器會把這個時間與服務器上實際文件的最后修改時間進行對比。如果時間一致,那么返回304,客戶端就直接使用本地緩存文件。如果時間不一致,就會返回200和新的文件內容。客戶端接到之后,會丟棄舊文件,把新文件緩存起來,并顯示在瀏覽器中。
          例如:If-Modified-Since: Thu,
          09 Feb 2012 09:07:57 GMT
          If-None-Match:If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。當用戶再次請求該資源時,將在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服務器驗證資源的ETag沒有改變(該資源沒有更新),將返回一個304狀態告訴客戶端使用本地緩存文件。否則將返回200狀態和新的資源和Etag. 使用這樣的機制將提高網站的性能。例如: If-None-Match:
          "03f2b33c0bfcc1:0"
          Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。提供了Request的上下文信息的服務器,告訴服務器我是從哪個鏈接過來的,比如從我主頁上鏈接到一個朋友那里,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。
          例如: Referer:http:
          //luyucheng.cnblogs.com/
          Pragma:指定“no-cache”值表示服務器必須返回一個刷新后的文檔,即使它是代理服務器而且已經有了頁面的本地拷貝;在HTTP/
          1.1版本中,它和Cache-Control:no-cache作用一模一樣。Pargma只有一個用法, 例如:Pragma: no-cache
          注意: 在HTTP/
          1.0版本中,只實現了Pragema:no-cache, 沒有實現Cache-Control
          Connection:
          例如:Connection: keep-alive 當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。HTTP
          1.1默認進行持久連接。利用持久連接的優點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現這一點,Servlet需要在應答中發送一個Content-Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,然后在正式寫出內容之前計算它的大小。
          Connection: close 代表一個Request完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接會關閉,當客戶端再次發送Request,需要重新建立TCP連接。
          Host:(發送請求時,該頭域是必需的)主要用于指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的。HTTP/
          1.1請求必須包含主機頭域,否則系統會以400狀態碼返回。
          例如: 我們在瀏覽器中輸入:http:
          //luyucheng.cnblogs.com/index.html,瀏覽器發送的請求消息中,就會包含Host請求頭域:Host:http://luyucheng.cnblogs.com,此處使用缺省端口號80,若指定了端口號,則變成:Host:指定端口號。
          Cookie:最重要的請求頭之一, 將cookie的值發送給HTTP服務器。
          Authorization:授權信息,通常出現在對服務器發送的WWW-Authenticate頭的應答中。主要用于證明客戶端有權查看某個資源。當瀏覽器訪問一個頁面時,如果收到服務器的響應代碼為401(未授權),可以發送一個包含Authorization請求報頭域的請求,要求服務器對其進行驗證。
          UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操作系統和CPU類型。
          From:請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。
          Range:可以請求實體的一個或者多個子范圍。例如,
          表示頭500個字節:bytes=
          0-499
          表示第二個500字節:bytes=
          500-999
          表示最后500個字節:bytes=-
          500
          表示500字節以后的范圍:bytes=
          500-
          第一個和最后一個字節:bytes=
          0-0,-1
          同時指定幾個范圍:bytes=
          500-600,601-999
          但是服務器可以忽略此請求頭,如果無條件GET包含Range請求頭,響應會以狀態碼206(PartialContent)返回而不是以200(OK)。
          Cache-Control:指定請求和響應遵循的緩存機制。緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(在請求消息或響應消息中設置Cache-Control并不會修改另一個消息處理過程中的緩存處理過程)。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-
          if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
          Cache-Control:Public 可以被任何緩存所緩存
          Cache-Control:Private 內容只緩存到私有緩存中
          Cache-Control:no-cache 所有內容都不會被緩存
          Cache-Control:no-store 用于防止重要的信息被無意的發布。在請求消息中發送將使得請求和響應消息都不使用緩存。
          Cache-Control:max-age 指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。
          Cache-Control:min-fresh 指示客戶機可以接收響應時間小于當前時間加上指定時間的響應。
          Cache-Control:max-stale 指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。

          2、響應消息

          HTTP響應由三部分組成,分別是:狀態行、響應報頭、響應正文。
          客戶端向服務器發送一個請求,服務器以一個狀態行作為響應,響應的內容包括:消息協議的版本、成功或者錯誤編碼、服務器信息、實體元信息以及必要的實體內容。根據響應類別的類別,服務器響應里可以含實體內容,但不是所有的響應都有實體內容。
          (1)狀態行
          響應頭第一行也稱為狀態行,格式如下:

          HTTP-Version 空格 Status-Code 空格 Reason-Phrase CRLF
          HTTP-Version表示HTTP版本,例如為HTTP/1.1。
          Status-Code是結果狀態響應碼,用三個數字表示。
          Reason-Phrase是個簡單的文本描述,解釋Status-Code的具體原因。Status-Code用于機器自動識別,Reason-Phrase用于人工理解。Status-Code的第一個數字代表響應類別,可能取5個不同的值。后兩個數字沒有分類作用。Status-Code的第一個數字代表響應的類別,后續兩位描述在該類響應下發生的具體狀況


          a.狀態響應碼:
          無論你何時瀏覽一個網頁,你的電腦都會通過一個使用HTTP協議的服務器來獲取所請求的數據。在你請求的網頁顯示在瀏覽器之前,支配網頁的網站服務器會返回一個包含有狀態碼的HTTP頭文件。這個狀態碼提供了有關所請求網頁的相關條件信息。如果一切正常,一個標準網頁會收到一條諸如200的狀態碼。當然我們的目的不是去研究200響應碼,而是去探討那些代表出現錯誤信息的服務器頭文件響應碼,例如表示“未找到指定網頁”的404碼。

          搜索公眾號后端架構師后臺回復“架構整潔”,獲取一份驚喜禮包。

          1xx(信息類):表示接收到請求并且繼續處理
          100 客戶必須繼續發出請求
          101 客戶要求服務器根據請求轉換HTTP協議版本
          2xx(響應成功):表示動作被成功接收、理解和接受
          200 表明該請求被成功地完成,所請求的資源發送回客戶端
          201 提示知道新文件的URL
          202 接受和處理、但處理未完成
          203 返回信息不確定或不完整
          204 請求收到,但返回信息為空
          205 服務器完成了請求,用戶代理必須復位當前已經瀏覽過的文件
          206 服務器已經完成了部分用戶的GET請求
          3xx(重定向類):為了完成指定的動作,必須接受進一步處理
          300 請求的資源可在多處得到
          301 本網頁被永久性轉移到另一個URL
          302 請求的網頁被轉移到一個新的地址,但客戶訪問仍繼續通過原始URL地址,重定向,新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發出新的Request。
          303 建議客戶訪問其他URL或訪問方式
          304 自從上次請求后,請求的網頁未修改過,服務器返回此響應時,不會返回網頁內容,代表上次的文檔已經被緩存了,還可以繼續使用
          305 請求的資源必須從服務器指定的地址得到
          306 前一版本HTTP中使用的代碼,現行版本中不再使用
          307 申明請求的資源臨時性刪除
          4xx(客戶端錯誤類):請求包含錯誤語法或不能正確執行
          400 客戶端請求有語法錯誤,不能被服務器所理解
          401 請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
          HTTP
          401.1 未授權:登錄失敗
          HTTP
          401.2 未授權:服務器配置問題導致登錄失敗
          HTTP
          401.3 ACL 禁止訪問資源
          HTTP
          401.4 未授權:授權被篩選器拒絕
          HTTP
          401.5 未授權:ISAPI 或 CGI 授權失敗
          402 保留有效ChargeTo頭響應
          403 禁止訪問,服務器收到請求,但是拒絕提供服務
          HTTP
          403.1 禁止訪問:禁止可執行訪問
          HTTP
          403.2 禁止訪問:禁止讀訪問
          HTTP
          403.3 禁止訪問:禁止寫訪問
          HTTP
          403.4 禁止訪問:要求 SSL
          HTTP
          403.5 禁止訪問:要求 SSL 128
          HTTP
          403.6 禁止訪問:IP 地址被拒絕
          HTTP
          403.7 禁止訪問:要求客戶證書
          HTTP
          403.8 禁止訪問:禁止站點訪問
          HTTP
          403.9 禁止訪問:連接的用戶過多
          HTTP
          403.10 禁止訪問:配置無效
          HTTP
          403.11 禁止訪問:密碼更改
          HTTP
          403.12 禁止訪問:映射器拒絕訪問
          HTTP
          403.13 禁止訪問:客戶證書已被吊銷
          HTTP
          403.15 禁止訪問:客戶訪問許可過多
          HTTP
          403.16 禁止訪問:客戶證書不可信或者無效
          HTTP
          403.17 禁止訪問:客戶證書已經到期或者尚未生效
          404 一個404錯誤表明可連接服務器,但服務器無法取得所請求的網頁,請求資源不存在。例如:輸入了錯誤的URL
          405 用戶在Request-Line字段定義的方法不允許
          406 根據用戶發送的Accept拖,請求資源不可訪問
          407 類似401,用戶必須首先在代理服務器上得到授權
          408 客戶端沒有在用戶指定的餓時間內完成請求
          409 對當前資源狀態,請求不能完成
          410 服務器上不再有此資源且無進一步的參考地址
          411 服務器拒絕用戶定義的Content-Length屬性請求
          412 一個或多個請求頭字段在當前請求中錯誤
          413 請求的資源大于服務器允許的大小
          414 請求的資源URL長于服務器允許的長度
          415 請求資源不支持請求項目格式
          416 請求中包含Range請求頭字段,在當前請求資源范圍內沒有range指示值,請求也不包含If-Range請求頭字段
          417 服務器不滿足請求Expect頭字段指定的期望值,如果是代理服務器,可能是下一級服務器不能滿足請求長。
          5xx(服務端錯誤類):服務器不能正確執行一個正確的請求
          500 服務器遇到錯誤,無法完成請求
          HTTP
          500.11 服務器關閉
          HTTP
          500.12 應用程序重新啟動
          HTTP
          500.13 服務器太忙
          HTTP
          500.14 應用程序無效
          HTTP
          500.15 不允許請求 global.asa
          HTTP
          500.100 內部服務器錯誤 - ASP 錯誤
          501 未實現
          502 網關錯誤
          503 由于超載或停機維護,服務器目前無法使用,一段時間后可能恢復正常

          (2)響應報頭

          服務器需要傳遞許多附加信息,這些信息不能全放在狀態行里。因此,需要另行定義響應報頭,用來描述這些附加信息。響應報頭主要描述服務器的信息和Request-URI的信息。
          常用的響應報頭:

          Location:重定向接受者到一個新的位置。Location響應報頭域常用在更換域名的時候。
          Server:指明HTTP服務器用來處理請求的軟件信息。例如:Server: Microsoft-IIS/
          7.5、Server:Apache-Coyote/1.1。此域能包含多個產品標識和注釋,產品標識一般按照重要性排序。
          Refresh:表示瀏覽器應該在多少時間之后刷新文檔,以秒計。
          WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應消息中,客戶端收到401響應消息時候,并發送Authorization報頭域請求服務器對其進行驗證時,服務端響應報頭就包含該報頭域。
          WWW-Authenticate:Basic realm=
          "Basic Auth Test!" //可以看出服務器對請求資源采用的是基本驗證機制。
          Connection:
          例如:
          Connection: keep-alive 當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。
          Connection: close 代表一個Request完成后,客戶端和服務器之間用于傳輸HTTP數據的TCP連接會關閉,當客戶端再次發送Request,需要重新建立TCP連接。
          Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。提供了Request的上下文信息的服務器,告訴服務器我是從哪個鏈接過來的,例如從我主頁上鏈接到一個朋友那里,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。
          例如: Referer:http:
          //luyucheng.cnblogs.com/
          Content-Encoding:WEB服務器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應中的對象。只有在解碼之后才可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。例如:Content-Encoding:gzip
          Content-Language:WEB服務器告訴瀏覽器自己響應的對象所用的自然語言。沒有設置該域則認為實體內容將提供給所有的語言閱讀。例如:Content-Language:da。
          Content-Range:用于指定整個實體中的一部分的插入位置,他也指示了整個實體的長度。在服務器向客戶返回一個部分響應,它必須描述響應覆蓋的范圍和整個實體長度。一般格式:Content-Range:bytes-unitSPfirst-
          byte-pos-last-byte-pos/entity-length。例如,傳送頭500個字節次字段的形式:Content-Range:bytes0-499/1234如果一個HTTP消息包含此節(例如,對范圍請求的響 應或對一系列范圍的重疊請求),Content-Range表示傳送的范圍。
          Content-Type:發送給接收者的實體正文的媒體類型。媒體類型的格式為:大類/小類,例如text/html。
          例如:
          Content-Type: text/html;charset=utf-
          8
          Content-Type: image/jpeg
          Last-Modified:資源的最后修改日期和時間。
          ETag:和If-None-Match 配合使用。
          Expires:響應過期的日期和時間。為了讓代理服務器或瀏覽器在一段時間以后更新緩存中(再次訪問曾訪問過的頁面時,直接從緩存中加載,縮短響應時間和降低服務器負載)的頁面,我們可以使用Expires實體報頭域指定頁面過期的時間。例如:Expires:Thu,
          15 Sep 2006 16:23:12 GMT
          HTTP1.1的客戶端和緩存必須將其他非法的日期格式(包括0)看作已經過期。例如:為了讓瀏覽器不要緩存頁面,我們也可以利用Expires實體報頭域,設置為0,jsp中程序如下:response.setDateHeader(
          "Expires","0");
          Allow:服務器支持哪些請求方法(如GET、POST等)。
          Date:表示消息發送的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:
          25:57GMT。Date描述的時間表示世界標準時,換算成本地時間,需要知道用戶所在的時區。你可以用setDateHeader來設置這個頭以避免轉換時間格式的麻煩
          Expires:指明應該在什么時候認為文檔已經過期,從而不再緩存它,重新從服務器獲取,會更新緩存。過期之前使用本地緩存。HTTP1.1的客戶端和緩存會將非法的日期格式(包括0)看作已經過期。例如:為了讓瀏覽器不要緩存頁面,我們也可以將Expires實體報頭域,設置為0。
          例如: Expires: Tue,
          08 Feb 2022 11:35:14 GMT
          P3P:用于跨域設置Cookie, 這樣可以解決iframe跨域訪問cookie的問題
          例如: P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
          Set-Cookie:非常重要的header, 用于把cookie發送到客戶端瀏覽器,每一個寫入cookie都會生成一個Set-Cookie。
          例如: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com
          IANA(The Internet Assigned Numbers Authority,互聯網數字分配機構)定義了8個大類的媒體類型,分別是:
          application (例如: application/vnd.ms-excel)
          audio (例如: audio/mpeg)
          image (例如: image/png)
          message (例如,:message/HTTP)
          model(例如:model/vrml)
          multipart (例如:multipart/form-data)
          text(例如:text/html)
          video(例如:video/quicktime)

          五、緩存的實現原理

          Web緩存(cache)位于Web服務器和客戶端之間,緩存會根據請求保存輸出內容的副本,例如html頁面,圖片,文件,當下一個請求來到的時候:如果是相同的URL,緩存直接使用副本響應訪問請求,而不是向源服務器再次發送請求。
          HTTP協議定義了相關的消息頭來使Web緩存盡可能好的工作。


          1.緩存的優點
          減少相應延遲:因為請求從緩存服務器(離客戶端更近)而不是源服務器被相應,這個過程耗時更少,讓Web服務器看上去相應更快。
          減少網絡帶寬消耗:當副本被重用時會減低客戶端的帶寬消耗;客戶可以節省帶寬費用,控制帶寬的需求的增長并更易于管理。

          2.客戶端緩存生效的常見流程服務器收到請求時,會在200OK中回送該資源的Last-Modified和ETag頭,客戶端將該資源保存在cache中,并記錄這兩個屬性。當客戶端需要發送相同的請求時,會在請求中攜帶If-Modified-Since和If-None-Match兩個頭。兩個頭的值分別是響應中Last-Modified和ETag頭的值。服務器通過這兩個頭判斷本地資源未發生變化,客戶端不需要重新下載,返回304響應。
          3.Web緩存機制
          HTTP/1.1中緩存的目的是為了在很多情況下減少發送請求,同時在許多情況下可以不需要發送完整響應。前者減少了網絡回路的數量;HTTP利用一個“過期(expiration)”機制來為此目的。后者減少了網絡應用的帶寬;HTTP用“驗證(validation)”機制來為此目的。
          HTTP定義了3種緩存機制:

          (1)、Freshness:允許一個回應消息可以在源服務器不被重新檢查,并且可以由服務器和客戶端來控制。例如,Expires回應頭給了一個文檔不可用的時間。Cache-Control中的max-age標識指明了緩存的最長時間;
          (2)、Validation:用來檢查以一個緩存的回應是否仍然可用。例如,如果一個回應有一個Last-Modified回應頭,緩存能夠使用If-Modified-Since來判斷是否已改變,以便判斷根據情況發送請求;
          (3)、Invalidation:在另一個請求通過緩存的時候,常常有一個副作用。例如,如果一個URL關聯到一個緩存回應,但是其后跟著POST、PUT和DELETE的請求的話,緩存就會過期。

          六、應用

          1. 斷點續傳的實現原理

          HTTP協議的GET方法,支持只請求某個資源的某一部分;
          206 Partial Content 部分內容響應;
          Range 請求的資源范圍;
          Content-Range 響應的資源范圍;
          在連接斷開重連時,客戶端只請求該資源未下載的部分,而不是重新請求整個資源,來實現斷點續傳。
          分塊請求資源實例:

          Eg1:Range: bytes=306302- :請求這個資源從306302個字節到末尾的部分;
          Eg2:Content-Range: bytes 306302-604047/604048:響應中指示攜帶的是該資源的第306302-604047的字節,該資源共604048個字節;
          客戶端通過并發的請求相同資源的不同片段,來實現對某個資源的并發分塊下載。從而達到快速下載的目的。目前流行的FlashGet和迅雷基本都是這個原理。


          2. 多線程下載的原理

          下載工具開啟多個發出HTTP請求的線程;
          每個HTTP請求只請求資源文件的一部分:Content-Range: bytes 20000-40000/47000;
          合并每個線程下載的文件。


          3.HTTP代理

          HTTP代理服務器:
          代理服務器英文全稱是Proxy Server,其功能就是代理網絡用戶去取得網絡信息。形象地說:它是網絡信息的中轉站。
          代理服務器是介于瀏覽器和Web服務器之間的一臺服務器,有了它之后,瀏覽器不是直接到Web服務器去取回網頁而是向代理服務器發出請求,Request信號會先送到代理服務器,由代理服務器來取回瀏覽器所需要的信息并傳送給你的瀏覽器。

          而且,大部分代理服務器都具有緩沖的功能,就好象一個大的Cache,它有很大的存儲空間,它不斷將新取得數據儲存到它本機的存儲器上,如果瀏覽器所請求的數據在它本機的存儲器上已經存在而且是最新的,那么它就不重新從Web服務器取數據,而直接將存儲器上的數據傳送給用戶的瀏覽器,這樣就能顯著提高瀏覽速度和效率。更重要的是:Proxy Server(代理服務器)是Internet鏈路級網關所提供的一種重要的安全功能,它的工作主要在開放系統互聯(OSI)模型的對話層。
          HTTP代理服務器的主要功能:

          (1)、突破自身IP訪問限制,訪問國外站點。如:教育網、169網等網絡用戶可以通過代理訪問國外網站;
          (2)、訪問一些單位或團體內部資源,如某大學FTP(前提是該代理地址在該資源的允許訪問范圍之內),使用教育網內地址段免費代理服務器,就可以用于對教育 網開放的各類FTP下載上傳,以及各類資料查詢共享等服務;
          (3)、突破中國電信的IP封鎖:中國電信用戶有很多網站是被限制訪問的,這種限制是人為的,不同Serve對地址的封鎖是不同的。所以不能訪問時可以換一個國外的代理服務器試試;

          (4)、提高訪問速度:通常代理服務器都設置一個較大的硬盤緩沖區,當有外界的信息通過時,同時也將其保存到緩沖區中,當其他用戶再訪問相同的信息時,則直接由緩沖區中取出信息,傳給用戶,以提高訪問速度;
          (5)、隱藏真實IP:上網者也可以通過這種方法隱藏自己的IP,免受攻擊。
          對于客戶端瀏覽器而言,HTTP代理服務器相當于服務器。
          而對于Web服務器而言,HTTP代理服務器又擔當了客戶端的角色。


          4.虛擬主機

          虛擬主機:是在網絡服務器上劃分出一定的磁盤空間供用戶放置站點、應用組件等,提供必要的站點功能與數據存放、傳輸功能。
          所謂虛擬主機,也叫“網站空間”就是把一臺運行在互聯網上的服務器劃分成多個“虛擬”的服務器,每一個虛擬主機都具有獨立的域名和完整的Internet服務器(支持WWW、FTP、E-mail等)功能。一臺服務器上的不同虛擬主機是各自獨立的,并由用戶自行管理。但一臺服務器主機只能夠支持一定數量的虛擬主機,當超過這個數量時,用戶將會感到性能急劇下降。

          虛擬主機的實現原理:
          虛擬主機是用同一個Web服務器,為不同域名網站提供服務的技術。Apache、Tomcat等均可通過配置實現這個功能。
          相關的HTTP消息頭:Host。
          例如:Host: luyucheng.cnblogs.com
          客戶端發送HTTP請求的時候,會攜帶Host頭,Host頭記錄的是客戶端輸入的域名。這樣服務器可以根據Host頭確認客戶要訪問的是哪一個域名。

          1

          作者:成九

          來源:cnblogs.com/luyucheng/p/6264387.html

          學習、工作、生活中用到合同、協議的地方越來越多,想必許多人都在為如何寫好協議書而煩惱吧,今天就向大家推薦幾個我珍藏多年的、免費的、可以放心下載的合同范本(模板)庫,大家來看看吧。

          1、某律所的合同庫

          https://www.sunlawyers.com/contract.html

          (1)目前有合同模板75950個。估計是購買的法天使合同庫,然后做的數據庫嵌入。

          (2)用電腦打開網頁端。如果用手機打開的話,進入的頁面是該律所網站主頁。

          2、中國法律資源庫-法意科技(原北大法意)

          http://www.lawyee.org/

          免費使用法意數據庫的方法明天發。

          3、中律網

          http://www.148com.com/html/67/

          4、法律家

          http://www.fae.cn/ht/index_new1.html

          5、律圖

          http://www.64365.com/contract/all/

          TML5是HTML最新的修訂版本,由萬維網聯盟(W3C)于2014年10月完成標準制定。目標是取代1999年所制定的HTML 4.01和XHTML 1.0標準,以期能在網際網路應用迅速發展的時候,使網路標準達到符合當代的網路需求。廣義論及HTML5時,實際指的是包括HTML、CSS和JavaScript在內的一套技術組合。它希望能夠減少網頁瀏覽器對于需要外掛程式的豐富性網路應用服務(Plug-in-Based Rich Internet Application,RIA),例如:Adobe Flash、Microsoft Silverlight與Oracle JavaFX的需求,并且提供更多能有效加強網路應用的標準集。

          HTML5添加了許多新的語法特征,其中包括<video>、<audio>和<canvas>元素,同時整合了SVG內容。這些元素是為了更容易的在網頁中添加和處理多媒體和圖片內容而添加的。其它新的元素如<section>、<article>、<header>和<nav>則是為了豐富文檔的數據內容。新的屬性的添加也是為了同樣的目的。同時也有一些屬性和元素被移除掉了。一些元素,像<a>、<cite>和<menu>被修改,重新定義或標準化了。同時APIs和DOM已經成為HTML5中的基礎部分了。HTML5還定義了處理非法文檔的具體細節,使得所有瀏覽器和客戶端程序能夠一致地處理語法錯誤。

          發展歷史

          網頁超文本技術工作小組(WHATWG)于2004年開始制定新標準。在當時,HTML 4.01自2000年來沒有更新,以及全球資訊網協會(W3C)正在將未來的發展重點放在XHTML 2.0。2009年,W3C允許XHTML 2.0工作組章程結束過期并且決定不再續訂。W3C與WHATWG合作共同為發展HTML5而努力。

          2004年6月,Mozilla基金會和Opera軟體公司在全球資訊網協會(W3C)所主辦的研討會上提出了一份立場文件,其重點是開發與現有瀏覽器向后相容的技術,包括Web Forms 2.0最初草案規范。研討會最后以——8票贊成,14票反對——否決繼續對HTML的開發工作。這引起一些人的不滿,在研討會之后,網頁超文本技術工作小組(WHATWG)立即根據該立場文件成立,第二個草案,Web Applications 1.0也公布了。后來這兩種規范合并形成HTML5。2007年,獲得W3C接納,并成立了新的HTML工作團隊。2008年1月22日,第一份公開工作草案發布。

          盡管HTML5已經在網絡開發人員中非常出名了,但是它成為主流媒體的一個話題是在2010年的4月,當時蘋果公司的CEO喬布斯發表一篇題為“對Flash的思考”的文章,指出隨著HTML5的發展,觀看影片或其它內容時,Adobe Flash將不再是必須的。這引發了開發人員間的爭論,包括HTML5雖然提供了加強的功能,但開發人員必須考慮到不同瀏覽器對標準不同部分的支持程度的不同,以及HTML5和Flash間的功能差異。

          特點

          標記

          HTML5提供了一些新的元素和屬性,反映典型的現代用法網站。其中有些是技術上類似<div>和<span>標簽,但有一定含義,例如<nav>(網站導航塊)和<footer>。這種標簽將有利于搜索引擎的索引整理、小螢幕裝置和視障人士使用。同時為其他瀏覽要素提供了新的功能,通過一個標準接口,如<audio>和<video>標記。一些過時的HTML 4.01標記將取消,其中包括純粹用作顯示效果的標記,如<font>和<center>,因為它們已經被CSS取代。還有一些透過DOM的網絡行為。

          盡管和SGML在標記上的相似性,HTML5的句法并不再基于它了,而是被設計成向后兼容對老版本的HTML的解析。它有一個新的開始列看起來就像SGML的文檔類型聲明,<!DOCTYPE HTML>,這會觸發和標準兼容的渲染模式。在2009年1月5日,HTML5添加了Web Form 2.0的內容,HTML5開始發展起來。

          新的API

          HTML5相關APIs

          除了原先的DOM接口,HTML5增加了更多樣化的應用程序接口(API):

          Canvas

          定時媒體播放

          離線

          可編輯內容

          拖放

          歷史

          MIME和協議處理程序時表頭登記

          微數據

          網路訊息

          網路存儲

          以上技術盡管是WHATWG HTML說明文檔的內容,但并沒有全部包括在W3C HTML5的說明文檔里。一些相關的技術,像下面所列的,并沒有包括在這2份文檔中的任何一份中。W3C給這些技術單獨出版了說明文檔。

          地理位置

          網頁SQL數據庫 ─ 本地SQL數據庫(不再維護)

          IndexedDB

          文件─ 處理文件上傳和操縱文件

          目錄和文件系統 ─ 這個API是為了滿足客戶端在沒有好的數據庫支持情況下存儲要求

          文件寫入 ─ 從網絡應用程序向文件里寫內容

          網路音頻

          ClassList

          網路加密

          WebRTC

          一個普遍的誤解是HTML5能夠在網頁中提供動畫效果,這是不對的,動畫效果是需要配合JavaScript和CSS。然而靜態HTML5配合CSS可以表示出覆雜的排版結構而且原生支援與影片的混合與控制(控制一般由JavaScript執行),因此簡單可以把HTML5單位時間的狀態理解為動畫的關鍵影格。

          XHTML5(XML-serialized HTML5)

          XHTML5是對HTML5的XML序列化。XML文檔必須被設置為XML互聯網文件類型,像application/xhtml+xml或者application/xml。XHTML5要求像XML一樣嚴格的格式化的語法。在XHTML5中,HTML5的<!DOCTYPE HTML>可有可無的。

          XHTML5并非XHTML的第5版,沒有自己獨立的標準規范,而是HTML5的一種序列化方式。XHTML1.x和2.0使用的名字是Extensible HyperText Markup Language,不同于XHTML5。

          異常處理

          HTML5在設計時保證舊的瀏覽器能夠安全地忽略掉新的HTML5代碼。與HTML4.01相比,HTML5給出了解析的完整規則,讓不同的瀏覽器即使在發生語法錯誤時也能返回完全相同的結果。

          普及率

          根據2011年9月30日發布的一份報告,全球排名前100的網站中有34個網站使用HTML5──主要是搜尋引擎與社群網站。2013年8月發布的另一份報告顯示,財富美國500強企業中已有多達153家采用HTML5。

          HTML 4.01和XHTML 1.x的差異

          以下為大略的不同之處,與例子:

          文件類型聲明(<!DOCTYPE>)僅有一型:<!DOCTYPE HTML>。

          新的解析順序:不再基于SGML。

          新的元素:section, video, progress, nav, meter, time, aside, canvas, command, datalist, details, embed, figcaption, figure, footer, header, hgroup, keygen, mark, output, rp, rt, ruby, source, summary, wbr。

          input元素的新類型:date, email, url等等。

          新的屬性:ping(用于a與area), charset(用于meta), async(用于script)。

          全域屬性:id, tabindex, repeat。

          新的全域屬性:contenteditable, contextmenu, draggable, dropzone, hidden, spellcheck。

          移除元素:acronym, applet, basefont, big, center, dir, font, frame, frameset, isindex, noframes, strike, tt。


          主站蜘蛛池模板: 日韩一区二区在线观看视频| 亚洲av永久无码一区二区三区| 国产主播一区二区| 亚洲国产日韩在线一区| 精品在线一区二区| 无码人妻精品一区二区三区蜜桃| 免费萌白酱国产一区二区| 亚欧在线精品免费观看一区| 久久精品综合一区二区三区| 精品无码人妻一区二区三区18| 国产视频一区在线观看| 亚洲一区二区视频在线观看| 亚洲欧美日韩国产精品一区| 一区二区视频传媒有限公司| 国产精品亚洲一区二区三区久久| 中文字幕亚洲综合精品一区| 2014AV天堂无码一区| 国产MD视频一区二区三区| 无码精品不卡一区二区三区| 蜜臀AV在线播放一区二区三区| 97精品国产福利一区二区三区| 日韩A无码AV一区二区三区| 一区二区三区精密机械| 久久精品动漫一区二区三区| 亚洲一区无码精品色| 麻豆精品一区二区综合av| 韩国女主播一区二区| 国产乱码精品一区二区三区四川人 | 精品乱码一区内射人妻无码| 亚洲一区二区三区在线网站 | 亚洲高清偷拍一区二区三区| 日韩三级一区二区三区| 午夜视频一区二区| 日韩精品一区二区三区老鸦窝| 国产对白精品刺激一区二区 | 亚洲欧美日韩一区二区三区| 国产一区二区成人| 韩国美女vip福利一区| 无码人妻精品一区二区三区蜜桃 | 亚洲一区二区中文| 麻豆一区二区在我观看|