关于我对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这类东西

posted @ 2021-11-30 15:41  天上来  阅读(76)  评论(0)    收藏  举报