Flask框架小程序后端分離開發(fā)學(xué)習(xí)筆記《1》網(wǎng)絡(luò)知識
Flask是使用python的后端,由于小程序需要后端開發(fā),遂學(xué)習(xí)一下后端開發(fā)。
一、網(wǎng)址組成介紹
- 協(xié)議:http,https (https是加密的http)
- 主機(jī):g.cn zhihu.com之類的網(wǎng)址
- 端口:HTTP協(xié)議默認(rèn)是80,因此一般不用填寫
- 路徑下面的「/question/31838184」是路徑
http://www.zhihu.com/question/31838184
http://www.zhihu.com:80/
二、通信
電腦通信靠IP地址,IP地址記不住就發(fā)明了域名(domain name),然后電腦自動向DNS服務(wù)器(domain name server)查詢域名對應(yīng)的IP地址。
比如g.cn這樣的網(wǎng)址,可以通過電腦的ping程序查出對應(yīng)IP地址
ping g.cn根據(jù)域名ping出來的ip不一定是一樣的。
三、端口是什么?
一個比喻:
用郵局互相寫信的時候,ip相當(dāng)于地址(也可以看做郵編,地址是域名)
端口是收信人姓名(因為一個地址比如公司、家只有一個地址,但是卻可能有很多收信人)
端口就是一個標(biāo)記收信人的數(shù)字。
端口是一個16位的數(shù)字,所以范圍是 0-65535 (2**16)
順著ip地址可以找到你的電腦,但是找不到與哪個程序通信。
端口就是某一個程序網(wǎng)絡(luò)服務(wù)的唯一表示,端口是由操作系統(tǒng)分配的,所以當(dāng)程序關(guān)閉端口會被回收,之后重新打開不一定是原先的端口了。
四、HTTP協(xié)議
一個傳輸協(xié)議,協(xié)議就是雙方都遵守的規(guī)范。
為什么叫超文本傳輸協(xié)議呢,因為收發(fā)的是文本信息。
1,瀏覽器(客戶端)按照規(guī)定的格式發(fā)送文本數(shù)據(jù)(請求)到服務(wù)器
2,服務(wù)器解析請求,按照規(guī)定的格式返回數(shù)據(jù)到瀏覽器
3,瀏覽器解析得到的數(shù)據(jù),并做相應(yīng)處理
請求和返回是一樣的數(shù)據(jù)格式,大致可分為4部分:
1,請求行或者響應(yīng)行
2,Header(請求的 Header中 Host字段是必須的,其他都是可選)
3,lrlnlrln(連續(xù)兩個換行回車符,用來分隔Header和Body)
4,Body(可選)(數(shù)據(jù)信息)
請求的格式,注意大小寫(這是一個不包含Body的請求):原始數(shù)據(jù)如下
‘GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n’
打印出來如下兩行:
GET / HTTP/1.1
Host: g.cn
其中
1, GET是請求方法(還有POST等,這就是個標(biāo)志字符串而己)
2,/是請求的路徑(這代表根路徑)
3,HTTP/1.1中,1.1是版本號,通用了20年
具體字符串是’GET / HTTP/1.1 \r\nhost:g.cn \r\n\r\n ’
返回的數(shù)據(jù)如下
HTTP/1.1 301 Moved Permanently (1.1為版本、301為狀態(tài)碼)
Alternate-Protocol: 80: quic, p=0,80:quic , p=o
cache-Control: private,max-aqe=2592000
Content-Length: 218 (常見:body頁面長度218字節(jié))
Content-Type: text/ html; charset=UTF-8
Date: Tue,07 Jul 2015 02:57:59 GMT
Expires: Tue,07 Jl 2015 02:57:59 GMT
Location: http : / /www. google.cn/
server: gws
X-Frame-options: SAMEORIGIN
X一xSS-Protection: l; mode=block(header頭部)
Body部分太長,先不貼了其中響應(yīng)行(第一行):
- HTTP/1.1是版本
- 301 是狀態(tài)碼
- Moved Permanently 是狀態(tài)碼的描述
瀏覽器會自己解析Header部分,然后將Body顯示成網(wǎng)頁
五、后端web服務(wù)器做什么
主要就是解析請求,發(fā)送相應(yīng)的數(shù)據(jù)給客戶端。
例如下面的代碼就是模擬瀏覽器發(fā)送HTTP
請求給服務(wù)器并把收到的所有信息打印出來(使用的是最底層的socket,現(xiàn)階段不必
關(guān)心這種低層,web開發(fā)是上層開發(fā))文章來源:http://www.zghlxwxcb.cn/news/detail-796973.html
#codinq: utf-8
import socket
# socket 是操作系統(tǒng)用來進(jìn)行網(wǎng)絡(luò)通信的底層方案#簡而言之,就是發(fā)送/接收數(shù)據(jù)
#創(chuàng)建一個socket對象
#參數(shù)socket.AF_INET表示是ipv4協(xié)議]#參數(shù)socket. sOCK_STREAM表示是tcp協(xié)議
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#這兩個其實是默認(rèn)值,所以你可以不寫,如下
#s = socket.socket() socket只能用于http協(xié)議的,不能用于https
#s = ssl. wrap_socket ( socket.socket ( ) ) 這個用于https
#主機(jī)(域名或者ip)和端口
host = 'g.cn'
port = 80
#用connect函數(shù)連接上主機(jī),參數(shù)是一個tuple
s.connect( (host,port) )
#連接上后,可以通過這個函數(shù)得到本機(jī)的ip和端口(本地ip路由器分配得到,本地端口操作系統(tǒng)分配的)
ip, port = s.getsockname()
print('本機(jī)ip 和port {}\{}'.format(ip, port))
#構(gòu)造一個HTTP請求
http_request = 'GET / HTTP/1.1\r\nhost:{}\r\n\r\n'.format(host)
#發(fā)送HTTP請求給服務(wù)器
#send函數(shù)只接受bytes 作為參數(shù)
# str.encode把str轉(zhuǎn)換為bytes,編碼是utf-8
request = http_request.encode('utf-8')
print('請求',request)
s.send(request)
# 接受服務(wù)器的響應(yīng)數(shù)據(jù)
#參數(shù)是長度,這里為1023字節(jié)
#所以這里如果服務(wù)器返回的數(shù)據(jù)中超過1023的部分你就得不到了,正經(jīng)一次性最長大概1500字節(jié),
response = s.recv (1023)
#輸出響應(yīng)的數(shù)據(jù),bytes類型
print('響應(yīng)',response)
#轉(zhuǎn)成str再輸出
print('響應(yīng)的str 格式',response.decode ('utf-8'))
# 這就是平時我們在瀏覽器輸入“g.cn”時候的內(nèi)部細(xì)節(jié)
# 運行結(jié)果
# 本機(jī)ip 和port 10.2.93.112\53538
# 請求 b'GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n'
# 響應(yīng) b'HTTP/1.1 301 Moved Permanently\r\nLocation: https://google.cn/\r\nX-Content-Type-Options: nosniff\r\nServer: sffe\r\nContent-Length: 215\r\nX-XSS-Protection: 0\r\nDate: Tue, 16 Jan 2024 02:26:18 GMT\r\nExpires: Tue, 16 Jan 2024 02:56:18 GMT\r\nCache-Control: public, max-age=1800\r\nContent-Type: text/html; charset=UTF-8\r\nAge: 891\r\n\r\n<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">\n<TITLE>301 Moved</TITLE></HEAD><BODY>\n<H1>301 Moved</H1>\nThe document has moved\n<A
# 響應(yīng)的str 格式 HTTP/1.1 301 Moved Permanently
# Location: https://google.cn/
# X-Content-Type-Options: nosniff
# Server: sffe
# Content-Length: 215
# X-XSS-Protection: 0
# Date: Tue, 16 Jan 2024 02:26:18 GMT
# Expires: Tue, 16 Jan 2024 02:56:18 GMT
# Cache-Control: public, max-age=1800
# Content-Type: text/html; charset=UTF-8
# Age: 891
#
# <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
# <TITLE>301 Moved</TITLE></HEAD><BODY>
# <H1>301 Moved</H1>
# The document has moved
# <A >here</A>.
# </BODY></HTML>
# 上面一部分是瀏覽器的控制信息,我們看不到的,下面的是網(wǎng)頁頁面代碼,經(jīng)過瀏覽器渲染之后就會展示給我們看
本筆記是學(xué)習(xí)B站某視頻的教程,作為一個自己的學(xué)習(xí)記錄,侵刪。文章來源地址http://www.zghlxwxcb.cn/news/detail-796973.html
到了這里,關(guān)于Flask框架小程序后端分離開發(fā)學(xué)習(xí)筆記《1》網(wǎng)絡(luò)知識的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!