Linux之Web服務(1)HTTP協議

Linux之Web服務(1)HTTP協議

前言

在說到Web服務配置之前,先要了解一下Httpd服務所在的Tcp/Ip分層中的http協議。

http協議爲應用層協議,主要是負責處理超文本傳輸。http是一個客戶端和服務端請求和應答的標準(TCP)。客戶端是終端客戶,服務器端是網站。用戶通過Web瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個服務器上指定端口(默認爲80)的HTTP請求。通過HTTP或者HTTPS協議請求資源由統一資源提示符(Uniform Resourcce Identifiers)及URLs來標識。

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。其內部使用了一些方法和規則來規定主機傳輸超文本時如何進行傳輸,怎麼判斷超文本的類型,傳輸的優先級等等。

HTTP雖然是客戶端或其他程序與Web服務器之間的應用通信協議,但是HTTP本身包含命令和傳輸信息,不僅可以用於Web訪問,也可以同於其他因特網/內聯網應用系統之間的通信,從而實現各類應用層資源超媒體訪問的集成。例如:

平時上網時打開瀏覽器輸入一個地址,比如http://www.badiu.com來訪問對應的web服務器,這時最常見的http傳輸。但是後來出現了更高級的手機appapp的開發者們爲了同時實現開發的高效率和並保證app軟件本身所佔硬盤空間小,在設計軟件前端時並不使用一些基於語言來編寫的窗體或圖形,而是直接使用Html5Js等前端網頁使用的語言來設計出很多一種可以嵌套在一些操作系統支持的調用接口上的網頁,然後通過調用HTTP對應的協議功能接口來實現。一般這樣的應用稱爲webApp,及基於Web的系統和應用而在常見的移動端webapp採用響應式網頁設計的大部分技術。當使用手機上網下載並安裝了一個這樣的webapp會發現大小很小,而且響應速度很快,內存也佔用很小,因爲這種app就是一堆html的等前端語言的組合啊,想一下一個文件夾裏存放了一些文本,也不會佔太多空間。

當然Http協議可以解析這些標籤類的文本語言,後端功能的實現也需要一些開發語言如JavaObjective-C等,這些開發語言需要操作這些小網頁,也就是調用了Http在移動端應用層對於的接口。當然HTTP還有其它各方面層次的功能支持,只要有對應的需要的實現接口的媒體即可與其合併並完成建立在Http協議上的各種應用。

 

Http的實現

開源實現:httpd(apache), niginx, lighttpd

基於C/S

    C(Client):browser,user agenet

    chrome,ie,firefox,safarl,opera,..

    elinks, curl, wget,.......

    S(Server):httpd(apache)  nginx lighttpd

通信模型:

請求(request)/響應(response)

 

一次完整的http請求處理:

1、建立或處理連接請求;

2、接收請求(通過創建多個Socket文件);

3、解析請求,處理請求;

4、加載用戶請求的資源;

5、構建響應報表;

6、發送響應報文;

7、記錄訪問於日誌中;

 

web資源類型:

URL:統一資源定位符;

scheme://host[:port]/URL

說明:URL的根通常要映射爲文件系統上的某路徑;

    DocumentRoot /var/www/html/

        /index.html --> /var/www/html/index.html

        /admin/index.html --> /var/www/html/admin/index.html

    Alias /images/ "/date/imgs/"

    /images/logo.jpg --> /data/imgs/logo.jpg

    PagePage View

    UVUnique View  (獨立IP預覽)

 

一次通信實例:

Kongming20主機上運行wget方法客戶端程序,在ernest-laptop上運行squid代理服務器程序。客戶端通過代理的中轉,獲取Internet上的主機www.badiu.com的首頁文檔index.html,如下圖:

wKiom1f7VV7A0t5FAAFumaT7X1M820.png 

說明:從上圖來看請求數據時從應用層HTTP協議開始調用經過傳輸層,在請求調用的時候是經過很很多方法的。下面來介紹HTTP請求的一些方法。

 

HTTP事務:請求(request)與響應(response)

request一般包括的數據:

<method><url><version>

HEADERS#描述數據的原數據類型

 

<body>#html中本身的網頁內容

response一般包含的數據:

<version><status code><reason-phrase>

HEADERS

<body>

補充:其中HEADERS報文頭部顯示的數據格式爲鍵值對,及name:value

 

HTTP請求request

