写在前面的一些P话:

在公司网站开发中,我们往往借助于Flask、Django等网站开发框架去提高网站开发效率。那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么?

我们不止仅仅会使用框架开发,还需要知其所以然

今天领大家不借助任何框架的基础上手动搭建一个资料查找网站
点击此处找管理员免费领取资料

主要内容

  • TCP网络模型
  • 正则表达式匹配资源
  • 如何编写一个tcp server服务端

开始我们的代码,先是导入模块

如何实现一个静态的服务器呢? 可以使用Python自带的一个通讯模型:socket

python中内置的网络模型库tcp / udp

import socket

为浏览器发送数据的函数

1. 当浏览器链接到网站服务器的时候

def service_client(new_socket):
request = new_socket.recv(1024)
print(request)

2. 向浏览器发送http数据
如果浏览器在接收完http协议数据之后遇到了换行,自动将下面的数据转成网站内容body中去

response = 'HTTP/1.1 200 OK \r\n'
response += '\r\n'
# 构建你想要显示的数据内容
response += 'hello world'

3. 浏览器接受到的数据是由编码集的,所以我们需要对字符串进行一次编码

 new_socket.send(response.encode('utf-8'))

4. 当服务完浏览器之后,需要释放系统资源

new_socket.close()

创建一个执行函数

1. 创建一个tcp套接字
socket模块需要两个参数 网络协议(pc ipv4 ipv6) 模型类型

def main():
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

我们操作系统内部有65535个服务端口,当一个程序运行的时候[进程] 占用一个端口
浏览器软件运行占用的端口:80
文件上传端口:22
网站指定端口:443

端口是有限的,当程序完成任务之后一定要释放端口 刷新资源
2. 当网站服务中断时 需要立即释放端口

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

3.绑定本机信息

tcp_server_socket.bind(('', 80))

通过浏览器去访问网站资源 [数据 html css JavaScript 静态文件(图片 音频)]
需要让浏览器首先能找到这台电脑 ip 才可以访问这台电脑的数据资源
需要绑定电脑的ip地址
4.将网站服务设置成监听模式
等待浏览器链接

tcp_server_socket.listen(128)

网站服务

    while True:
'''
new_socket 负责向浏览器发送数据的
client_addr 记录当前链接电脑的信息(ip port)
'''
new_socket, client_addr = tcp_server_socket.accept()
service_client(new_socket)
# 使用new_socket向浏览器发送数据

启动程序

if __name__ == "__main__":
main()

运行代码


出现乱码,可以把utf-8改为GBK

手写网站服务器~用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容的更多相关文章

  1. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  2. python socket 实现的简单http服务器

    预备知识: 关于http 协议的基础请参考这里. 关于socket 基础函数请参考这里. 关于python 网络编程基础请参考这里. 一.python socket 实现的简单http服务器   废话 ...

  3. 用nodejs搭建一个简单的服务器

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  4. python定义的一个简单的shell函数的代码

    把写代码过程中经常用到的一些代码段做个记录,如下代码段是关于python定义的一个简单的shell函数的代码. pipe = subprocess.Popen(cmd, stdout=subproce ...

  5. 初学Node(六)搭建一个简单的服务器

    搭建一个简单的服务器 通过下面的代码可以搭建一个简单的服务器: var http = require("http"); http.createServer(function(req ...

  6. Node学习(二) --使用http和fs模块实现一个简单的服务器

    1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...

  7. Express 的基本使用(创建一个简单的服务器)

    Express 的基本使用(创建一个简单的服务器) const express = require('express') // 创建服务器应用程序 // 相当于 http.creatServer co ...

  8. 使用Python启动一个简单的服务器

    在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer,我们可以很简单的使用  python -m SimpleHTTPServ ...

  9. Linux:写一个简单的服务器

    开始了新篇章:Linux网络编程. 基础知识: 套接字概念 Socket本身有"插座"的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型.本质为内核借助缓冲区形成的伪 ...

随机推荐

  1. vue动态绑定属性--基本用法及动态绑定class

    动态绑定属性v-bind:,语法糖形式:省略v-bind,仅写一个冒号. 一.动态绑定基本属性 1 <body> 2 <!-- v-bind 动态绑定属性-基本用法 --> 3 ...

  2. 公私钥 SSH 数字证书

    公私钥 SSH 数字证书 小菜鸟今天买了华为云一台服务器,在使用公私钥远程登录服务器的时候,忘记了相关公钥私钥的原理和一些应用了,今天复习一波做个记录. 相关概念 公钥:公钥用来给数据加密,用公钥加密 ...

  3. Find the Maximum - 题解【思维,贪心】

    题面 这是2022年ICPC昆明站的F题.在赛场上,我一开始敲了个贪心,但是出锅了,改敲树形DP,但是时间来不及了.在队友的提醒下补过了这个题,知道解法的我发现我就是个纯纯的老坛-- 原题链接在牛客网 ...

  4. 如何使用 Redis 缓存

    如何使用 Redis 缓存 前言 旁路缓存 只读缓存 读写缓存 设置多大的缓存合适 内存被写满了如何处理 缓存经常遇到的问题 1.缓存中的数据和数据库中的不一致 读写缓存 只读缓存 来个异常的栗子 1 ...

  5. XCTF练习题---CRYPTO---混合编码解析

    XCTF练习题---CRYPTO---混合编码解析 flag:cyberpeace{welcometoattackanddefenceworld} 解题步骤: 1.观察题目,下载附件进行查看 2.看到 ...

  6. go-websocket服务端/客户端

    目录 websocket 服务端 客户端 websocket websocket.Upgrader升级为websocket协议 服务端 package main import ( "fmt& ...

  7. MybatisPlus常用注解

    一.@TableName value属性 实体类的名字是User,数据库表名是t_user @TableName(value = "t_user") public class Us ...

  8. Nature | DNA甲基化测序助力人多能干细胞向胚胎全能8细胞的人工诱导|易基因项目文章

    北京时间2022年3月22日凌晨,<Nature>期刊在线刊登了由中国科学院广州生物医学与健康研究所等单位牵头,深圳市易基因科技有限公司.中国科学技术大学等单位参与,应用人多能干细胞向胚胎 ...

  9. SpringBoot从0到0.7——序言

    SpringBoot从0到0.7-- 序言 最近做java代码审计发现很多地方看不懂,所以就开始学框架,自己做网站来了解网站的运行原理.函数.接口.参数等等,通过学习SpringBoot框架来从点到面 ...

  10. 如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知

    请访问原文链接:如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 随着 macOS Montere ...