web服务器

一步一步实现一个Web Server-01

≯℡__Kan透↙ 提交于 2020-02-07 18:56:53
前言 本次新型冠状病毒的疫情,给本该红火的新年和激情洋溢的2020盖上了一层阴影。作为普通人的我,只能做到听党和国家的话,不添乱,老老实实在家呆着。处理完公司日常工作之余,想着把相关的一些零散知识串联一下,看了一些tomcat相关的架构设计和源码,于是就想,干脆自己尝试写一个简单的server吧。如果你也有兴趣,那我们就开始吧。 本次项目涉及到的一些知识点: 1、http; 2、java反射; 3、java IO; 4、xml解析; 5、Servlet; 6、html基础知识; 7、多线程; 8、java网络编程; 9、NIO 让我们先从一个最基本的java应用开始。曾经有个同事跟我吹嘘,用nodejs几行代码就能搞出一个server来对外提供应用,我们看看用java怎么做: 目标:从浏览器输入一个地址,服务器给我一个反馈信息。 一、http协议 我们的目标是通过浏览器来验证我们的服务器工作状况,所以需要先了解一下基本的http协议。我们先随便来抓一个包看看,http 都包含哪些东西。现在我们就从浏览器F12看一下吧, 后面换成Fiddler来进行查看数据请求的情况,一步步来。 上图中general下包含的就是请求的原始信息,包含了请求方法为Get,请求的url,请求状态,以及远程地址等信息。下方的Response Headers则代表着服务器返回给浏览器的数据的头部信息,也就是说

web开发之http和wsgi

我们两清 提交于 2020-02-06 10:58:11
web开发也就是前端和后端,首先理解一下前后端分离技术,其实说的后端代码和前端代码分割开来。不然不利于前端和后端分别开发。 web开发 CS即客户端、服务端编程。传统的socket开发。 客户端、服务端之间需要使用socket,约定协议,版本(往往使用的协议是TCP或者UDP),指定地址和端口,就可以通信了。客服端、服务端传输数据,数据可以有一定的格式,双方必须先约定好。 BS编程,即Brower、Server开发。 brower浏览器,是一种特殊的 客户端,支持http(s)协议,能够通过URL向服务器发起请求,等待服务器返回HTML等数据,并在浏览器内可视化展示的程序。 SERVER,支持http协议,能够接受众多客户端发起的http协议请求,经过处理,将HTML等数据返回给浏览器。 本质上来说,BS是一种特殊的CS,即 客户端必须是一种支持http协议且能解析并渲染html的软件,服务端必须是能够接受多客户端http访问的服务器软件。 http协议底层是基于tcp协议实现。 BS开发分为两端开发。 客户端开发——或称前端开发。HTML(控制格式),css(控制样式),JavaScript等。 服务端开发, python有WSGI,django,flask,tornado等。 http协议 http协议是 无状态协议 。同一个客户端的两次请求之间并没有任何关系,从服务端角度来说

ASP.NET Core 与 .NET Core 演变与基础概述

断了今生、忘了曾经 提交于 2020-02-06 05:19:54
https://github.com/dotnet/core https://github.com/aspnet/home 今天看到 .NET Core 的改名计划,感觉跨平台的时代快要来了,从之前的 ASP.NET NEXT,ASP.NET 5,ASP.NET Core 1.0 等概念一路演变过来,花了点时间总结一下几个相关的概念。 OWIN 与 Katana 的关系 ASP.NET Core 1.0 的由来,要追溯到 Katana 这个项目, Katana 是 OWIN 定义规范的一个实现组件集合。 Open Web Interface for .NET (OWIN) OWIN 是 Open Web Server Interface for .NET 首字母缩写,OWIN 定义了 Web 服务器和应用程序组件之间的交互的规范( specifications ); OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口,其目的是为了实现服务器与应用之间的解耦。由于这一规范的目的是发展一个广阔且充满活力的、基于 Microsoft .NET Framework 的 Web 服务器和应用程序组件生态系统,因此它可以将服务器与应用程序之间的交互减少到一小部分类型和单个函数签名,这个函数签名被称为应用程序委托(即 AppFunc) using

