一、静态Web服务器案例代码static_web_server.py

# coding:utf-8

# 导入socket模块
import socket
# 导入正则表达式模块
import re
# 导入多进程模块
from multiprocessing import Process # 设置静态文件根目录
HTML_ROOT_DIR = "./html" # 定义个一个HTTPServer的类
class HTTPServer(object):
"""""" # 初始化方法
def __init__(self):
# 创建一个服务器socket套接字
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# socket地址重用配置
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # HTTPServer开启的方法
def start(self):
# 设置监听字节长度为128
self.server_socket.listen(128)
# 不间断的监听是否有人链接服务器
while True:
# 解析请求链接服务器的客户端信息
client_socket, client_address = self.server_socket.accept()
print("[%s:%s]用户连接上了" % client_address)
# 创建多进程handle_client处理客户端的请求
handle_client_process = Process(target=self.handle_client, args=(client_socket,))
# 开启多进程
handle_client_process.start()
# 关闭客户端socket套接字
client_socket.close() # 多进程handle_client
def handle_client(self, client_socket):
"""处理客户端请求"""
# 获取客户端数据
request_data = client_socket.recv(1024) print("request data:", request_data)
# 多请求数据用空格做分割处理
request_headers_lines = request_data.splitlines()
for line in request_headers_lines:
print(line) # 解析请求报文
request_start_line = request_headers_lines[0] # 利用正则表达式提取用户请求的文件名
file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)
print(file_name)
if "/" == file_name:
file_name = "/index.html" # 打开文件 ,读取内容
try:
file = open(HTML_ROOT_DIR + file_name, "rb")
except IOError:
# 设置打开文件失败时返回的响应起始行\r\n是换行
response_start_line = "HTTP/1.1 404 Not Found\r\n"
# 设置打开文件失败时返回的响应头
response_headers = "Server:My server\r\n"
# 设置打开文件失败时返回的响应体
response_body = "The File is not found"
else:
# 打开成功时读取的客户端要请求的文件数据
file_data = file.read()
# 关闭文件
file.close() # 构造响应数据
response_start_line = "HTTP/1.1 200 OK\r\n"
# 构造响应头
response_headers = "Server:My server\r\n"
# 构造响应体
response_body = file_data.decode("utf-8") response = response_start_line + response_headers + "\r\n" + response_body
print("response data:", response) # 向客户端返回响应数据
client_socket.send(bytes(response, "utf-8")) # 关闭客户端连接
client_socket.close() # 绑定端口
def bind(self, port):
self.server_socket.bind(("", port)) def main():
# 创建HTTPServer对象
http_server = HTTPServer()
# 绑定端口
http_server.bind(8000)
# 开启服务
http_server.start() if __name__ == "__main__":
main()

二、index.html代码

说明:index.html在html文件夹中,html文件夹和static_web_server.py在同目录

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My web</title>
</head>
<body>
<h1>Se7eN_HOU</h1>
</body>
</html>

三、浏览器运行效果

四、说明

在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:

  • HTML是一种用来定义网页的文本,会HTML,就可以编写网页;

  • HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信

python网络-静态Web服务器案例(29)的更多相关文章

  1. python网络-动态Web服务器案例(30)

    一.浏览器请求HTML页面的过程 了解了HTTP协议和HTML文档,其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作 ...

  2. Python之HTTP静态Web服务器开发

    众所周知,Http协议是基于Tcp协议的基础上产生的浏览器到服务器的通信协议 ,其根本原理也是通过socket进行通信. 使用HTTP协议通信,需要注意其返回的响应报文格式不能有任何问题. 响应报文, ...

  3. 04-HTTP协议和静态Web服务器

    一.HTTP协议(HyperText Transfer Protocol)     超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...

  4. python 启动简单web服务器

    有时我们在开发web静态页面时,需要一个web服务器来测试. 这时可以利用python提供的web服务器来实现. 1.在命令行下进入某个目录 2.在该目录下运行命令: python -m Simple ...

  5. 用HTTP核心模块配置一个静态Web服务器

    静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module.n ...

  6. Harp – 内置常用预处理器的静态 Web 服务器

    Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...

  7. 超简易静态Web服务器

    使用 HttpListener 写的一个超简易静态Web服务器 开发环境:VS2010 + .NET2.0 http://files.cnblogs.com/zjfree/EasyIIS.rar

  8. Fenix – 基于 Node.js 的桌面静态 Web 服务器

    Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...

  9. node 创建静态web服务器(下)(处理异步获取数据的两种方式)

    接上一章. 上一章我们说创建的静态web服务器只能识别html,css,js文件,功能较为单一,且图片格式为text/html,这是不合理的. 本章,我们将解决该问题. 这里,我们先准备好一个json ...

随机推荐

  1. java8新特性六-Optional 类

    Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保 ...

  2. [转载]机器学习&深度学习经典资料汇总,全到让人震惊

    自学成才秘籍!机器学习&深度学习经典资料汇总 转自:中国大数据: http://www.thebigdata.cn/JiShuBoKe/13299.html [日期:2015-01-27] 来 ...

  3. gorm 批量插入数据

    使用gorm 插入数据的时候,根据官方文档可以使用Create或者FirstOrCreate(). 但是官方没有提供批量插入数据的方法. 根据github的 issue得知,我们可以通过自己拼接sql ...

  4. voltile解析

    https://www.cnblogs.com/dolphin0520/p/3920373.html

  5. Linux中添加用户与删除用户

    注意:添加用户和删除用户需要root来执行. 添加用户 用useradd命令,例如: # useradd -d/home/tom -s/bin/bash -u1000 tom  这样就添加了新用户to ...

  6. git 学习笔记 ---远程仓库

    Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的, ...

  7. 访问Harbor报502 Bad Gateway

    Harbor启动都是多个容器的,首先查看一下是否有相关容器未启动 docker ps | grep harbor cae340214e57 goharbor/nginx-photon:v1.9.3 & ...

  8. Linux 中ifconfig和ip addr命令看不到ip

    解决方案: 输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT权限改为yes 保存退出,按Esc,输入:wq 重启网络服务,输入 sudo ...

  9. C#学习笔记------参数

    一.形参 形参是本地变量,它声明在方法的参数列表中,而不是方法体中.

  10. Web.sitemap网站导航

    全文注释: Web.sitemap导航XML文件,站点地图,功能实现菜单 1.xml的版本1.0 和编码utf-8 2.Url链接 Title显示的标题 Description描述(ToolTip) ...