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

浙公网安备 33010602011771号