HTTP協議及HTTP代理知識點

HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。仔細看下圖會有一個基本瞭解
在這裏插入圖片描述 HTTP 的請求方法: • GET: 通常用來獲取資源 • HEAD: 獲取資源的元信息 • POST: 提交數據,即上傳數據 • PUT: 修改數據 • DELETE: 刪除資源(幾乎用不到) • CONNECT: 建立連接隧道,用於代理服務器 • OPTIONS: 列出可對資源實行的請求方法,用來跨域請求 • TRACE: 追蹤請求-響應的傳輸路徑 以下是 HTTP 請求/響應的步驟: 1、客戶端連接到Web服務器 一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認爲80)建立一個TCP套接字連接。例如,www.16yun.cn。 2、發送HTTP請求 通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。 3、服務器接受請求並返回HTTP響應 Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。 4、釋放連接TCP連接 若connection 模式爲close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式爲keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求; 5、客戶端瀏覽器解析HTML內容 客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態代碼。然後解析每一個響應頭,響應頭告知以下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。 HTTP 缺點 無狀態 所謂的優點和缺點還是要分場景來看的,對於 HTTP 而言,最具爭議的地方在於它的無狀態。 在需要長連接的場景中,需要保存大量的上下文信息,以免傳輸大量重複的信息,那麼這時候無狀態就是 http 的缺點了。 但與此同時,另外一些應用僅僅只是爲了獲取一些數據,不需要保存連接上下文信息,無狀態反而減少了網絡開銷,成爲了 http 的優點。 明文傳輸 即協議裏的報文(主要指的是頭部)不使用二進制數據,而是文本形式。 這當然對於調試提供了便利,但同時也讓 HTTP 的報文信息暴露給了外界,給攻擊者也提供了便利。WIFI陷阱就是利用 HTTP 明文傳輸的缺點,誘導你連上熱點,然後瘋狂抓你所有的流量,從而拿到你的敏感信息。 隊頭阻塞問題 當 http 開啓長連接時,共用一個 TCP 連接,同一時刻只能處理一個請求,那麼當前請求耗時過長的情況下,其它的請求只能處於阻塞狀態,也就是著名的隊頭阻塞問題。接下來會有一小節討論這個問題。 HTTP 狀態碼 C 規定 HTTP 的狀態碼爲三位數,被分爲五類: • 1xx: 表示目前是協議處理的中間狀態,還需要後續操作。 • 2xx: 表示成功狀態。 • 3xx: 重定向狀態,資源位置發生變動,需要重新請求。 • 4xx: 請求報文有誤。 • 5xx: 服務器端發生錯誤。 HTTP 代理 我們知道在 HTTP 是基於請求-響應模型的協議,一般由客戶端發請求,服務器來進行響應。 當然,在網絡數據採集的應用中大量需要代理IP(例如:億牛雲的爬蟲代理加強版、API代理),就是代理服務器的情況。引入代理之後,作爲代理的服務器相當於一箇中間人的角色,對於客戶端而言,表現爲服務器進行響應;而對於源服務器,表現爲客戶端發起請求,具有雙重身份。