目录

Web应用是什么?

Web框架

在Web中 HTTP协议、wsgi协议、Socket的关系:

wsgiref模块


Web应用是什么?

B/S架构的应用程序, b/s本质上也是c/s, 这里的B指的是浏览器, S包括两部分: server+application,
其中server是web服务器, server是实现了wsgi协议规定的socket, 现在使用的一般都是现成的,  常用的server有: Django使用的wsgi
application是业务逻辑,

Web应用程序是一种可以通过Web访问的应用程序, 程序的最大好处是用户很容易访问应用程序, 用户只需要有浏览器即可, 不需要再安装其他软件.

应用程序有两种模式C/S、B/S. C/S是客户端/服务器端程序, 也就是说类程序一般独立运行. 而B/S就是浏览器端/服务端应用程序, 这类程序一般借助IE等浏览器来运行, Web应用程序一般是B/S模式. Web应用程序首先是''应用程序'', 和用标准的程序语言, 如C、C++等编写出来的程序没有什么本质上的不同. 然而Web应用程序又有自己独特的地方, 就是它是基于Web, 而不是采用传统方法运行的. 换句话说, 它是典型的浏览器/服务器架构的产物.

Web应用程序的优点:

  • 网络应用程序不需要任何复杂的'展开'过程, 所需要的知识一个使用的浏览器;

  • 网络应用程序通常耗费很少的用户硬盘空间, 或者一点都不耗费;

  • 他们不需要更新, 因为所有新的特性都在服务器上执行, 从而自动传达到用户端

  • 网络应用程序和服务器端的网络产品都很容易结合, 如email功能和搜索功能;

  • 因为他们在网络浏览器窗口中运行, 所以大多数情况下热门是通过跨平台使用的(例如Windows, Mac, Linux等)

Web应用程序的缺点:

  • 网络应用程序强调浏览器的实用性. 如果浏览器方没有提供特定的功能, 或者放弃使用特定的平台或者操作系统版本(导致不适用), 就会影响大量用户;

  • 网络应用依靠互联网远程服务端的应用文件, 因此, 当连接出问题时, 应用将不能正常使用.

  • 许多网络应用程序是不开源的, 只能依赖第三方提供的服务, 因此不能针对用户定制化、个性化, 而且大多数情况下用户不能离线使用, 因而损失了很多灵活性

  • 他们完全依赖应用服务商的可及性. 如果公司倒闭, 服务器停止使用, 用户也无法追索以前的资料, 对比而看, 即使软件制造商倒闭了, 传统的安装软件也可以继续执行,尽管不能有更新或者有其他用户服

  • 相似的, 提供方公司对软件和其功能有了更大的控制权。只要他们愿意就能为软件添加新特性,即使用户想等bugs先被解决再更新。跳过较差的软件版本也不可能了。公司可以强加不受欢迎的特性给用户,也可以随意减少带宽来削减开支。

B/S架构的优点:

浏览器/服务器架构(Browser/Server,简称B/S)能够很好地应用在广域网上,成为越来越多的企业的选择。浏览器/服务器架构相对于其他几种应用程序体系结构,有如下3方面的优点:

  • 这种架构采用Internet上标准的通信协议(通常是TCP/IP协议)作为客户机同服务器通信的协议。这样可以使位于Internet任意位置的人都能够正常访问服务器。对于服务器来说,通过相应的Web服务和数据库服务可以对数据进行处理。对外采用标准的通信协议,以便共享数据。

  • 在服务器上对数据进行处理,就处理的结果生成网页,以方便客户端直接下载。

  • 在客户机上对数据的处理被进一步简化,将浏览器作为客户端的应用程序,以实现对数据的显示。不再需要为客户端单独编写和安装其他类型的应用程序。这样,在客户端只需要安装一套内置浏览器的操作系统,直接安装一套浏览器,就可以实现服务器上数据的访问。而浏览器是计算机的标准设备

简单总结: 本质上,浏览器是一个socket客户端, 服务器是一个socket服务端

我们下面来使用python基于socket写一个web应用:

import socketdef server_run():soc = socket.socket()soc.bind(('127.0.0.1', 8008))soc.listen(5)while True:conn, addr = soc.accept()recv_data = conn.recv(1024)print(recv_data)# 1 直接在send里写,发送给客户端# conn.send(b'HTTP/1.1 200 OK\r\n\r\n<h1>hello web</h1><img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg"></img>')#2 打开一个html文件,发送给客户端# with open('index.html','r',encoding='utf-8') as f:#     data=f.read()# conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))# 3 动态网页,字符串替换import timenow=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())print(now)with open('index.html','r',encoding='utf-8') as f:data=f.read()data=data.replace('@@@',now)conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))conn.close()if __name__ == '__main__':server_run()