一般使用瀏覽器打開網頁發送請求時,可以通過快捷鍵F12來查看具體的請求報文信息。

wKioL1f7VSjhyB7TAABIBpqxj0s678.png 

解析:這裏通過訪問百度知道http://jingyan.baidu.com可以在瀏覽器控制檯查看其對應的request報文,這裏顯示了其中的m.js表示網頁裏的一個js腳步文件,並顯示了其來源URL地址,第二行的GET表示爲調用了http請求的GET方法,第三行爲響應狀態碼,最後顯示了NDS解析出來的對應的目標IP地址。


HTTP請求方法

當然HTTP請求的方法(request method)不止GET這一種,request方法:

<method>GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH

方法說明:

GET:申請獲取資源,而不對服務器產生任何其他影響

HEAD:和GET方法類似,不過僅要求服務器返回頭部信息,而不需要傳輸任何實際內容

POST:客戶端向服務器提交數據的方法。這種方法會影響服務器:服務器可能根據收到的數據動態創建新的資源,也可能更新原有的資源。

PUT:上傳某個資源

DELETE:刪除某個資源

TRACE:要求服務器返回原始 HTTP請求的內容。它可用來查看中間服務器(比如代理服務器)對HTTP請求的影響

OPTIONS:查看服務器對某個特定URL都支持哪些請求方法。也可以把URL設置爲*,從而獲取服務器支持的所有請求方法。

CONNECT:用於某些代理服務器,它們能把請求的連接數轉化爲一個安全隧道

PATCH:對某個資源做部分修改

說明:上面的method中,HEADGETOPTIONSTRACE被視爲安全的方法,因爲他們只是從服務器獲得資源或信息,而不對服務器進行任何修改。而POSTPUTDELETEPATCH則影響服務器上的資源。

 

HTTP響應(reponse)

HTTP響應首先會根據request調用的方法來返回對應的數據報文。

提示:那麼當然也可以通過linux上的一些命令工具來獲取請求傳輸報文,如:

#使用curl命令來獲取一個http://www2.magedu.com的網站首頁的報文首部

[root@root ~]# curl --head http://www2.magedu.com
HTTP/1.1 200 OK            #1.1表示HTTP 協議版本號,這裏爲狀態碼200表示成功
Date: Fri, 30 Sep 2016 12:58:36 GMT       #數據建立的時間
Server: Apache/2.4.6 (CentOS)          #服務器使用的HTTP協議軟件及操作系統
Last-Modified: Tue, 27 Sep 2016 16:20:22 GMT   #最後修改的時間
ETag: "11-53d7f9f179beb"             #請求標記            
Accept-Ranges: bytes               #允許大小範圍數值爲bytes 
Content-Length: 17                            #數據內容的長度
Content-Type: text/html; charset=UTF-8      #網頁的類型爲html,字符編碼爲UTF-8


注意:第一行爲狀態行,HTTP1,1表示WEB服務器使用的HTTP協議版本,通常客戶端要使用和服務端相同的HTTP協議版本,而200 OK表示狀態碼和狀態信息。當然不止這一種狀態碼了。有關不同的request方法,當然response接收也會得到不同的狀態碼。

 

HTTP常見狀態碼列表介紹:

狀態類型

狀態碼和狀態信息

含義

1xx信息

100Continue

服務收到了客戶端的請求行和頭部信息,告訴客戶端繼續發送數據部分。客戶端通常要先發送Expect:100-continue頭部字段告訴服務器自己還有數據要發送。

2xx成功響應

200 OK

請求成功

3xx重定向響應

301 Moved Permanently

資源被轉移了,請求將被重定向

304 Found

表示被申請的資源沒有更新,和之前獲得的相同

307 Temporary Redirect

通知客戶端資源能在其他地方找到。與302不同的是,客戶端可以使用和原始請求相同的請求方法來訪問目標資源。

4xx客戶端錯誤

400 Bad Request

通用客戶端錯誤

401 Unauthorized

請求需要認證信息

403 Forbidden

訪問被服務器禁止,通常由於客戶端沒有權限訪問該資源

404 Fot Found

資源沒找到

407 Proxy Authentication

客戶端需要先獲得代理服務器的認證

5xx服務端錯誤

500 Intcrnal Server Error

通用服務器錯誤


503 Server Unavailable

暫時無法訪問服務器

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章