[Web服务器] 简易静态Web服务器的搭建
创始人
2024-09-25 01:49:59
0

什么是Web服务器

可以为发出请求的浏览器提供静态文档的程序

平时我们浏览百度新闻数据的时候,每天的新闻数据都会发生变化,那访问的这个页面就是动态的,而我们开发的是静态的,每天访问我们自己的静态web服务器,页面的数据不会发生变化

Web服务器的工作原理

  1. 用户在终端发出访问请求
  2. 通过tcp协议建立链接
  3. 生成http报文发送到静态Web服务器中
  4. 服务器解析报文, 并把用户申请的资源打包成http报文发送给用户 
  5. 应答体中携带的数据发送到浏览器浏览器经过渲染产生具体页面

 Python搭建简易的Web服务器

1. 搭建服务器端的基本步骤: 导入socket包, 创建套接字对象, 设置端口复用, 绑定IP和端口号, 设置监听, 接受客户端的数据

import socket # 创建套接字对象 web_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口复用 web_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 绑定IP和端口 web_server.bind(('',8001)) # 设置监听 web_server.listen(128) # 接受客户端HTTP报文 while True:     new_socket, ip_post = web_server.accept()      recv_data = new_socket.recv(1024) 

 打印出用户端请求的HTTP报文, 我们可以看到下面的几个部分:

  1. 请求行: 请求方法GET, 请求的界面, 使用的协议
  2. 请求头: 客户端的具体信息
  3. 空行: 空行

为了获取用户具体的请求界面, 对HTTP请求报文做出处理, 通过切割切片可以获得用户具体的资源 

    if recv_data:         recv_data = recv_data.decode('utf-8')         request_list = recv_data.split(' ',maxsplit=2)         url = request_list[1][1:]

 然后就根据用户请求的资源打包成HTTP响应报文发送给用户即可

注意: 发送的数据要组成HTTP报文的形式, 响应行, 响应头, 空行, 响应体都却以不可

如果服务器没有用户请求的资源, 返回找不到资源给用户, 这里需要注意响应行的状态不同

        try:             with open(url, 'rb') as f:                 data = f.read()          except: # 报错没有找到             # 响应行             http_line = 'Http/1.1 404 Not Found\r\n'             # 响应头             http_header = 'Server:PythonWeb\r\nContent_type = text/html;charset=utf-8 \r\n'             # 空行              http_body = "sorry, can't find the resource..."             response = (http_line+http_header+'\r\n'+http_body).encode('utf-8')             new_socket.send(response)          else:  # 没报错, 找到文件             http_line = 'Http/1.1 200 OK\r\n'             http_header = 'Server:PythonWeb\r\n'             response = (http_line + http_header + '\r\n').encode('utf-8') + data             new_socket.send(response)         finally:             new_socket.close()

最终的代码如下: 

import socket # 创建套接字对象 web_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置端口复用 web_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 绑定IP和端口 web_server.bind(('',8001)) # 设置监听 web_server.listen(128)  while True:     new_socket, ip_post = web_server.accept()      recv_data = new_socket.recv(1024)      if recv_data:         recv_data = recv_data.decode('utf-8')         request_list = recv_data.split(' ',maxsplit=2)         url = request_list[1][1:]         print(url)          # 返回http报文         try:             with open(url, 'rb') as f:                 data = f.read()          except: # 报错没有找到             # 响应行             http_line = 'Http/1.0 404 NotFound\r\n'             # 响应头             http_header = 'Server:PythonWeb\r\nContent_type = text/html;charset=utf-8 \r\n'             # 空行              http_body = "sorry, can't find the resource..."             response = (http_line+http_header+'\r\n'+http_body).encode('utf-8')             new_socket.send(response)          else:  # 没报错, 找到文件             http_line = 'Http/1.0 200 OK\r\n'             http_header = 'Server:PythonWeb\r\n'             response = (http_line + http_header + '\r\n').encode('utf-8') + data             new_socket.send(response)         finally:             new_socket.close() 

尝试访问服务器的内容, 发现可以正常访问 

FastAPI 

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)最快的 Python web 框架之一。

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:openapi (以前被称为 Swagger) 和 JSON Schema . 

使用FastAPI, 可以快速构建Web服务器

1. 配置FastAPI环境

在终端中输入以下命令下载相关资源包 

pip install fastapi

pip install uvicorn

2.导入如下资源包后,  使用FastAPI实例化对象app, 然后定义函数,

在函数中读取相关的资源文件, 然后返回Response对象, content参数是读取的文件数据, media_type是文件类型, html类型数据

最后使用app.get()方法装饰函数, 参数为url, 用户请求的资源的地址

 from fastapi import FastAPI  from fastapi import Response  import uvicorn  app = FastAPI()  @app.get('/China_Daily_Website.html') def China_Daily_Website():      with open('China_Daily_Website.html','rb') as f:         data = f.read()      return Response(content=data, media_type='text/html')  @app.get('/TED.html') def TED():     with open('TED.html','rb') as f:         data = f.read()      return Response(content=data, media_type='text/html')

