最简单的前后端数据交互
1 前言
本人断断续续地接触Web前后端已有一年多了,但是一直停留在表面,只知其一,不知其二。这个周末马上就要过去了,但是这两天啥都没做,想到这里,强烈的负罪感冲上心头,于是从床上跳起来,打开电脑就是一顿敲打,我今天唯一的目标就是完成一个最简单的Web服务器实例。通过这个实例我们可以了解:
- 浏览器在访问服务器时给浏览器发了什么
- 服务器如何给浏览器发送数据
2 准备
- Python3(当然,不强制要求,只要能够完成简单的Socket编程即可,原理相同)
3 代码实例
import socket
HOST, PORT = "192.168.0.107", 8888 # 这里IP地址替换成自己的IP地址即可,这样如果使用路由器的话可以通过手机访问,方便调试
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建服务端套接字
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 保证服务器的监听socket,即listen_socket在关闭后对应的端口能够立即释放,
# 否则将会在数分钟后才能释放
listen_socket.bind((HOST, PORT)) # 绑定地址和端口,''为空默认为本地'127.0.0.1'
listen_socket.listen(5)
print('Web服务器启动成功...')
while True:
print('\n\n等待客户端连接===================================================================')
client_connection, client_address = listen_socket.accept()
print('客户{}端连接成功'.format(client_address))
request = client_connection.recv(1024)
print(request.decode())
http_response = 'HTTP/1.1 200 OK\r\n\r\n<!DOCTYPE html><html><header><meta charset="utf-8"><title>欢迎光临</title></header><body><h1>欢迎光临!</h1></body></html>'
client_connection.sendall(http_response.encode())
client_connection.close()
print('客户端被关闭=====================================================================')
通过浏览器访问192.168.0.107:8888后服务器的打印信息如下(由于来回切换界面太麻烦,所以我把手机连入局域网,通过手机访问,用着很有感觉~)
等待客户端连接===================================================================
客户('192.168.0.106', 59212)端连接成功
浏览器请求信息:
GET /favicon.ico HTTP/1.1
Host: 192.168.0.107:8888
Connection: keep-alive
User-Agent: Mozilla/5.0 (Linux; Android 5.1; vivo X6Plus D Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36 VivoBrowser/7.4.10.0
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://192.168.0.107:8888/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en-US;q=0.9
客户端被关闭=====================================================================
浏览器的效果如下:
4 结语
本篇不打算解释浏览器请求的具体内容含义,后面用到的时候会专门讲解,谢谢!