1 what:用瀏覽器訪問的應用程序 2 優勢: -不須要客戶端 -更新直接在服務端更新,客戶端感知不到 -跨平臺性好(go語言是跨平臺編譯) ps:平臺編譯 好比:能夠在win平臺編譯出linux下的可執行文件 3 缺點: -強調瀏覽器的適用性(即兼容性) -用戶的數據都保存在軟件廠商那邊
1 bs:瀏覽器---服務端 (本質仍是cs) web開發是bs架構
2 cs:客戶端---服務端
html
python
#靜態頁面:靜態的html,內容不會改變,每次訪問看到的數據都同樣 #動態頁面:頁面的數據會發生變化,每次訪問看到的可能都不同(數據來源多是數據庫)
客戶端是瀏覽器,服務端本身寫(python)
#main.py # 1 寫一個web應用的服務端,經過瀏覽器(客戶端),來訪問 import socket server = socket.socket() # server.bind(('127.0.0.1', 8080)) server.bind(('192.168.43.99', 8081)) server.listen(5) while True: conn, addr = server.accept() # 接收瀏覽器傳過來的數據 data = conn.recv(1024) print(data) # 返回給瀏覽器數據(不符合http協議) # conn.send(b'hello world') # (1)返回數據符合http協議 # conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world') #(2) 返回符合html格式的數據 # conn.send('HTTP/1.1 200 ok \r\n\r\n <h1>title</h1>'.encode('utf-8')) # (3)返回一個html頁面,打開文件,轉成二進制,send一下 # with open('index.html','r',encoding='utf-8') as f: # data1=f.read() #把返回的數據拼起來 # response='HTTP/1.1 200 ok \r\n\r\n %s'%data1 # conn.send(response.encode('utf-8')) ## (4)實現動態頁面(靜態頁面,動態頁面) # 在index.html中寫一個特殊標記,使用python的變量去替換這個特殊標記 import time ctime=time.time() # 多是數據庫查詢出來的 with open('index.html','r',encoding='utf-8') as f: data1=f.read().replace('{{time}}',str(ctime)) response='HTTP/1.1 200 ok \r\n\r\n %s'%data1 conn.send(response.encode('utf-8')) conn.close() #index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{time}} <br> <br> <img height="100" width="100" src="a.jpg" alt=""> </body> </html>
linux
web
數據庫
1 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網服務器與本地瀏覽器之間傳輸超文本的傳送協議 2 應用層的協議 3 http協議特性(記一下) -1 基於tcp/ip之上的應用層協議 -2 基於請求-響應模式 -3 無狀態保存 -4 無鏈接 4 請求協議(瀏覽器發出來的)(記住) 三部分:請求首行,請求頭,請求體 ''' # 請求首行(以第一個\r\n區分的), # 請求方式:GET 請求地址:/lqz/handsome 協議:http 版本:1.1版本 GET /lqz/handsome HTTP/1.1\r\n # 請求頭(key:value形式) Host: 192.168.11.211:8080\r\n Connection: keep-alive\r\n Cache-Control: max-age=0\r\n Upgrade-Insecure-Requests: 1\r\n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n Accept-Encoding: gzip, deflate\r\n Accept-Language: zh-CN,zh;q=0.9\r\n\r\n' # \r\n\r\n 下面的是請求體的內容 ''' 5 響應協議 ''' # 響應首行 響應協議和版本:HTTP/1.1 響應的狀態碼和標誌:200 ok HTTP/1.1 200 ok \r\ # 響應頭(key:value形式) key:value key:valu \r\n\r\n # 響應體:在瀏覽器裏看到的東西(瀏覽器能把下面的html渲染成好看的樣子) <!DOCTYPE html> <html lang="en"> <h1>hello</h1> </html> ''' 6 響應狀態碼 -1xx:請求正在處理(用戶通常看不到) -2xx:請求成功(200) -3xx:重定向(301 302)訪問一個地址,轉到另外一個地址 -4xx:客戶端錯誤(404,403) -5xx:服務端錯誤(502) 7 url:統一資源定位符 # 格式 http://127.0.0.1:8080/order.html ftp://xxx 協議://IP:端口(80)/路徑?name=lqz&age=18 統一資源定位符是能夠從互聯網上訪問資源的一種方式,協議就是資源的地址