HTTP 協議(詳解)

HTTP協議簡介:HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于萬維網(www.world wide web)服務器與本地瀏覽器之間傳輸文本的傳輸協議。

http請求協議與相應協議HTTP協議包含瀏覽器發送數據到服務器需要遵循的請求協議與服務器發送數據到瀏覽器需要遵循的請求協議。用于HTTP協議交互的信被稱為報文。請求端的HTTP報文做請求報文,服務端做響應報文。HTTP協議特性:(1)基于TCP/IPHTTP協議是基于TCP/IP協議之上的應用層協議。(2)基于請求-響應模式HTTP協議規定:請求從客戶端發出,最后服務器端響應請求并返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有收到請求之前不會發送響應。HTTP協議是一種無狀態短鏈接協議。是基于TCP/IP協議的應用層協議。一次請求一次響應。

?

請求協議:

請求格式:

  

請求協議包括:請求首行:請求方式 url  請求協議版本號請求頭  : key:value請求體  :里面放數據。

總結:
a.請求協議由請求首行和請求頭、請求體組成。
b.請求首行是由:請求方式(GET/POST) HTTP協議(HTTP/1.1) 請求IP地址
c.請求首行與請求頭之間用一個\r\n隔開,請求頭和請求體之間用兩個(\r\n\r\n)隔開(每個請求頭之間用一個\r\n隔開)
d.Cookie:也放在請求頭中。

如果要保持連接,設置成長連接,可以加一個請求頭(服務器客戶端都要設置):Connection:keep-alive 服務器和客戶端都要設置

?

請求方式: get與post請求

 
在服務端的存放位置:get 提交的數據會放在url(路徑)之后,以?分割url和傳輸數據,參數之間以&相連,(一般服務端收到數據是在請求首行中。)post提交的數據會放在HTTP的請求體當中。

小結:GET請求的數據是放在請求首行中的:跟在請求方式后面。 所以請求首航:GET/POST 請求路徑 /r/n請求地址 如果是在form表單中發送了GET請求的話,所填的數據會以xx%&xx=xx的格式掛在URL之后的。POST請求的數據是放在請求體中的:儲存格式是以xx=xx%&xx=xx的格式儲存的。

?

?

?

響應協議:

