HTTP服務器預備知識

HTTP服務器

一、採用的相關重要協議

  1. http協議
  2. TCP協議
  3. DNS協議

二、各協議的作用

  • HTTP
    針對目標web服務器生成HTTP請求報文
  • TCP
    爲了方便通信,將HTTP請求按序號分爲多個報文段,把每個報文段可靠的傳送給對方。
  • IP
    搜索對方IP地址,一邊中轉一邊傳送
  • TCP
    接受報文段,並按原來的順序重組請求報文
  • HTTP
    對web服務器請求的內容進行處理

三、HTTP協議的特點

  • 無連接,每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用
    這種方式可以節省傳輸時間。(http/1.0具有的功能,http/1.1兼容)
  • 無狀態
  • 簡單快速,HTTP服務器的程序規模小,因而通信速度很快。
  • 靈活,HTTP允許傳輸任意類型的數據對象,正在傳輸的類型由Content-Type加以標記
  • 協議本身並不會保留你之前的一切請求或者響應,這是爲了更快的處理大量的事務,確保協議的可伸縮性
  • HTTP/1.1版本中給出一種持續連接的機制。
  • HTTP(超文本傳輸協議)是基於TCP的連接方式進行網絡連接。

四、瀏覽器的URL格式

http://host":"port
  • http表示要通過HTTP協議來定位網絡資源
  • host表示合法的Internet主機域名或者IP地址
  • port指定一個端口號,缺省80
  • abs_path制定請求資源的URL
  • 如果URL中沒有給出abs_path,那麼當它作爲請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫
    我們完成。

五、HTTP的請求與響應

這裏寫圖片描述
1. HTTP的請求方法

  • GET
    獲取資源,獲取被URI標識的資源
  • POST
    POST 主要用來傳輸數據,而 GET 主要用來獲取資源。
  • PUT
    上傳文件,由於自身不帶驗證機制,任何人都可以上傳文件,因此存在安全性問題,一般不使用該方法。
  • HEAD
    和 GET 方法一樣,但是不返回報文實體主體部分。
    主要用於確認 URL 的有效性以及資源更新的日期時間等。
  • DELETE
    與 PUT 功能相反,並且同樣不帶驗證機制。
  • PATCH
    對資源進行部分修改
  • OPTIONS
    查詢指定的 URL 能夠支持的方法。
    會返回 Allow: GET, POST, HEAD, OPTIONS 這樣的內容.
  • CONNECT
    要求在與代理服務器通信時建立隧道
    使用 SSL(Secure Sockets Layer,安全套接層)和 TLS(Transport Layer Security,傳輸層安全)協議把通信內容加密後經網絡隧道傳輸。
  • TRACE
    服務器會將通信路徑返回給客戶端。
    發送請求時,在 Max-Forwards 首部字段中填入數值,每經過一個服務器就會減 1,當數值爲 0 時就停止傳輸。
    通常不會使用 TRACE,並且它容易受到 XST 攻擊(Cross-Site Tracing,跨站追蹤)。
  • LINK
  • UNLINK

    1. HTTP響應狀態碼

1xx 信息

  • 100 Continue :表明到目前爲止都很正常,客戶端可以繼續發送請求或者忽略這個響應。

2xx 成功

  • 200 OK
  • 204 No Content :請求已經成功處理,但是返回的響應報文不包含實體的主體部分。一般在只需要從客戶端往服務器發送信息,而不需要返回數據時使用。
  • 206 Partial Content :表示客戶端進行了範圍請求。響應報文包含由 Content-Range 指定範圍的實體內容。

3xx 重定向

  • 301 Moved Permanently :永久性重定向 需要進行書籤引用的變更
  • 302 Found :臨時性重定向 不需要對書籤引用變更
  • 303 See Other :和 302 有着相同的功能,但是 303 明確要求客戶端應該採用 GET 方法獲取資源。
  • 注:雖然 HTTP 協議規定 301、302 狀態下重定向時不允許把 POST 方法改成 GET 方法,但是大多數瀏覽器都會在 301、302 和 303 狀態下的重定向把 POST 方法改成 GET 方法。
  • 304 Not Modified :如果請求報文首部包含一些條件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不滿足條件,則服務器會返回 304 狀態碼。
  • 307 Temporary Redirect :臨時重定向,與 302 的含義類似,但是 307 要求瀏覽器不會把重定向請求的 POST 方法改成 GET 方法。

4xx 客戶端錯誤

  • 400 Bad Request :請求報文中存在語法錯誤。
  • 401 Unauthorized :該狀態碼錶示發送的請求需要有認證信息(BASIC 認證、DIGEST 認證)。如果之前已進行過一次請求,則表示用戶認證失敗。
  • 403 Forbidden :請求被拒絕,服務器端沒有必要給出拒絕的詳細理由。
  • 404 Not Found

5xx 服務器錯誤

  • 500 Internal Server Error :服務器正在執行請求時發生錯誤。
  • 503 Service Unavailable :服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。

六、HTTP CGI機制

CGI(Common Gateway Interface) 是WWW技術中最重要的技術之一,有着不可替代的重要地位。CGI是外部應用程序(CGI程序)與WEB服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的過程。其實,要真正理解CGI並不簡單,首先我們從現象入手,瀏覽器除了從服務器下獲得資源(網頁,圖片,文字等),有時候還有能上傳一些東西(提交表單,註冊用戶之類的),看看我們目前的http只能進行獲得資源,並不能夠進行上傳資源,所以目前http並不具有交互式。爲了讓我們的網站能夠實現交互式,我們需要使用CGI完成,時刻記着,我們目前是要寫一個http,所以,CGI的所有交互細節,都需要我們來完成。

理論上,可以使用任何語言來編寫CGI程序。注意,http提供CGI機制,和CGI程序是兩碼事,就好比學校(http)提供教學(CGI機制)平臺,學生(CGI程序)來學習。

  1. 我們首先來理解一下GET和POST方法的區別

GET方法從瀏覽器傳參數給http服務器時,是需要將參數跟到URI後面。

如:

https://www.baidu.com/s?
ie=utf8&f=3&rsv_bp=0&rsv_idx=1&tn=baidu&wd=ascii%E7%A0%81%E8%A1%A8&rsv_pq=c3b36e65000029a8&rsv_t=8c2a6N4WqJp6pn8wSPmrfETVJGIgC9hW6F041xz47x0FaHjFC3UE2gh9Ofk&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_sug1=1&rsv_sug7=100&rsv_sug2=1&prefixsug=as&rsp=0&inputT=2214&rsv_sug4=2214

POST方法從瀏覽器傳參數給http服務器時,是需要將參數放的請求正文的。

  • GET方法,如果沒有傳參,http按照一般的方式進行,返回資源即可.
  • GET方法,如果有參數傳入,http就需要按照CGI方式處理參數,並將執行結果(期望資源)返回給瀏
    覽器。
  • POST方法,一般都需要使用CGI方式來進行處理。

具體流程見盜圖如下:

這裏寫圖片描述

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