2020藍旭工作室暑假討論班之HTTP基礎

一.HTTP基礎

HTTP 簡介

超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分佈式、協作式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通信的基礎。

HTTP的發展是由蒂姆·伯納斯-李於1989年在歐洲核子研究組織(CERN)所發起。HTTP的標準制定由萬維網協會(World Wide Web Consortium,W3C)和互聯網工程任務組(Internet Engineering Task Force,IETF)進行協調,最終發佈了一系列的RFC,其中最著名的是1999年6月公佈的 RFC 2616,定義了HTTP協議中現今廣泛使用的一個版本——HTTP 1.1。

2014年12月,互聯網工程任務組(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小組將HTTP/2標準提議遞交至IESG進行討論,於2015年2月17日被批准。 HTTP/2標準於2015年5月以RFC 7540正式發表,取代HTTP 1.1成爲HTTP的實現標準。

HTTP協議概述

HTTP是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準(TCP)。通過使用網頁瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個HTTP請求到服務器上指定端口(默認端口爲80)。我們稱這個客戶端爲用戶代理程序(user agent)。應答的服務器上存儲着一些資源,比如HTML文件和圖像。我們稱這個應答服務器爲源服務器(origin server)。在用戶代理和源服務器中間可能存在多個“中間層”,比如代理服務器、網關或者隧道(tunnel)。

儘管TCP/IP協議是互聯網上最流行的應用,HTTP協議中,並沒有規定必須使用它或它支持的層。事實上,HTTP可以在任何互聯網協議上,或其他網絡上實現。HTTP假定其下層協議提供可靠的傳輸。因此,任何能夠提供這種保證的協議都可以被其使用。因此也就是其在TCP/IP協議族使用TCP作爲其傳輸層。

通常,由HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器則在那個端口監聽客戶端的請求。一旦收到請求,服務器會向客戶端返回一個狀態,比如"HTTP/1.1 200 OK",以及返回的內容,如請求的文件、錯誤消息、或者其它信息。

HTTP工作原理

HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。

HTTP 請求/響應的步驟

  1. 客戶端連接到Web服務器
    一個HTTP客戶端,通常是瀏覽器,與Web服務器的HTTP端口(默認爲80)建立一個TCP套接字連接。
  2. 發送HTTP請求
    通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
  3. 服務器接受請求並返回HTTP響應
    Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
  4. 釋放連接TCP連接
    若connection 模式爲close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接,若connection 模式爲keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求。
  5. 客戶端瀏覽器解析HTML內容
    客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態代碼。然後解析每一個響應頭,響應頭告知以下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。
    http協議是基於TCP/IP協議之上的應用層協議。

基於 請求-響應 的模式
HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並響應請求。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有接收到請求之前不會發送響應。

無狀態保存
HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議 自身不對請求和響應之間的通信狀態進行保存。也就是說在HTTP這個 級別,協議對於發送過的請求或響應都不做持久化處理。

使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產生。協議本身並不保留之前一切的請求或響應報文的信息。這是爲了更快地處理大量事務,確保協議的可伸縮性,而特意把HTTP協議設計成如此簡單的。可是,隨着Web的不斷髮展,因無狀態而導致業務處理變得棘手的情況增多了。比如,用戶登錄到一家購物網站,即使他跳轉到該站的其他頁面後,也需要能繼續保持登錄狀態。針對這個實例,網站爲了能夠掌握是誰送出的請求,需要保存用戶的狀態。HTTP/1.1雖然是無狀態協議,但爲了實現期望的保持狀態功能, 於是引入了Cookie技術。有了Cookie再用HTTP協議通信,就可以管理狀態了。有關Cookie的詳細內容稍後講解。

無連接
無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間,並且可以提高併發性能,不能和每個用戶建立長久的連接,請求一次相應一次,服務端和客戶端就中斷了。但是無連接有兩種方式,早期的http協議是一個請求一個響應之後,直接就斷開了,但是現在的http協議1.1版本不是直接就斷開了,而是等幾秒鐘,這幾秒鐘是等什麼呢,等着用戶有後續的操作,如果用戶在這幾秒鐘之內有新的請求,那麼還是通過之前的連接通道來收發消息,如果過了這幾秒鐘用戶沒有發送新的請求,那麼就會斷開連接,這樣可以提高效率,減少短時間內建立連接的次數,因爲建立連接也是耗時的,默認的好像是3秒中現在,但是這個時間是可以通過咱們後端的代碼來調整的,自己網站根據自己網站用戶的行爲來分析統計出一個最優的等待時間。

HTTP 消息結構

客戶端請求消息
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的一般格式。
在這裏插入圖片描述

服務器響應消息
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
在這裏插入圖片描述

HTTP 請求方法

根據 HTTP 標準,HTTP 請求可以使用多種請求方法。
HTTP1.0 定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
在這裏插入圖片描述

HTTP狀態碼

https://www.runoob.com/http/http-status-codes.html

HTTP content-type

Content-Type(內容類型),一般是指網頁中存在的 Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個文件,這就是經常看到一些 PHP 網頁點擊的結果卻是下載一個文件或一張圖片的原因。
Content-Type 標頭告訴客戶端實際返回的內容的內容類型。

二.跨域

同源策略

同源策略(Sameoriginpolicy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽器的正常功能可能都會受到影響。可以說Web是構建在同源策略基礎之上的,瀏覽器只是針對同源策略的一種實現。同源策略會阻止一個域的javascript腳本和另外一個域的內容進行交互。所謂同源(即指在同一個域)就是兩個頁面具有相同的協議(protocol),主機(host)和端口號(port)。

什麼是跨域

當一個請求url的協議、域名、端口三者之間任意一個與當前頁面url不同即爲跨域。

當前頁面url 被請求頁面url 是否跨域 原因
http://www.bluemsum.com/ http://www.bluemsun.com/index.html 同源(協議、域名、端口號相同)
http://www.bluemsum.com/ https://www.bluemsun.com/index.html 協議不同(http/https)
http://www.bluemsum.com/ http://www.baidu.com/ 主域名不同(bluemsun/baidu)
http://www.bluemsun.com/ http://exam.bluemsun.com/ 子域名不同(www/exam)
http://www.bluemsun.com:8080/ http://www.bluemsun.com:8081/ 端口號不同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章