一、静态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. 【VS开发】#pragma pack(push,1)与#pragma pack(1)的区别

    这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式. #pragma pack (n)             作用:C编译器将按照n个字节对 ...

  2. android基础---->ListView的使用

    简单说明 ListView在android程序中比较常用,在此做一下简单的总结 内容:自定义ListView, 自定义Adapter,ListView滚动事件的应用! 项目结构如下图

  3. 关于最火爆的服务器Tomcat你真的了解吗?

    作为Apache 软件基金会的Jakarta 项目中的一个核心项目,Tomcat因技术先进.性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应 ...

  4. GridView树状结构显示

    下面的树形结构代码需要GridVIew中的数据要求是按照上下级关系已经排列好的顺序,比如: GridView ID ParentID Name 1 0 父1 2 1 父1子1 3 1 父1子2 4 3 ...

  5. [转帖]Helm V2 迁移到 V3 版本

    Helm V2 迁移到 V3 版本 -- :: Mr-Liuqx 阅读数 63更多 分类专栏: kubernetes 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上 ...

  6. [转帖]FastDFS图片服务器单机安装步骤

    FastDFS图片服务器单机安装步骤 https://www.cnblogs.com/yuesf/p/11847103.html 前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDF ...

  7. Tomcat是一个Servlet容器?

    "Tomcat是一个Servlet容器",这句话对于2019年的程序员应该是耳熟能详的. 单纯的思考一下这句话,我们可以抽象出来这么一段代码: class Tomcat { Lis ...

  8. python实战项目 — 使用bs4 爬取猫眼电影热榜(存入本地txt、以及存储数据库列表)

    案例一: 重点: 1. 使用bs4 爬取 2. 数据写入本地 txt from bs4 import BeautifulSoup import requests url = "http:// ...

  9. pandas.DataFrame对象解析

    pandas.DataFrame对象类型解析 df = pd.DataFrame([[1,"2",3,4],[5,"6",7,8]],columns=[&quo ...

  10. 解决SQL server 18740、18456登录失败问题

    第一步:使用window管理员用户登录SQL server 第二步:如下图步骤(开始配置sa默认用户) 第三步:选择角色类型 第四步:选择和配置用户映射的数据库 第五步:授予允许连接,并开启登录权限 ...