web框架的本质初识

1.什么是HTML

HTML是一个超文本语言,是一种创建网页结构的标记语言。就是你女朋友化妆之后的样子

2.什么是HTTP协议

是一种用于在Web上传输数据的协议。它是客户端和服务器之间进行相互通信的基础的协议

3.HTTP的特点

无连接:每个http请求都是独立·的

无状态:不会保存客户端之间的信息,每个请求的是独立的

简单:代码简单易懂

超文本:可以传输除了文本之外的数据

4.如何建立TCP客户端和服务端连接(写代码)

#  客户端
import socket# 在循环外部创建 socket 实例
client = socket.socket()# 连接服务器
client.connect(('127.0.0.1',9696))while True:# 发送消息send_msg = input('请输入消息 :>>>>>').strip()if not send_msg: continueclient.send(send_msg.encode('utf-8'))if send_msg == 'q':break# 接受消息msg = client.recv(1024)print(msg.decode('utf-8'))# 关闭连接
client.close()
# 服务端
import socket# 在循环外部创建 socket 实例
server = socket.socket()# 绑定地址并开始监听
server.bind(('127.0.0.1',9696))
server.listen(5)while True:# 等待客户端连接conn,addr = server.accept()while True:# 接收消息msg = conn.recv(1024)msg = msg.decode('utf-8')print(f'收到消息:{msg}')if msg == 'q':break# 发送消息send_msg = input('请发送的消息 :>>>>>').strip()if not send_msg: continueconn.send(send_msg.encode('utf-8'))# 关闭连接conn.close()# 关闭服务器
server.close()

5.TCP协议的特点

  • 可靠性:TCP使用可靠的数据传输机制,确保数据按照正确的顺序到达目标,并进行错误检测和重传。
  • 面向连接:在数据传输之前,TCP在客户端和服务端之间建立一个连接,确保双方能够进行可靠的通信。
  • 流式传输:TCP将数据划分为逻辑上连续的字节流,并通过网络传输。不同于UDP,它没有消息边界。
  • 拥塞控制:TCP具有拥塞控制机制,通过动态调整数据传输速率来避免网络拥塞。
  • 双工通信:TCP支持同时进行双向通信,客户端和服务端可以在同一个连接上交换数据。
  • 有序性:TCP保证数据按照发送的顺序到达目标,不会乱序。
  • 头部开销:TCP头部包含一些控制信息,因此在传输的数据中会有一定的开销。

【一】web框架的本质

image-20240226155147981

  • Web框架是一种软件框架,用于简化Web应用程序的开发。
  • web框架本质上就是一个TCP的客户端跟服务端

浏览器访问页面 —> 访问制定的URL地址 —> 后端服务器

客户端(浏览器/应用程序) —> 请求服务器(web框架) —> 再从数据库里面查询数据

数据库返回数据—> 被服务端接受并处理 —> 反馈给客户端

常见的Web框架

  • Django:基于Python的高级Web框架,提供了强大的功能和开发工具,适用于构建复杂的Web应用(重点学习)。
  • Flask:同样是基于Python的轻量级Web框架,灵活且易于学习,适用于快速开发小型Web应用或原型。
  • Ruby on Rails:基于Ruby语言的Web框架,遵循“约定优于配置”的原则,提高开发效率。
  • Express.js:基于Node.js的Web应用框架,简单易用,适合构建快速、高性能的服务器端应用。
  • Spring Framework:Java平台上最流行的开发框架之一,提供了全面的基础设施支持,包括依赖注入、AOP等。

web框架的特点

