1. 程式人生 > 其它 >關於我對http協議的理解

關於我對http協議的理解

面試的時候,面試官通常會問你對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這類東西