web框架原理,http 協議

  • 2019 年 10 月 8 日
  • 筆記

目錄

web框架原理

web框架是什麼東西

#我們可以這樣理解:所有的Web應用本質上就是一個socket服務端,而用戶的瀏覽器就是一個socket客戶端。 這樣我們就可以自己實現Web框架了。    import socket    sk = socket.socket()  sk.bind(("127.0.0.1", 80))  sk.listen()    while True:      conn, addr = sk.accept()      data = conn.recv(8096)      conn.send(b"OK")      conn.close()  #這樣的一個server端只能實現本機的一些數據傳輸,Web服務本質上都是在這十幾行程式碼基礎上擴展出來的

執行程式碼用瀏覽器訪問一下

import socket    sk = socket.socket()  sk.bind(("127.0.0.1", 80))  sk.listen()    while True:      conn, addr = sk.accept(5)      data = conn.recv(8096)      print(data)  # 將瀏覽器發來的消息列印出來(地址欄輸入127.0.0.1:80)      conn.send(b"OK")      conn.close()    
  • 執行結果

輸出結果

GET / HTTP/1.1rnHost: 127.0.0.1rnUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0)   Gecko/20100101 Firefox/67.0rnAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rnAccept-Language: zh-CN,  zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2rnAccept-Encoding: gzip, deflaternConnection:   keep-alivernUpgrade-Insecure-Requests: 1rnCache-Control: max-age=0rnrn
  • 把rn替換成換行看得更清晰點:
GET / HTTP/1.1  Host: 127.0.0.1  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2  Accept-Encoding: gzip, deflate  Connection: keep-alive  Upgrade-Insecure-Requests: 1  Cache-Control: max-age=0    # 我們發現收發的消息需要按照一定的格式來的,這裡就需要了解一下HTTP協議了    

http 協議

#思考: """ 用戶在瀏覽器中輸入網址,瀏覽器會向服務端發送數據,那瀏覽器會發送什麼數據?怎麼發?這個誰來定? 無規矩不成方圓, 所以必須有一個統一的規則,讓大家發送消息、接收消息的時候都按照這個格式執行. 這個規則就是HTTP協議,瀏覽器發送請求資訊,回復響應資訊都要按照這個規則來。 HTTP協議主要規定了客戶端和伺服器之間的通訊格式. """

http 協議簡介 """ 超文本傳輸協議(英文:Hyper Text Transfer Protocol,HTTP)是一種用於分散式、協作式和超媒體資訊系統的應用層協議。 HTTP是萬維網的數據通訊的基礎。HTTP有很多應用,但最著名的是用於web瀏覽器和web伺服器之間的雙工通訊。 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套接字連接。例如,http://www.baidu.com。 2. 發送HTTP請求 通過TCP套接字,客戶端向Web伺服器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。 3. 伺服器接受請求並返回HTTP響應 Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、 響應頭部、空行和響應數據4部分組成。 4. 釋放連接TCP連接 若connection 模式為close,則伺服器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接;若connection 模式為keepalive, 則該連接會保持一段時間,在該時間內可以繼續接收請求; 5. 客戶端瀏覽器解析HTML內容 客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。然後解析每一個響應頭, 響應頭告知以下為若干位元組的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化, 並在瀏覽器窗口中顯示。 在瀏覽器地址欄鍵入URL,按下回車之後會經歷以下流程: 瀏覽器向 DNS 伺服器請求解析該 URL 中的域名所對應的 IP 地址; 解析出 IP 地址後,根據該 IP 地址和默認埠 80,和伺服器建立TCP連接; 瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的數據發送給伺服器; 伺服器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器; 釋放 TCP連接; 瀏覽器將該 html 文本並顯示內容;   """

http請求方法