相應協議包括:相應首行:  協議版本(HTTP://1.1)  狀態碼(200)   OK(狀態碼的原因短句)\r\n響應頭:Content-Length: 363Content-Type: text/html。。。 響應體:服務端發給客戶端的數據。    

響應狀態碼

狀態碼的值是當客戶端向服務器端發送請求時,返回的請求結果。借助狀態碼,用戶可以知道服務器端是否正常請求還是出現了狀態嗎200 ok ,以3位數字和原因組成。

?

?

代碼演示:

?

?

?

?

?

wsgiref的作用

WSGI(Web Server Gateway Interface):
wsgiref模塊,是python基于WSGI協議開發的服務模塊。最簡單的Web應用,就是先把HTML用文件保存好。
用一個現成的HTTP服務器軟件,接受用戶請求,從文件中讀取HTML,返回給客戶端。但是,接收HTML請求,解析HTML請求,發送HTML請求都比較費時,所以這些都可以交給基于WSGI協議的wsgiref模塊來完成。
我們只需要專注于用python生成HTML文檔。

?

?

from wsgiref.simple_server import make_serverdef application(environ,start_response):start_response('200 OK',([('Content-Type','text/html')]))return [b"<a href='http://www.baidu.com'>baidu</a>"]         // 給客戶端返回的數據// 接受請求的端口和IP地址,默認為本機地址,如果收到客戶端請求,執行application函數
httpd = make_server('',8000,application)// 夯住,等待客戶端發送請求
httpd.serve_forever()如果打印environ:
ctrl+f:"PATH_INFO"
打印請求路徑:path=environ.get('PATH_INFO')print(path)
//默認是‘/’根路徑。這樣就可以在application函數中判斷,如果path==‘/login/’,就給客戶端返回一段login.html字符串,
如果path=='/index/',就給他返回首頁的index.html字符串.**********************定義路徑*******************************
urlpatterns = [('/login/',login),('/index/',index),('/reg/',reg)
]
可以定義一個列表,列表中寫路徑與函數的對應關系,走到對應的路徑,執行對應的函數。
函數可以定義。
// 獲取用戶訪問的url
current_path = environ.get('PATH_INFO')func = None
for key,item in urlpatterns:if key == 'current_path':func = itembreak//匹配上URL,執行對應函數,返回相應的html頁面,否則返回404沒有找的頁面
if func:ret = func()return [ret]
else:return [b"<h1>404</h1>"]//優化代碼,可以將所有的函數放到views文件中。//url也可以放到urls文件中。//在創建一個templates文件夾單存html文件。

?

?

?

?

?

轉載于:https://www.cnblogs.com/zsdbk/p/9206497.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對象的特點

對象有如下一些基本特點。(1) 以數據為中心。操作圍繞對其數據所需要做的處理來設置&#xff0c;不設置與這些數據無關的操作&#xff0c;而且操作的結果往往與當時所處的狀態 (數據的值)有關。 (2) 對象是主動的。它是進行處理的主體。不能從外部直接加工它的私有數據&a…

React Native集成Redux框架講解與應用

學過React Native的都知道&#xff0c;RN的UI是根據相應組件的state進行render的&#xff0c;而頁面又是由大大小小的組件構成&#xff0c;導致每個組件都必須維護自身的一套狀態&#xff0c;因此當頁面復雜化的時候&#xff0c;管理state會相當吃力的。而redux提供了一套機制來…

【筆試記錄】2021/3/10阿里

阿里20210310春招筆試記錄-Python解題 第一題 問題描述&#xff1a; 小偷從出發點按指定方向出發&#xff0c;除非遇到墻或超出城市必須轉方向&#xff0c;不然只能直走。城市大小m*n。輸入描述&#xff1a; 1. 第1行&#xff0c;三個數字m n k&#xff1b;m*n表示城市大小&…

Spring mvc中@RequestMapping 6個基本用法小結

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 小結下spring mvc中的RequestMapping的用法。 1&#xff09;最基本的&#xff0c;方法級別上應用&#xff0c;例如&#xff1a; …

學成在線--7.CMS頁面管理開發(異常處理)

文章目錄1.異常處理的問題分析2.異常處理流程3.可預知異常處理1.自定義異常類2.異常拋出類3.異常捕獲類4.異常處理測試1&#xff09;定義錯誤代碼2&#xff09;異常處理測試4.不可預知異常處理1.定義異常捕獲方法1&#xff09;異常拋出測試2&#xff09;異常捕獲方法1.異常處理…

函數重載與運算符重載

有兩種重載&#xff1a;函數重載是指在同一作用域內的若干個參數特征不同的函數可以使用相同的函數名字&#xff1b;運算符重載是指同一個運算符可以施加于不同類型的操作數上面。就是對已有的運算符重新進行定義&#xff0c;賦予其另一種功能&#xff0c;以適應不同的數據類型…

Django(6)

為什么不用_set related_name和related_query_name的區別related_name將成為相關對象的屬性&#xff0c;允許您使用外鍵對模型進行“倒退”。例如&#xff0c;如果ModelA有像下面這樣的字段&#xff0c;那么model_b ForeignKeyField(ModelB, related_namemodel_as)這將使您能夠…

P5 RV1126編碼測試Demo

目錄 前言 01 測試Demo大致流程圖 02 代碼分析 2.1 VI設備初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC綁定 2.4 創建 編碼線程 前言 從本章開始我們將要學習嵌入式音視頻的學習了 &#xff0c;使用的瑞芯微的開發板 &#x1f3ac; 個人主頁&#xff1a…

MP算法和OMP算法及其思想

主要介紹MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1]&#xff0c;這兩個算法雖然在90年代初就提出來了&#xff0c;但作為經典的算法&#xff0c;國內文獻(可能有我沒有搜索到)都僅描述了算法步驟和簡單的應用&#xff0c;并未對其進行詳盡的分析&…

【牛客刷題記錄】2021-03-10