3.在uvicorn中运行, 第一个参数是FastAPI框架, 第二个参数的绑定的IP地址, 第三个是绑定的端口号

uvicorn.run(app, host='192.168.68.112',port=8000)

运行代码, 正常访问界面

 因为我没有下载网页的图片, 所以没有显示出来, 如果你有网页的全部资源, 是可以正常显示的

完整代码 

 from fastapi import FastAPI  from fastapi import Response  import uvicorn  app = FastAPI()  @app.get('/China_Daily_Website.html') def China_Daily_Website():      with open('China_Daily_Website.html','rb') as f:         data = f.read()      return Response(content=data, media_type='text/html')  @app.get('/TED.html') def TED():     with open('TED.html','rb') as f:         data = f.read()      return Response(content=data, media_type='text/html')   uvicorn.run(app, host='192.168.68.112',port=8000)

 

相关内容

热门资讯

安卓手机系统搬到电脑,跨越设备... 你有没有想过,把安卓手机系统搬到电脑上,那会是怎样的体验呢?想象你可以在电脑上直接使用微信、抖音,甚...
安卓系统如何停止禁用,安卓系统... 手机里的安卓系统突然间变得不听话了,各种权限被禁用,真是让人头疼啊!不过别急,今天就来教你怎么巧妙地...
安卓系统中控屏幕,尽享智能生活 你有没有发现,现在手机屏幕越来越大,看着眼睛都累了呢?别急,今天就来给你揭秘一下安卓系统中控屏幕的神...
鸿蒙系统国外加安卓,打造国际化... 你知道吗?最近科技圈可是炸开了锅,因为华为的鸿蒙系统在国外市场竟然和安卓系统来了个亲密接触。这可不是...
安卓系统能调试设备,安卓设备调... 你有没有想过,你的安卓手机或者平板电脑其实是个大宝藏呢?里面藏着无数的秘密,等着你去探索。没错,我说...
安卓系统故障码,快速诊断与解决... 手机突然卡顿,屏幕闪个不停,是不是又遇到什么大麻烦了?别慌,今天就来和你聊聊安卓系统故障码那些事儿,...
安卓系统版本查询截图,从初代到... 你有没有想过,你的安卓手机里隐藏着多少秘密呢?比如,它的系统版本是多少?这可是了解手机性能和升级情况...
安卓 系统空间怎么访问,轻松掌... 你有没有遇到过手机里空间不够用的情况?别急,今天就来教你怎么轻松访问安卓系统的隐藏空间,让你的手机瞬...
安卓系统自动读短信,轻松掌握信... 你有没有想过,手机短信这东西,有时候真是让人又爱又恨呢?信息一来,手机震动个不停,有时候手忙脚乱,有...
安卓系统怎么连接雪铁龙,一键实... 你有没有想过,你的安卓手机和雪铁龙汽车之间也能来个亲密接触呢?没错,就是连接起来,让你的车生活更加智...
螳螂营销安卓版系统,助力企业腾... 你知道吗?最近我在手机上发现了一个超级有趣的应用——螳螂营销安卓版系统!这款应用简直就像是一个小助手...
机器人 安卓系统,探索安卓系统... 你知道吗?在这个科技飞速发展的时代,机器人已经不再是科幻电影里的专属了。它们正悄悄地走进我们的生活,...
安卓开发的系统框架,架构与核心... 你有没有想过,为什么你的安卓手机那么聪明,能帮你做那么多事情?其实,这一切都离不开安卓开发的系统框架...
安卓系统版本rom大全,全面解... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?从安卓1.0到现在的安卓12,每一代系统都给我...
所有安卓系统疯狂报错,揭秘背后... 最近是不是发现你的安卓手机突然变得有点儿“疯狂”?各种报错信息层出不穷,让人头疼不已。别急,今天就来...
安卓系统的悬浮球,便捷操作与个... 你有没有发现,手机上的安卓系统最近有个新玩意儿,叫悬浮球?这可不是什么小打小闹的更新,它可是让手机操...
比亚迪双击解锁安卓系统,畅享智... 哇,你知道吗?最近比亚迪的双击解锁安卓系统可是引起了不小的轰动呢!想象一辆汽车,不仅动力强劲,还能像...
安卓系统应用沙盒,构建安全、独... 你知道吗?在智能手机的世界里,安卓系统就像是一个热闹的市集,各种应用如过江之鲫,争奇斗艳。但你知道吗...
什么电视用安卓系统,探索智能电... 你有没有想过,家里的电视竟然也能用安卓系统?没错,就是那个我们手机上常用的安卓系统,现在竟然也能在电...
安卓免费烘焙收银系统,助力烘焙... 你有没有想过,在繁忙的烘焙店中,一款好用的收银系统能让你的生意如虎添翼?今天,就让我带你一探究竟,看...