畢業設計之路(7)-HTTP協議簡單說明

這個是網上看到的資料,粘貼以下。總算大體理解了HTTP協議這個過程。html

 

HTTP(HyperText Transfer Protocol)是一套計算機經過網絡進行通訊的規則。計算機專家設計出HTTP,使HTTP客戶(如Web瀏覽器)可以從HTTP服務器(Web服務器)請求信息和服務,HTTP目前協議的版本是1.1.HTTP是一種無狀態的協議,無狀態是指Web瀏覽器和Web服務器之間不須要創建持久的鏈接,這意味着當一個客戶端向服務器端發出請求,而後Web服務器返回響應(response),鏈接就被關閉了,在服務器端不保留鏈接的有關信息.HTTP遵循請求(Request)/應答(Response)模型。Web瀏覽器向Web服務器發送請求,Web服務器處理請求並返回適當的應答。全部HTTP鏈接都被構形成一套請求和應答。編程

HTTP使用內容類型,是指Web服務器向Web瀏覽器返回的文件都有與之相關的類型。全部這些類型在MIME Internet郵件協議上模型化,即Web服務器告訴Web瀏覽器該文件所具備的種類,是HTML文檔、GIF格式圖像、聲音文件仍是獨立的應用程序。大多數Web瀏覽器都擁有一系列的可配置的輔助應用程序,它們告訴瀏覽器應該如何處理Web服務器發送過來的各類內容類型。瀏覽器

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

(1) 創建TCP鏈接服務器

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

(2) Web瀏覽器向Web服務器發送請求命令jsp

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

例如:GET/sample/hello.jsp HTTP/1.1編碼

(3) Web瀏覽器發送請求頭信息設計

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

(4) Web服務器應答

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

HTTP/1.1 200 OK

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

(5) Web服務器發送應答頭信息

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

(6) Web服務器向瀏覽器發送數據

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

(7) Web服務器關閉TCP鏈接

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

Connection:keep-alive

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

    

HTTP請求格式

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

l 請求方法URI協議/版本

l 請求頭(Request Header)

l 請求正文

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

GET/sample.jspHTTP/1.1

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

 

username=jinqiao&password=1234

 

(1) 請求方法URI協議/版本

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

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

根據HTTP標準,HTTP請求可使用多種請求方法。例如:HTTP1.1支持7種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet應用中,最經常使用的方法是GET和POST。

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

(2) 請求頭(Request Header)

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

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

(3) 請求正文

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

username=jinqiao&password=1234

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

HTTP請求方法我這裏只討論GET方法與POST方法

l 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請求的一部分因此提交的數據量不能太大

l POST方法

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

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

HTTP應答與HTTP請求類似,HTTP響應也由3個部分構成,分別是:

l  協議狀態版本代碼描述

l  響應頭(Response Header)

l  響應正文

下面是一個HTTP響應的例子:

HTTP/1.1 200 OK

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

 

<html>
<head>

<title>HTTP響應示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>
協議狀態代碼描述HTTP響應的第一行相似於HTTP請求的第一行,它表示通訊所用的協議是HTTP1.1服務器已經成功的處理了客戶端發出的請求(200表示成功):

HTTP/1.1 200 OK0
響應頭(Response Header)響應頭也和請求頭同樣包含許多有用的信息,例如服務器類型、日期時間、內容類型和長度等:

   Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

響應正文響應正文就是服務器返回的HTML頁面:

  <html>
<head>

<title>HTTP響應示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

響應頭和正文之間也必須用空行分隔。  

l HTTP應答碼

   HTTP應答碼也稱爲狀態碼,它反映了Web服務器處理HTTP請求狀態。HTTP應答碼由3位數字構成,其中首位數字定義了應答碼的類型:

   1XX-信息類(Information),表示收到Web瀏覽器請求,正在進一步的處理中

   2XX-成功類(Successful),表示用戶請求被正確接收,理解和處理例如:200 OK

3XX-重定向類(Redirection),表示請求沒有成功,客戶必須採起進一步的動做。

4XX-客戶端錯誤(Client Error),表示客戶端提交的請求有錯誤 例如:404 NOT

Found,意味着請求中所引用的文檔不存在。

5XX-服務器錯誤(Server Error)表示服務器不能完成對請求的處理:如 500

對於咱們Web開發人員來講掌握HTTP應答碼有助於提升Web應用程序調試的效率和準確性。

 

安全鏈接

Web應用最多見的用途之一是電子商務,能夠利用Web服務器端程序令人們可以網絡購物,須要指出一點是,缺省狀況下,經過Internet發送信息是不安全的,若是某人碰巧截獲了你發給朋友的一則消息,他就能打開它,假想在裏面有你的信用卡號碼,這會有多麼糟糕,幸運的是,不少Web服務器以及Web瀏覽器都有創立安全鏈接的能力,這樣它們就能夠安全的通訊了。

經過Internet提供安全鏈接最多見的標準是安全套接層(Secure Sockets layer,SSl)協議。SSL協議是一個應用層協議(和HTTP同樣),用於安全方式在Web上交換數據,SSL使用公開密鑰編碼系統。從本質講,這意味着業務中每一方都擁有一個公開的和一個私有的密鑰。當一方使用另外一方公開密鑰進行編碼時,只有擁有匹配密鑰的人才能對其解碼。簡單來說,公開密鑰編碼提供了一種用於在兩方之間交換數據的安全方法,SSL鏈接創建以後,客戶和服務器都交換公開密鑰,並在進行業務聯繫以前進行驗證,一旦雙方的密鑰都經過驗證,就能夠安全地交換數據。

//----------------------------------------------------------------------------------------------

HTTP協議狀態碼的含義

  號碼 含義 ----------------------------------------- "100 " : Continue "101 " : witching Protocols "200 " : OK "201 " : Created "202 " : Accepted "203 " : Non-Authoritative Information "204 " : No Content "205 " : Reset Content "206 " : Partial Content "300 " : Multiple Choices "301 " : Moved Permanently "302 " : Found "303 " : See Other "304 " : Not Modified "305 " : Use Proxy "307 " : Temporary Redirect "400 " : Bad Request "401 " : Unauthorized "402 " : Payment Required "403 " : Forbidden "404 " : Not Found "405 " : Method Not Allowed "406 " : Not Acceptable "407 " : Proxy Authentication Required "408 " : Request Time-out "409 " : Conflict "410 " : Gone "411 " : Length Required "412 " : Precondition Failed "413 " : Request Entity Too Large "414 " : Request-URI Too Large "415 " : Unsupported Media Type "416 " : Requested range not satisfiable "417 " : Expectation Failed "500 " : Internal Server Error "501 " : Not Implemented "502 " : Bad Gateway "503 " : Service Unavailable "504 " : Gateway Time-out "505 " : HTTP Version not supported

相關文章
相關標籤/搜索