HTTP(HyperText Transfer Protocol)是一套電腦透過網路進行通訊的規則。電腦專家設計出HTTP,使HTTP客戶(如Web瀏覽器)能夠從HTTP伺服器(Web伺服器)請求資訊和服務,HTTP目前協定的版本是1.1.HTTP是一種無狀態的協議,無狀態是指Web瀏覽器和Web伺服器之間不需要建立持久的連接,這意味著當一個客戶端向伺服器端發出請求,然後Web伺服器返回回應(response),連接就被關閉了,在伺服器端不保留連接的有關訊息.HTTP遵循請求(Request)/應答(Response)模型。 Web瀏覽器向Web伺服器發送請求,網路伺服器處理請求並傳回適當的應答。所有HTTP連接都被建構成一套請求和應答。
HTTP使用內容類型,是指Web伺服器向網頁瀏覽器傳回的檔案都有與之相關的類型。所有這些類型在MIME Internet郵件協定上模型化,也就是網頁伺服器告訴網頁瀏覽器該檔案所具有的種類,是HTML文件、GIF格式影像、聲音檔案或獨立的應用程式。大多數網頁瀏覽器都擁有一系列可設定的輔助應用程序,它們告訴瀏覽器應該如何處理網頁的伺服器發送過來的各種內容類型。
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伺服器發送請求命令
一旦建立了TCP連接,Web瀏覽器就會向Web伺服器發送請求命令
例如: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 OK响应头(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),表示客戶端提交的請求有錯誤ound,意味著請求中所引用的文件不存在。
5XX-伺服器錯誤(Server Error)表示伺服器無法完成對請求的處理:如500
對我們Web開發人員來說掌握HTTP應答碼有助於提高Web應用程式偵錯的效率和準確性。
安全連線
One of the most common uses of Web applications is e-commerce, which can use Web server-side programs to enable people to shop online. It needs to be pointed out that by default, sending information over the Internet is not secure. If someone happens to How bad would it be if a message you sent to a friend was intercepted and he could open it and imagine it contained your credit card number? Fortunately, many web servers and web browsers have the ability to create secure connections. , so that they can communicate safely.
The most common standard for providing secure connections over the Internet is the Secure Sockets layer (SSl) protocol. The SSL protocol is an application layer protocol (like HTTP) used to exchange data on the Web in a secure manner. SSL uses a public key encoding system. Essentially, this means that each party in the business has a public and a private key. When one party encodes using the other party's public key, only the person with the matching key can decode it. Simply put, public key encoding provides a secure method for exchanging data between two parties. After the SSL connection is established, both the client and the server exchange public keys and verify them before making business contact. Once both parties Once the keys are verified, data can be exchanged securely.