HTTP 协议(详解)
HTTP協(xié)議簡介:HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于萬維網(wǎng)(www.world wide web)服務(wù)器與本地瀏覽器之間傳輸文本的傳輸協(xié)議。
http請求協(xié)議與相應(yīng)協(xié)議HTTP協(xié)議包含瀏覽器發(fā)送數(shù)據(jù)到服務(wù)器需要遵循的請求協(xié)議與服務(wù)器發(fā)送數(shù)據(jù)到瀏覽器需要遵循的請求協(xié)議。用于HTTP協(xié)議交互的信被稱為報(bào)文。請求端的HTTP報(bào)文做請求報(bào)文,服務(wù)端做響應(yīng)報(bào)文。HTTP協(xié)議特性:(1)基于TCP/IPHTTP協(xié)議是基于TCP/IP協(xié)議之上的應(yīng)用層協(xié)議。(2)基于請求-響應(yīng)模式HTTP協(xié)議規(guī)定:請求從客戶端發(fā)出,最后服務(wù)器端響應(yīng)請求并返回。換句話說,肯定是先從客戶端開始建立通信的,服務(wù)器端在沒有收到請求之前不會(huì)發(fā)送響應(yīng)。HTTP協(xié)議是一種無狀態(tài)短鏈接協(xié)議。是基于TCP/IP協(xié)議的應(yīng)用層協(xié)議。一次請求一次響應(yīng)。?
請求協(xié)議:
請求格式:
請求協(xié)議包括:請求首行:請求方式 url 請求協(xié)議版本號請求頭 : key:value請求體 :里面放數(shù)據(jù)。
總結(jié):
a.請求協(xié)議由請求首行和請求頭、請求體組成。
b.請求首行是由:請求方式(GET/POST) HTTP協(xié)議(HTTP/1.1) 請求IP地址
c.請求首行與請求頭之間用一個(gè)\r\n隔開,請求頭和請求體之間用兩個(gè)(\r\n\r\n)隔開(每個(gè)請求頭之間用一個(gè)\r\n隔開)
d.Cookie:也放在請求頭中。
如果要保持連接,設(shè)置成長連接,可以加一個(gè)請求頭(服務(wù)器客戶端都要設(shè)置):Connection:keep-alive 服務(wù)器和客戶端都要設(shè)置
?
請求方式: get與post請求
在服務(wù)端的存放位置:get 提交的數(shù)據(jù)會(huì)放在url(路徑)之后,以?分割url和傳輸數(shù)據(jù),參數(shù)之間以&相連,(一般服務(wù)端收到數(shù)據(jù)是在請求首行中。)post提交的數(shù)據(jù)會(huì)放在HTTP的請求體當(dāng)中。小結(jié):GET請求的數(shù)據(jù)是放在請求首行中的:跟在請求方式后面。 所以請求首航:GET/POST 請求路徑 /r/n請求地址 如果是在form表單中發(fā)送了GET請求的話,所填的數(shù)據(jù)會(huì)以xx%&xx=xx的格式掛在URL之后的。POST請求的數(shù)據(jù)是放在請求體中的:儲(chǔ)存格式是以xx=xx%&xx=xx的格式儲(chǔ)存的。
?
?
?
響應(yīng)協(xié)議:
相應(yīng)協(xié)議包括:相應(yīng)首行: 協(xié)議版本(HTTP://1.1) 狀態(tài)碼(200) OK(狀態(tài)碼的原因短句)\r\n響應(yīng)頭:Content-Length: 363Content-Type: text/html。。。 響應(yīng)體:服務(wù)端發(fā)給客戶端的數(shù)據(jù)。響應(yīng)狀態(tài)碼
狀態(tài)碼的值是當(dāng)客戶端向服務(wù)器端發(fā)送請求時(shí),返回的請求結(jié)果。借助狀態(tài)碼,用戶可以知道服務(wù)器端是否正常請求還是出現(xiàn)了狀態(tài)嗎200 ok ,以3位數(shù)字和原因組成。
?
?
代碼演示:
?
?
?
?
?
wsgiref的作用
WSGI(Web Server Gateway Interface): wsgiref模塊,是python基于WSGI協(xié)議開發(fā)的服務(wù)模塊。最簡單的Web應(yīng)用,就是先把HTML用文件保存好。 用一個(gè)現(xiàn)成的HTTP服務(wù)器軟件,接受用戶請求,從文件中讀取HTML,返回給客戶端。但是,接收HTML請求,解析HTML請求,發(fā)送HTML請求都比較費(fèi)時(shí),所以這些都可以交給基于WSGI協(xié)議的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>"] // 給客戶端返回的數(shù)據(jù)// 接受請求的端口和IP地址,默認(rèn)為本機(jī)地址,如果收到客戶端請求,執(zhí)行application函數(shù) httpd = make_server('',8000,application)// 夯住,等待客戶端發(fā)送請求 httpd.serve_forever()如果打印environ: ctrl+f:"PATH_INFO" 打印請求路徑:path=environ.get('PATH_INFO')print(path) //默認(rèn)是‘/’根路徑。這樣就可以在application函數(shù)中判斷,如果path==‘/login/’,就給客戶端返回一段login.html字符串, 如果path=='/index/',就給他返回首頁的index.html字符串.**********************定義路徑******************************* urlpatterns = [('/login/',login),('/index/',index),('/reg/',reg) ] 可以定義一個(gè)列表,列表中寫路徑與函數(shù)的對應(yīng)關(guān)系,走到對應(yīng)的路徑,執(zhí)行對應(yīng)的函數(shù)。 函數(shù)可以定義。 // 獲取用戶訪問的url current_path = environ.get('PATH_INFO')func = None for key,item in urlpatterns:if key == 'current_path':func = itembreak//匹配上URL,執(zhí)行對應(yīng)函數(shù),返回相應(yīng)的html頁面,否則返回404沒有找的頁面 if func:ret = func()return [ret] else:return [b"<h1>404</h1>"]//優(yōu)化代碼,可以將所有的函數(shù)放到views文件中。//url也可以放到urls文件中。//在創(chuàng)建一個(gè)templates文件夾單存html文件。?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zsdbk/p/9206497.html
總結(jié)
以上是生活随笔為你收集整理的HTTP 协议(详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#控件前缀命名规范
- 下一篇: ? Generators生成器