#HTTP/1.1協議中共定義了八種方法(也叫「動作」)來以不同方式操作指定的資源: """ get方法 向指定的資源發出「顯示」請求。使用GET方法應該只用在讀取數據,而不應當被用於產生「副作用」的操作中, 例如在Web Application中。其中一個原因是GET可能會被網路蜘蛛等隨意訪問。 post方法 向指定資源提交數據,請求伺服器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。 這個請求可能會創建新的資源或修改現有資源,或二者皆有。 head方法 與GET方法一樣,都是向伺服器發出指定資源的請求。只不過伺服器將不傳回資源的本文部分。它的好處在於, 使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中「關於該資源的資訊」(元資訊或稱元數據)。 put方法 向指定資源位置上傳其最新內容。 delete方法 請求伺服器刪除Request-URI所標識的資源。 trace 回顯伺服器收到的請求,主要用於測試或診斷。 options 這個方法可使伺服器傳回該資源所支援的所有HTTP請求方法。用'*'來代替資源名稱,向Web伺服器發送OPTIONS請求, 可以測試伺服器功能是否正常運作。 connect HTTP/1.1協議中預留給能夠將連接改為管道方式的代理伺服器。通常用於SSL加密伺服器的鏈接(經由非加密的HTTP代理伺服器)。 注意事項: 方法名稱是區分大小寫的。當某個請求所針對的資源不支援對應的請求方法的時候,伺服器應當返回狀態碼405(Method Not Allowed), 當伺服器不認識或者不支援對應的請求方法的時候,應當返回狀態碼501(Not Implemented)。 HTTP伺服器至少應該實現GET和HEAD方法,其他方法都是可選的。當然,所有的方法支援的實現都應當匹配下述的方法各自的語義定義。 此外,除了上述方法,特定的HTTP伺服器還能夠擴展自定義的方法。例如PATCH(由 RFC 5789 指定的方法)用於將局部修改應用到資源。 """

http 狀態碼

""" 所有HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態程式碼,以及描述狀態的短語,彼此由空格分隔。 狀態程式碼的第一個數字代表當前響應的類型: 1xx消息——請求已被伺服器接收,繼續處理 2xx成功——請求已成功被伺服器接收、理解、並接受 3xx重定向——需要後續操作才能完成這一請求 4xx請求錯誤——請求含有詞法錯誤或者無法被執行 5xx伺服器錯誤——伺服器在處理某個正確請求時發生錯誤 雖然 RFC 2616 中已經推薦了描述狀態的短語,例如"200 OK","404 Not Found",但是WEB開發者仍然能夠自行決定採用何種短語, 用以顯示本地化的狀態描述或者自定義資訊。 """

url介紹

""" 超文本傳輸協議(HTTP)的統一資源定位符將從網際網路獲取資訊的五個基本元素包括在一個簡單的地址中: 傳送協議。 層級URL標記符號(為[//],固定不變) 訪問資源需要的憑證資訊(可省略) 伺服器。(通常為域名,有時為IP地址) 埠號。(以數字方式表示,若為HTTP的默認值「:80」可省略) 路徑。(以「/」字元區別路徑中的每一個目錄名稱) 查詢。(GET模式的窗體參數,以「?」字元為起點,每個參數以「&」隔開,再以「=」分開參數名稱與數據,通常以UTF8的URL編碼,避開字元衝突的問題) 片段。以「#」字元為起點 以http://www.baidu.com:80/news/index.html?id=250&page=1 為例, 其中: http,是協議; www.baidu.com,是伺服器; 80,是伺服器上的網路埠號; /news/index.html,是路徑; ?id=250&page=1,是查詢。 大多數網頁瀏覽器不要求用戶輸入網頁中「http://」的部分,因為絕大多數網頁內容是超文本傳輸協議文件。 同樣,「80」是超文本傳輸協議文件的常用埠號,因此一般也不必寫明。一般來說用戶只要鍵入統一資源定位符的一部分 (www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。 """

http請求格式

http響應格式

http 和 https 區別

""" HTTP:是互聯網上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP), 用於從WWW伺服器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少。 HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL, 因此加密的詳細內容就需要SSL。 HTTPS協議的主要作用可以分為兩種:一種是建立一個資訊安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。 HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私資訊非常不安全,為了保證這些隱私數據能加密傳輸, 於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。 簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。 HTTPS和HTTP的區別主要如下: 1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。 2、http是超文本傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。 3、http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。 4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。 """

網路數據傳輸流程

作 者:郭楷豐