import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8001))
sk.listen()
conn,addr = sk.accept()
from_b_msg = conn.recv(1024)
str_msg = from_b_msg.decode('utf-8')
#socket是应用层和传输层之间的抽象层,每次都有协议,协议就是消息格式,那么传输层的消息格式我们不用管,因为socket帮我们搞定了,但是应用层的协议还是需要咱们自己遵守的,所以再给浏览器发送消息的时候,如果没有按照应用层的消息格式来写,那么你返回给浏览器的信息,浏览器是没法识别的。而应用层的协议就是我们的HTTP协议,所以我们按照HTTP协议规定的消息格式来给浏览器返回消息就没有问题了,关于HTTP我们会细说,首先看一下直接写conn.send(b'hello')的效果,然后运行代码,通过浏览器来访问一下,然后再看这一句conn.send(b'HTTP/1.1 200 ok \r\n\r\nhello')的效果
#下面这句就是按照http协议来写的
# conn.send(b'HTTP/1.1 200 ok \r\n\r\nhello')
#上面这句还可以分成下面两句来写
conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
conn.send(b'hello')
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8001))
sk.listen()
conn,addr = sk.accept()
from_b_msg = conn.recv(1024)
str_msg = from_b_msg.decode('utf-8')
#socket是应用层和传输层之间的抽象层,每次都有协议,协议就是消息格式,那么传输层的消息格式我们不用管,因为socket帮我们搞定了,但是应用层的协议还是需要咱们自己遵守的,所以再给浏览器发送消息的时候,如果没有按照应用层的消息格式来写,那么你返回给浏览器的信息,浏览器是没法识别的。而应用层的协议就是我们的HTTP协议,所以我们按照HTTP协议规定的消息格式来给浏览器返回消息就没有问题了,关于HTTP我们会细说,首先看一下直接写conn.send(b'hello')的效果,然后运行代码,通过浏览器来访问一下,然后再看这一句conn.send(b'HTTP/1.1 200 ok \r\n\r\nhello')的效果
#下面这句就是按照http协议来写的
# conn.send(b'HTTP/1.1 200 ok \r\n\r\nhello')
#上面这句还可以分成下面两句来写
conn.send(b'HTTP/1.1 200 ok \r\n\r\n')
conn.send(b'hello')

【1.0】

#  客户端
import socketwhile True:client = socket.socket()# 创建连接client.connect(('127.0.0.1',9696))# 发送消息send_msg = input('请输入消息 :>>>>>').strip()if not send_msg: continueclient.send(send_msg.encode('utf-8'))if send_msg == 'q':client.close()break# 接受消息msg = client.recv(1024)print(msg.decode('utf-8'))
# 服务端
import socketserver = socket.socket()server.bind(('127.0.0.1',9696))server.listen(5)while True:conn,addr = server.accept()# 先接受msg = conn.recv(1024)msg = msg.decode('utf-8')print(f'msg:>>>{msg}')if msg == 'q':conn.close()break# 在发送while True:send_msg = input('请发送的消息 :>>>>>').strip()if not send_msg: continueconn.send(send_msg.encode('utf-8'))breakserver.close()

【2.0】

  • 使用浏览器来充当客户端
  • 服务端无法正常响应客户端(浏览器)的请求

浏览器和服务端进行交互是基于HTTP协议

【1】什么是HTML

​ HTML是一个超文本语言,是一种创建网页结构的标记语言。就是你女朋友化妆之后的样子

【2】什么是HTTP协议

是一种用于在Web上传输数据的协议。它是客户端和服务器之间进行相互通信的基础的协议

【3】HTTP的特点

  • 无连接:每个http请求都是独立的

  • 无状态:不会保存客户端之间的信息,每个请求的是独立的

  • 超文本:可以传输除了文本之外的数据

  • 简单:HTTP使用简单的请求-响应模型,易于理解和实现。

  • 可扩展性:HTTP支持添加新的方法和头部字段,以满足不断变化的需求。

【4】请求数据格式

请求方式 请求路径(地址)状态码 版本(HTTP1.0)

响应头

响应体

【5】状态码

  • 20X(20开头):代表成功的状态码,指示请求已成功被服务器接收、理解和接受。
  • 30X(30开头):代表重定向的状态码,指示客户端需要执行进一步的操作来完成请求。
  • 40X(40开头):代表客户端错误的状态码,指示客户端发送了无效、无法处理或未经授权的请求。
  • 50X(50开头):代表服务器错误的状态码,指示服务器在处理请求时遇到了错误或无法完成请求。

【二】web框架代码版

·

# 客户端
# 【1】导入模块
import socket# 【2】定义通信IP和端口
IP = '127.0.0.1'
PORT = 8686# 【3】创建scock连接对象
client = socket.socket()
client.connect((IP, PORT, ))while True:# 【4】发送数据client.send(b'hello laji server!')# 【5】接收数据data = client.recv(1024)print(f'这是来自客户端的信息:>>>>>>{data.decode("utf-8")}')
# 服务端
import socket
from _socket import SOL_SOCKET,SO_REUSEADDR# 【2】定义通信IP和端口
IP = '127.0.0.1'
PORT = 8686# 【3】创建scock连接对象
'''AF_INET 表示IPv4地址 ;SOCK_STREAM 表示使用TCP协议进行数据传输;'''
server = socket.socket()
'''setsockopt 套接字; SO_REUSEADDR 用于允许重用本地地址端口号'''
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 【4】监听端口
server.bind((IP,PORT))# 【5】创建半链接池
server.listen(5)while True:conn, addr = server.accept()# 从客户端接收到信息data_from_client = conn.recv(1024)data_from_client = data_from_client.decode("utf-8")# 从上述请求数据中切分出指定的请求方式和请求路径option = data_from_client.split(' ')# 请求方式option_type = option[0]# 请求路径option_path = option[1]print(option_path)http_res_type = "HTTP1.1 200 OK\r\n\r\n"# 根据请求路径指定请求方法if option_path == "/login":res = f"{http_res_type} hello dream login success"conn.send(res.encode("utf-8"))elif option_path == "/register":res = f"{http_res_type} hello dream register success"conn.send(res.encode("utf-8"))else:res = f"{http_res_type} 404 not found"conn.send(res.encode("utf-8"))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/591796.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