html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h2>@@@</h2><img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg" alt="">
</body>
</html>

Web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器都是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

在Web中 HTTP协议、wsgi协议、Socket的关系:

我们知道http协议是浏览器和服务器之间进行通信的标准和规定,http协议是浏览器和服务器都能解析的一种通信方式, 他们之间进行要进行收发数据首先要有一个完整的连接才可以, socket是来创建这个基础连接的,socket基于TCP/IP创建好连接之后, 就可以发送http请求的内容了, 根据http规定的格式, 在浏览器端按照规定方式(请求首行, 请求头,请求体)发送http请求(本质上还是基于socket建立的连接发送的), 服务器收到请求之后, 经过解析确定是http请求, 就会按照http的响应方式返回去一个响应(响应首行, 响应头,响应体), 在处理请求的过程中, 服务器会对请求体中的数据内容进行解析, 然后进行拆分, 拆分成一定的格式到,socket下边对应的函数中进行一系列的逻辑处理,然后返回一个数据给浏览器, 在浏览器接收到服务器返回的数据之后,在进行相应的处理, 这样就完成了一次完整的请求和相应,, 
那么wsgi协议是用来干嘛的呢, 首先wsgi是一个专门为使用python语言来进行搭建B/S架构的时候的一种协议, 这个协议规定了,在服务器就收到请求内容之后,对请求内容拆分的具体标准和格式, 这个拆分的事情是在所写的socket中进行的, 使用wsgi相关的模块对请求内容进行处理, 然后交给对应的函数去处理, 最后返回数据,   那到这里我们之前所说的application就可以很好的解释了, 它主要是用来写业务逻辑的, 这里的业务逻辑是根据具体的路由分配的响应函数中的业务逻辑, 可以说我们使用的框架比如Django或者自己写简单的框架,都是在写application部分, 这个部分相当于是把socket中的业务逻辑处理部分单独拿出来进行扩展, 比如我们的Django框架, Django中的app就是完成的这个功能, 又因为所有的逻辑处理都写在一个py文件中代码的可读性,可扩展性和可管理性等都会变差, 所以在app中又进行了分层, 分成不同的层,来处理不同的业务逻辑.Django的这种处理方式我们称为MTV模型, MTV模型是基于MVC模型的!!!

HTTP协议详情请点击                            MTV与MVC模型详解

wsgiref模块

最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块。

wsgiref的简单应用:

from wsgiref.simple_server import make_serverdef mya(environ, start_response):print(environ)start_response('200 OK', [('Content-Type', 'text/html')])if environ.get('PATH_INFO') == '/index':with open('index.html','rb') as f:data=f.read()elif environ.get('PATH_INFO') == '/login':with open('login.html', 'rb') as f:data = f.read()else:data=b'<h1>Hello, web!</h1>'return [data]if __name__ == '__main__':myserver = make_server('', 8011, mya)print('监听8010')myserver.serve_forever()

wsgiref只是遵循wsgi协议的模块之一,是我们现在使用的主流模块, 在测试阶段我们使用wsgiref就可以, 但是到项目上线的时候,要使用uwsgi, 因为wsgiref是不支持高并发的, uwsgi是支持高并发的, 其他同样实现了该功能的模块还有:

'cgi': CGIServer,'flup': FlupFCGIServer,'wsgiref': WSGIRefServer,'waitress': WaitressServer,'cherrypy': CherryPyServer,'paste': PasteServer,'fapws3': FapwsServer,'tornado': TornadoServer,'gae': AppEngineServer,'twisted': TwistedServer,'diesel': DieselServer,'meinheld': MeinheldServer,'gunicorn': GunicornServer,'eventlet': EventletServer,'gevent': GeventServer,'geventSocketIO':GeventSocketIOServer,'rocket': RocketServer,'bjoern' : BjoernServer,'auto': AutoServer,