Web开发中的技术Cookie,Session,Token

妖精的绣舞 提交于 2020-02-06 04:48:38
在Web应用中,Http请求是无状态的。即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每一次打开页面需要登录,就出现了Cookie和Session技术。 Cookie Cookie是客户端保存用户信息的一种机制,用来记录用户的信息,也是实现Session的一种方式。Cookie存储的数据量有限,都是保存在浏览器中。不同的浏览器有不同的存储大小,但一般不超过4KB。因此Cookie只能存储一小段的文本信息。 例如:登录网站,用户第一天输入用户名和密码进行登录,第二天有可能就直接打开。 Session Session是另一种记录客户状态的机制,它是在服务端保存的数据结构(SessionID和Session内容,还有很多自定义的内容.如:用户基本信息、权限信息等等),这个数据可以保存在持久化数据库、Redis缓存库、文件中,用于跟踪用户的状态。 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端再次访问时只需要从该Session中查找该用户的状态即可。 用户第一次登录后,浏览器会将用户信息发送给服务器,服务器会给此用户创建一个SessionId,并在相应内容(Cookie)中将该SessionId一起返回给浏览器,浏览器将这些数据保存到客户端本地。当用户再次发起请求时

Nginx+uWSGI+Django

百般思念 提交于 2020-02-05 08:07:55
Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为什么? 概念说明: APP(应用程序),就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。 WSGI,是一个协议,Python用于Web开发的协议 uWSGI,是一个程序,充当Web服务器或中间件。 如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件 如果架构是uWSGI+APP,uWSGI是一个服务器 uwsgi,是uWSGI程序实现的一个自有的协议。 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi CGI,最早的协议 FCGI,比CGI快 WSGI,Python专用的协议 uwsgi,比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议. 官方介绍 一、WSGI协议 浏览器请求一个页面的流程: 浏览器发送请求给服务器,包含请求头和请求体 服务器解析请求头和请求体 服务器根据请求信息来处理请求,生成返回内容

Nginx+uWSGI+Django原理

给你一囗甜甜゛ 提交于 2020-02-05 08:07:13
Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为什么? 概念说明: APP(应用程序),就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。 WSGI,是一个协议,Python用于Web开发的协议 uWSGI,是一个程序,充当Web服务器或中间件。 如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件 如果架构是uWSGI+APP,uWSGI是一个服务器 uwsgi,是uWSGI程序实现的一个自有的协议。 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi CGI,最早的协议 FCGI,比CGI快 WSGI,Python专用的协议 uwsgi,比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议. 官方介绍 一、WSGI协议 浏览器请求一个页面的流程: 浏览器发送请求给服务器,包含请求头和请求体 服务器解析请求头和请求体 服务器根据请求信息来处理请求,生成返回内容

uniGUI 应用程序体系结构(11)

左心房为你撑大大i 提交于 2020-02-04 19:47:58
下图表示 uniGUI 服务器的内部结构。 每个 uniGUI 服务器都有 一个ServerModule的副本, 每台服务器创建一次 , 同时根据用户活动动态创建和销毁多个Session。 uniGUI Session包含一个称为 MainModule(多个) 的专用DataModule , 它为每个Session自动创建。 它还包含 一个名为MainForm的窗体 , 它是 Web 应用程序的主要入口点。 如果项目包含 LoginForm,它将在MainForm之前激活, 以提供可靠和安全的用户登录方式。 如预期的那样, 每个Session可以包含几个附加的DataModules 和窗体。 每次用户打开 Web 应用程序的新实例时, 服务器都会创建一个新的Session。 Session将保持活动状态, 直到用户注销、关闭浏览器/选项卡或超时。 每个Session都保持运行的 Web 应用程序的完整状态, 以便 uniGUI Session称为状态。 您可以将每个Session视为您的 Web 应用程序的专用副本, 它与服务器地址空间中的其他Session共存, 但与所有其他对话隔离。 服务器使用唯一的 "" Session id "创建每个Session, 它用于正确地将客户端请求与Session关联 (Session id 始终是 AJAX 请求的一部分)。 如果