牛客代碼刷題記錄1 問題一 給定一個數組序列, 需要求選出一個區間, 使得該區間是所有區間中經過如下計算的值最大的一個&#xff1a; 區間中的最小數 * 區間所有數的和最后程序輸出經過計算后的最大值即可&#xff0c;不需要輸出具體的區間。如給定序列 [6 2 1]則根據上述公式…

SpringMVC詳細示例實戰教程

一、SpringMVC基礎入門&#xff0c;創建一個HelloWorld程序 1.首先&#xff0c;導入SpringMVC需要的jar包。 2.添加Web.xml配置文件中關于SpringMVC的配置 123456789101112131415<!--configure the setting of springmvcDispatcherServlet and configure the mapping-->&…

學成在線--8.Freemarker入門教程

文章目錄1.FreeMarker介紹1&#xff09;常用的java模板引擎還有哪些&#xff1f;2&#xff09;freemarker是一個用Java開發的模板引擎3&#xff09;模板數據模型輸出2.FreeMarker快速入門1&#xff09;創建測試工程2&#xff09;配置文件3&#xff09;創建模型類4&#xff09;創…

面向對象建模

用面向對象方法開發軟件&#xff0c;通常需要建立3種形式的模型&#xff0c;它們分別是 描述系統數據結構的對象模型 &#xff0c; 描述系統控制結構的動態模型 和 描述系統功能的功能模型 。一個典型的軟件系統使用數據結構(對象模型)&#xff0c;執行操作(動態模型)&#xff…

if...elif...else...fi和case...esac的腳本條件判斷式

注意1&#xff1a; if 表達式和case 表達式的區別及什么時候使用哪個要有明確的區分&#xff1f; 『 if .... then .... fi 』對于變量的判斷是以『比對』的方式來分辨的&#xff0c; 如果符合狀態就進行某些行為&#xff0c;并且透過較多層次 (就是elif ) 的方式來進行多個變量…

安卓自定義View進階-分類與流程

自定義View繪制流程函數調用鏈(簡化版) 一.自定義View分類 我將自定義View分為了兩類(sloop個人分類法&#xff0c;非官方)&#xff1a; 1.自定義ViewGroup 自定義ViewGroup一般是利用現有的組件根據特定的布局方式來組成新的組件&#xff0c;大多繼承自ViewGroup或各種Layout&…

【筆試記錄】2021/3/13美團

2021/3/13美團筆試 1.旋轉二維數組 m, n map(int, input().split()) a [] for _ in range(m):a.append(list(map(int, input().split()))) for j in range(n):for k in range(m):print(a[k][j], end )print(end\n)輸入輸出 2.找出輸入字符串中的所有數字 s input() n …

Ubuntu品牌機批量涌入世界市場,中國不會例外

根據種種信息來源&#xff0c;我們可以預見&#xff1a; Ubuntu 品牌機不久即將涌入世界市場&#xff0c;中國也不會例外。對此現象&#xff0c;我們必須有一定的思想準備。 2004年4月&#xff0c;在澳大利亞一次學術會議上萌發了Ubuntu發行版的念頭&#xff0c;至今已經有8個年…

學成在線--9.頁面靜態化

文章目錄一.頁面靜態化流程二.數據模型1.輪播圖DataUrl接口1&#xff09;需求分析2&#xff09;接口定義3&#xff09;Dao4&#xff09;Service5&#xff09;Controller6&#xff09;測試2.遠程請求接口1&#xff09;添加依賴2&#xff09;配置RestTemplate3&#xff09;測試Re…

數據庫的完整性和安全性

數據的完整性防止數據庫中存在不符合語義的數據&#xff0c;也就是防止數據庫中存在不正確的數據防范對象&#xff1a;不合語義的、不正確的數據數據的安全性保護數據庫 防止惡意的破壞和非法的存取防范對象&#xff1a;非法用戶和非法操作

數據庫MySQL/mariadb知識點——日志記錄(2)二進制日志

二進制日志 記錄已提交事務導致數據改變或潛在導致數據改變的SQL語句&#xff0c;通過“重放”日志文件中的事件來生成數據副本&#xff0c;不依賴存儲引擎類型。 開啟二進制日志&#xff0c;默認是關閉的&#xff0c;二進制日志和數據分開存放 開啟記錄二進制文件的功能&#…