WEB 乙個簡單的WEB伺服器

2022-03-12 20:17:36 字數 4795 閱讀 3649

web 伺服器如何工作的?

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伺服器傳送請求命令

一旦建立了tcp連線,web瀏覽器就會向web伺服器傳送請求命令

例如:get/sample/hello.jsp http/1.1

(3)    web瀏覽器傳送請求頭資訊

瀏覽器傳送其請求命令之後,還要以頭資訊的形式向web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。

(4)    web伺服器應答

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

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

(5)    web伺服器傳送應答頭資訊

正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向使用者傳送關於它自己的資料及被請求的文件。

(6)    web伺服器向瀏覽器傳送資料

web伺服器向瀏覽器傳送頭資訊後,它會傳送乙個空白行來表示頭資訊的傳送到此為結束,接著,它就以content-type應答頭資訊所描述的格式傳送使用者所請求的實際資料

(7)    web伺服器關閉tcp連線

一般情況下,一旦web伺服器向瀏覽器傳送了請求資料,它就要關閉tcp連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行**

connection:keep-alive

tcp連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。

http請求格式

當瀏覽器向web伺服器發出請求時,它向伺服器傳遞了乙個資料塊,也就是請求資訊,成:

l   請求方法uri協議/版本

l   請求頭(request header)

l   請求正文

下面是乙個http請求的例子:

(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方法來提交表單資料就存在著安全隱患上。例如

從上面的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響應的例子:

server:apache tomcat/5.0.12

date:mon,6oct2003 13:23:42 gmt

content-length:112

協議狀態**描述http響應的第一行類似於http請求的第一行,它表示通訊所用的協議是http1.1伺服器已經成功的處理了客戶端發出的請求(200表示成功):

響應頭(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頁面:

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

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應用程式除錯的效率和準確性。

測試: 

public class server catch (ioexception e) }}

public class client catch (ioexception e) }}

通過瀏覽器訪問,伺服器端輸出請求資訊

乙個簡單的web伺服器

新的一年了,新的開始,打算重新看一遍asp.net本質論這本書,再重新認識一下,查漏補缺,認認真真的過一遍。首先需要引入命名空間 system.net,關於網路程式設計的大部分型別及操作都可以在這個命名空間下找到。system.net.sockets 命名空間中提供了基於socket程式設計的資料型...

乙個簡單的靜態web伺服器

coding utf 8 import re from socket import from multiprocessing import process 設定靜態檔案根目錄 接收資料 request data cli socket.recv 1024 解析http報文協議 request data...

乙個簡單的動態web伺服器

這個動態web伺服器的思路是在靜態伺服器的基礎上新增對url的判斷,如果url中帶有指令碼資訊,那麼伺服器會去執行指令碼而不是直接返回靜態介面 coding utf 8 import sys import re from socket import from multiprocessing impo...