Nginx+uWSGI+Django部署web服务器

只愿长相守 提交于 2020-02-01 22:10:37
Nginx+uWSGI+Django部署web服务器 原创铁乐与猫 最后发布于2018-08-28 14:33:08 阅读数 4813 收藏 展开 Nginx+uWSGI+Django部署web服务器 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py 编辑luffy/luffy/urls.py 运行并测试 uWSGI部署 测试运行uWSGI 使用uWSGI运行django项目 uWSGi热加载Djangoa项目 部署nginx nginx配置uwsgi和django django部署static文件 重新加载nginx进行测试 测试nginx 应用 uWSGI 和 test.py 用UNIX socket取代TCP port uwsgi部署加强 使用uwsgi配置文件运行django项目 安装uWSGI到真实环境中 uwsgi配置文件更多参数 uWSGI开机启动服务 环境说明 进行本文操作前需己搭建好的环境 linux系统,我用的是openSUSE 使用了operation用户的家目录做为测试环境 python3.5.6 virtualenv 16.0 pip3 18.0 nginx 1.13.1 后面进行安装的环境 django 1

Apache与php解析器通信方式分析(mod_php的apache2hander模块模式与php-fpm的fastcgi管理器模式分析)

淺唱寂寞╮ 提交于 2020-02-01 21:44:27
Apache与php解析器通信方式分析(mod_php的apache2hander模块模式与php-fpm的fastcgi管理器模式分析) 在apache(Unix平台最流行的WEB服务器平台)之中调用PHP是个经久不衰的话题,目前的PHP存在PHP4和PHP5的版本,而且在apache(Unix平台最流行的WEB服务器平台)之中调用PHP还存在module(模块)方式和CGI方式,同时apache(Unix平台最流行的WEB服务器平台)还存在apache(Unix平台最流行的WEB服务器平台)1和apache(Unix平台最流行的WEB服务器平台)2两个版本.   在apache(Unix平台最流行的WEB服务器平台)之中调用PHP存在以下八种模式:   1,PHP4在apache(Unix平台最流行的WEB服务器平台)1的module模式   2,PHP4在apache(Unix平台最流行的WEB服务器平台)1的cgi模式   3,PHP5在apache(Unix平台最流行的WEB服务器平台)1的module模式   4,PHP5在apache(Unix平台最流行的WEB服务器平台)1的cgi模式   5,PHP4在apache(Unix平台最流行的WEB服务器平台)2的module模式   6,PHP4在apache(Unix平台最流行的WEB服务器平台)2的cgi模式  

HTTP与HTTPS区别

最后都变了- 提交于 2020-02-01 06:40:35
HTTP 的缺点 到现在为止,我们已了解到 HTTP 具有相当优秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具两面性,它也是有不足之处的。HTTP 主要有这些不足,例举如下。 1、通信使用明文( 不加密) , 内容可能会被窃听 2、不验证通信方的身份, 因此有可能遭遇伪装 3、无法证明报文的完整性, 所以有可能已遭篡改 这些问题不仅在 HTTP 上出现,其他未加密的协议中也会存在这类问题。 除此之外,HTTP 本身还有很多缺点。而且,还有像某些特定的 Web 服务器和特定的 Web 浏览器在实际应用中存在的不足(也可以说成是脆弱性或安全漏洞),另外,用 Java 和 PHP 等编程语言开发的 Web 应用也可能存在安全漏洞。 通信使用明文可能会被窃听 由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的 内容 )进行加密。即,HTTP 报文使用明文(指未经过加密的报文)方式发送。 TCP/IP 是可能被窃听的网络 如果要问为什么通信时不加密是一个缺点,这是因为,按 TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。 所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,在此通信线路上的某些网络设备 、光缆、计算机等都不可能是个人的私有物