文章目錄
- 1.http協議簡介
- 2.http協議特性
- 3.http請求和響應協議
- 4.最簡單的Web程序
- 5.基于flask搭建web?站
- 6.瀏覽器開發者?具(重點)
1.http協議簡介
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于
萬維網(WWW:Norld Wide Web)服務器與本地瀏覽器之間傳輸超文本的
傳送協議。HTTP是一個屬于應用層的面向對象的協議,由于其簡捷、快速
的方式,適用于分布式超媒體信息系統。它于1990年提出,經過幾年的使
用與發展,得到不斷地完善和擴展。HTTP協議工作于客戶端服務端架構為
上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有
請求。Web服務器根據接收到的請求后,向客戶端發送響應信息。
![[Pasted image 20240525200441.png]]
2.http協議特性
- 基于TCP/IP協議
http協議是基于TCP/IP協議之上的應用層協議。 - 基于請求一響應模式
HTTP協議規定,請求從客戶端發出,最后服務器端響應該請求并返回。換句話說,肯定
是先從客戶端開始建立通信的,服務器端在沒有接收到請求之前不會發送響應 - 無狀態保存
HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議自身不對請求和響
應之間的通信狀態進行保存。也就是說在“TTP這個級謎別,協議對于發送過的請求或響
應都不做持久化處理。
使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產生。協議本身并不保
留之前一切的請求或響應報文的信息。這是為了更快地處理大量事務,確保協議的可
伸縮性,而特意把HTTP協議設計成如此簡單的。 - 短連接和長連接
HTTP1.O默認使用的是短連接。瀏覽器和服務器每進行一次HTTP操作,就建立一次
連接,任務結束就中斷連接。
HTTP/1.1起,默認使用長連接。要使用長連接,客戶端和服務器的HTTP首部的
Connection都要沒置為keep-a]iye,才能支特長連接HTTP長連接,指的是復用TCP連接。多個HTTP請求可以復用同一個TCP連接,這就節省了TCP連接建立和斷開的消耗。
3.http請求和響應協議
![[Pasted image 20240525200948.png]]
htp協議包含由瀏覽器發送數據到服務器需要遵循的請求協議與服務器發送數據到瀏覽器需要遵循的請求協議。用于HTTP協議交互的信被為HTTP報文。請求端(客戶端)的HTTP報文做請求報文,響應端(服務器端)的做響應報文。HTTP報文本身是由多行數據構成的字文本。
![[Pasted image 20240525201022.png]]
一個完整的URL包括:協議、ip、端口、路徑、參數
例如:https:/www.baidu.com/s?wd=yuan
其中https是協議,www,baidu.com是IP,端口默認80,/s是路徑,參數是wd=yuan請求方式:get與post請求GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之
間以&相連,如EditBook?name=test1&id=123456.P0ST方法是把提交
的數據放在HTTP包的請求體中
GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制
響應狀態碼:狀態碼的職是當客戶端向服務器端發送請求時,返回的請求結果。借助狀態碼,用戶可以知道服務器端是正常理了請求,還是出現了。狀態碼如2000K,以3位數字和原因組成。
4.最簡單的Web程序
import socket sock = socket.socket()
sock.bind(("127.0.0.1", 7777))
sock.listen(3) print("服務器已啟動..")
while True: conn, addr = sock.accept() data = conn.recv(1024) print("收到請求:", data.decode()) response = """HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n <h1>Hello, World!</h1> <img src='https://img0.baidu.com/it/u=4011424408,4733765&fm=253&fmt=auto&app=138&f=JPEG?W=500&h=750'>""" conn.sendall(response.encode()) conn.close()
5.基于flask搭建web?站
from flask import Flask, render_template
import datetime app = Flask(__name__, template_folder="templates") @app.route("/index")
def index(): return render_template("index.html") @app.route("/timer")
def timer(): now = datetime.datetime.now().strftime("%Y-%m-%d %X") return render_template("timer.html", now=now) app.run()
6.瀏覽器開發者?具(重點)
(1)Elements
(2)Network
(3)Application