母婴商品销售数据分析-Python数据分析项目

文章目录 母婴商品销售数据分析项目介绍项目背景分析目的 数据准备导入数据数据清洗 数据分析整体市场情况第一季度销量下滑原因第四季度销量上升原因复购率 商品销售情况 母婴商品销售数据分析 项目介绍 项目背景 政策Politics:国家发展改革委2013年5月28日表示…

【学习笔记】java项目—苍穹外卖day10

文章目录 苍穹外卖-day10课程内容1. Spring Task1.1 介绍1.2 cron表达式1.3 入门案例1.3.1 Spring Task使用步骤1.3.2 代码开发1.3.3 功能测试 2.订单状态定时处理2.1 需求分析2.2 代码开发2.3 功能测试 3. WebSocket3.1 介绍3.2 入门案例3.2.1 案例分析3.2.2 代码开发3.2.3 功…

RIP协议(路由信息协议)

一、RIP协议概述 RIP协议(Routing Information Protocol,路由信息协议)是一种基于距离矢量的内部网关协议,即根据跳数来度量路由开销,进行路由选择。 相比于其它路由协议(如OSPF、ISIS等)&#…

好物视频素材怎么找?推荐8个视频素材库大全高清素材

在这个故事无处不在的时代,找到那些能够让你的视频内容脱颖而出的高清无水印素材,就像是探寻宝藏。为了让你的每一帧都充满力量和情感,下面介绍的八个视频素材网站覆盖了从传统风格到现代节奏的各种需求,帮助你在全球范围内寻找到…

uniapp 设置globalStyle navigationBarTitleText 不显示

设置全局的navigationBarTitleText但是没有显示 没效果: 原因: 这里实际上设置了navigationBarTitleText 为"" 所以不会使用全局的设置 解决方法就是直接将这一行代码删除

走进车厂 | 移远通信以前沿车载技术,照亮智能网联汽车产业创新发展之路

无钥匙自动解锁方便快捷、实时路况导航精准高效、语音指令轻松控制车辆、车载娱乐系统丰富多样……随着智能化、数字化浪潮的不断推进,现如今的汽车出行焕然一新。 正如我们所见,汽车产业正在经历前所未有的变革。物联网、车联网等前沿技术的发展和应用&…

C++核心高级编程 --- 4.类和对象

文章目录 第四章:4.类和对象4.1 封装4.1.1 封装的意义4.1.2 struct与class的区别 4.2 对象的初始化和清理4.2.1 构造函数和析构函数4.2.2 构造函数的分类及调用4.2.3 拷贝构造函数调用时机4.2.4 构造函数调用规则4.2.5 深拷贝与浅拷贝4.2.6 初始化列表4.2.7 类对象作…

【JAVAEE学习】探究Java中多线程的使用和重点及考点

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

(四) 序列化器类使用整理

从一、序列化器类中,或 视图集源码 中, 可以得知: 序列化器类可以接收一个instance ,和一个data serializer_obj XxxxSerializer(instance,datarequest.data) (更新时,instance相当于原…

NKCTF2024 re VM?VM!WP

逻辑似乎很简单(个鬼啊) 这个函数是把输入的字符转化为二进制并倒序存储 sub_1570太大了加载不出来,应该是加密的主逻辑,目的是需要输出1 可以通过删除栈的方法强行转化伪代码 首先删掉这部分 9A0改小点 这个也是 栈这里U一下再…

江大白 | 万字长文,近3年Transformer在小目标检测领域,进展与突破系统梳理!

本文来源公众号“江大白”,仅用于学术分享,侵权删,干货满满。 原文链接:万字长文,近3年Transformer在小目标检测领域,进展与突破系统梳理! 以下文章来源于微信公众号:AI视界引擎 …

作业3:计算机体系结构属性优选

作业3:计算机体系结构属性优选 一. 单选题(共11题,55分) (单选题)下列哪个选项属于非线性结构( )? A. 线性表 B. 栈 C. 树 D. 队列 正确答案: C:树; (单选题) 浮点数在机器中的表示形式如下所…