Web应用与Web框架相关推荐

  1. Web应用渗透测试框架Arachni

    Web应用渗透测试框架Arachni Arachni是一款Ruby语言编写的Web应用渗透测试框架.当用户指定目标后,该框架可以自动扫描网站页面,对页面中的链接.表单.Cookie.HTTP Head ...

  2. 分享20个非常有用的Web开发工具和框架

    在开发中借助一些非常好用的工具可以帮助你节省大量的时间和精力.本文收集了20个非常有用的Web开发工具和框架,分享给大家,希望对你有帮助. 1. Blueprint Blueprint 是一款CSS框 ...

  3. 【Web安全】一款功能强大的Web身份认证测试框架

    关于Raider Raider是一款功能强大的Web身份认证测试框架,该框架被设计用来测试Web应用程序的身份认证机制.虽然像ZAProxy和Burpsuite这样的Web代理工具同样可以允许研究人员 ...

  4. Java Web 程序设计----基于SSM框架(正在更新中)

    Java Web 程序设计----基于SSM框架 提示:主要用于个人学习.复习.查阅等. 文章目录 Java Web 程序设计----基于SSM框架 一.网页前端开发基础 HTML文档结构 提示:以下 ...

  5. 好程序员web前端分享MVVM框架Vue实现原理

    好程序员web前端分享MVVM框架Vue实现原理,Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js和react.js更加简洁 ...

  6. 使用 ASP.NET Core Razor 页、Web API 和实体框架进行分页和排序

    目录 核心类 数据层 The API Razor页面 如何使用 .NET Core Razor 页.Web API 和实体框架实现分页和排序,以产生良好的性能. 该项目的特点是: 选择页面大小(Pag ...

  7. web前端三大主流框架_web前端三大主流框架

    于前端开发工程师来说,组件化模块的框架能够帮助我们更加快速的搭建自己的网站.下面本篇文章和大家介绍一下web前端的三大主流框架:Angular.React.Vue,让大家可以对这三个框架有一定的了解, ...

  8. Web前端三大主流框架是什么?Web前端前景与就业形势

    近十年以来,IT行业发展火热,衍生了很多新职业,例如UI设计师.开发工程师.软件测试工程师等等,在众多备受瞩目的新生职业中,Web前端工程师是其中的一员.那么Web前端三大主流框架是什么呢? 一.We ...

  9. 16个Javascript的Web UI库、框架及工具包

    目前,几乎所有的富Web应用程序都依赖一套UI管理,程序库或框架(或工具包),他们不仅简化了应用程序开发,他们还提供兼容的.可靠的及很强交互性的用户界面.除此之外您会请求哪些呢? 当前,广泛应用的We ...

  10. web前端三大主流框架是什么?

    转载自品略图书馆 http://www.pinlue.com/article/2020/07/1217/0311017786310.html web前端三大主流框架是什么?前端开发师的岗位职责有哪些? ...

最新文章

  1. XML的简单读取与写入
  2. 为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?
  3. 如何调试NativeSample
  4. 一个致命的 Redis 命令,导致公司损失 400 万
  5. kafka结合mysql_logstash集成kafka,mysql实现数据采集
  6. 推荐召回体系化建设与排序优化实践
  7. java 自动补齐数值至指定位数
  8. IDEA操作 名字快速驼峰等操作
  9. 在个人机上发布web项目
  10. VB.NET数据库中插入数据
  11. 3D打印机打印中途停止且显示挤出头温度过低
  12. canvas设置lineWidth属性,出现线条被fill覆盖问题。
  13. phyton方面相关书籍
  14. VDI桌面虚拟化和IDV桌面虚拟化你更倾向谁
  15. 北京中医药大学计算机应用基础作业1,北京中医药大学远程教育“计算机应用基础”第5次作业.doc...
  16. CUDA学习:Windows下的CUDA环境配置
  17. 【答学员问】假如面试通过,我能不能问hr为什么选择我?
  18. VB6.0中提示:该部件的许可证信息没有找到,在设计环境中,没有合适的许可证使用该功能”的解决办法
  19. Android10(华为Mate30)获取图片路径失败,拍照或从相册选择图片后无法显示
  20. 输入框校验-vue页面中校验

热门文章

  1. matlab计算abc三相短路电流_低压零序电流互感器的选择配置
  2. 图形处理之补洞vtkFillHolesFilter
  3. 软件测试工程师入门面试理论题库(一)
  4. 修改服务器后账套不存在,管家婆辉煌零售POS软件,开单更快捷
  5. VUE源码:模板引擎mustache
  6. nmn对血管作用怎样,nmn产品哪个牌子好,补充NMN可恢复血管的僵硬度!
  7. antd pro使用iconfont
  8. 最大似然估计(MLE)和最大后验概率(MAP)
  9. 信息系统项目管理师---第七章项目成本管理历年考题
  10. Oracle特殊字符转义:和'