關於我對http協議的理解
阿新 • • 發佈:2021-11-30
面試的時候,面試官通常會問你對http的理解,對於一個非科班和自學前端的人來說,http不就是一個ajax請求麼,返回一個數據,有什麼好說的。看很多文章也說的比較模糊,因為最近在學習esp8266開發板,想請求一個http介面,這個時候我們通常會建立一個套子接(tcp連線),建立以後我們會發送一個 類似這樣的資料
客戶端
import socket data = b''' GET / HTTP/1.1 Host: 0.0.0.0 ''' ### 這個其實就是http協議的樣子,包含請求頭 請求行,請求體 sc = socket.socket() sc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sc.connect(('0.0.0.0', 6789)) sc.send(data)
伺服器
# import network import socket # 引用socket模組 # 響應頭 responseHeaders = b''' HTTP/1.1 200 OK Content-Type: text/html Connection: close ''' # 響應頭網頁正文內容 content = b''' Hello World! ''' def main(): s = socket.socket() s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(socket.getaddrinfo("0.0.0.0", 6789)[0][-1]) # 繫結地址 s.listen(5) # 開啟監聽(最大連線數5) while True: # mian()函式中進行死迴圈,在這裡保持監聽請求與對應處理 print('listen....') client_sock, client_addr = s.accept() # 接收來自客戶端的請求與客戶端地址 print('Client address:', client_addr) client_sock.write(responseHeaders) # 向客戶端傳送響應頭 client_sock.write(content) # 向客戶端傳送網頁內容 client_sock.close() main() # 執行main()函式
socket其實就是建立tcp連線,我們所說的三次握手啊就是這裡。http協議就是建立在tcp連線上面分裝了一層,按照http協議的格式傳送資料,然後返回一個http響應格式給客戶端
所以說http是基於tcp/ip就是這麼來的。
http,FTP 各種協議 | 應用層 |
---|---|
tcp / udp | 會話層 |
ip | 傳輸層 |
交換機,閘道器什麼的 | 鏈路層 |
可以簡單的理解 tcp連線是原生JS,http就是react,Vue這類東西