web服务器

Web框架本质及浅谈HTTP协议

百般思念 提交于 2020-02-12 09:25:00
Web框架本质 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 # !/usr/bin/env python # -*- coding:utf-8 -*- # __Author__ Jianer import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8000)) sock.listen(5) while True: connection, address = sock.accept() handle_request(connection) connection.close() if __name__ == '__main__': main() socket流程不细说,关于web框架的一些阐释 上述通过socket来实现了其本质,而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序

JavaWeb学习之入门

女生的网名这么多〃 提交于 2020-02-12 04:06:49
JavaWeb概述 JavaWeb可以分为两个单词来理解:Java和Web。 Web:即网页的意思。 Web分类 Web可以分为静态web和动态web。 静态web 静态的网页,提供给所有人看的数据始终不会发生变化! 如html,css 动态web 动态的网页,与静态网页相反,提供给所有人看的数据始终会发生变化!所有人在不同的时间、不同的地点看到的数据是不同的。 如淘宝、京东等。现在几乎所有的网站都是动态web 技术栈:Servlet/JSP,ASP,PHP等 JavaWeb:在Java中,动态web资源开发的技术统称为JavaWeb。 Web应用程序 web应用程序:可以提供浏览器访问的程序! web应用程序如:index.html,a.html等。网站可以将这多个web资源整合起来,这些web资源可以被外界访问。 我们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。它们对外提供了一个URL,通过URL来进行访问。 统一的web资源会被放在同一个文件夹下,即web应用程序。我们需要服务器来启动它。 一个web应用由多部分组成(静态、动态): html、css、js jsp、servlet java程序 jar包 配置文件(Properties) web应用程序编写完毕后,若想提供给外界使用,需要一个服务器来统一管理。 静态web

集群session管理问题

自作多情 提交于 2020-02-12 02:19:20
转自:http://book.51cto.com/art/201405/439557.htm 先来看一下什么是Session。 用户使用网站的服务,基本上需要浏览器与Web 服务器的多次交互。HTTP 协议本身是无状态的,需要基于HTTP 协议支持会话状态(Session State)的机制。而这样的机制应该可以使Web 服务器从多次单独的HTTP 请求中看到“会话”,也就是知道哪些请求是来自哪个会话的。具体实现方式为:在会话开始时,分配一个唯一的会话标识(SessionId),通过Cookie 把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉Web 服务器请求是属于哪个会话的。在Web 服务器上,各个会话有独立的存储,保存不同会话的信息。如果遇到禁用Cookie 的情况,一般的做法就是把这个会话标识放到URL 的参数中。我们可以通过图2-8 来看一下上述过程。 当我们的应用服务器从一台变到两台后,如同图2-7 中的结构,我们就会遇到Session的问题了。具体是指什么问题呢? 我们来看图2-9,当一个带有会话标识的HTTP 请求到了Web 服务器后,需要在HTTP请求的处理过程中找到对应的会话数据(Session)。而问题就在于,会话数据是需要保存在单机上的。 在图2-9 所示的网站中,如果我第一次访问网站时请求落到了左边的服务器,那么我的Session

集群session一致性和同步问题

谁说胖子不能爱 提交于 2020-02-12 02:18:48
一. 何为session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉web服务器请求是属于哪个会话的。 如果遇到禁用cookie的情况,一般的做法就是把这个会话标识放到url的参数中。 二. 问题 因为会话信息保存在单机上,当我们的应用服务器从一台变成两台后,我们就会遇到session的问题了! 当我们第一次访问网站时请求落到了A服务器,那么我的session就创建在A服务器上了,如果我们不做处理,就不能保证接下来的请求每次都落在同一台服务器上了,这就是session问题。 三. 解决办法: 1. session sticky 在web服务器变成多台后,如果我们可以保证同一个会话请求都能在同一个web服务器上处理,那么对于这个会话个体来说,和单机的情况是一样的。这就需要负载均衡器能够根据每次请求的会话标识来进行请求转发。 有何问题: ① 如果有一台web服务器宕机或重启,那么这台机器上的会话数据会丢失 ② 负载均衡器变成了一个有状态的结点,要保存会话到具体web服务器的映射,要消耗一定的内存。 2. session replication

服务器有新消息主动推送给客户端浏览器

自闭症网瘾萝莉.ら 提交于 2020-02-09 18:18:00
前言 通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客户端请求--服务端响应,这种机制对于信息变化不是特别频繁的应用尚可,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是 Web 应用经常面临的问题,比如金融证券的实时信息,Web 导航应用中的地理位置获取,社交网络的实时消息推送,新闻的订阅,天气的提醒等。这些情况下,需要服务器主动推送消息给客户端。 那么在这样的模式下,会有几个问题需要我们思考下: 1.应用服务器如何确定每一个应用所在的设备 2.服务器端是如何将消息推送到客户端的,客户端又不像服务器有一个固定的地址 带着这些疑问我们来研究一下目前有哪些技术可以解决该问题: 一、Ajax轮询 所谓的Ajax轮询,其实就是定时的通过Ajax查询服务端,客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。 这种技术方式实现起来非常简单,但是这种方式会有非常严重的问题,就是需要不断的向服务器发送消息询问,这种方式会对服务器造成极大的性能浪费。 还有一个类似的轮询是使用JSONP跨域请求的方式轮询,在实现起来有差别,但基本原理都是相同的

Day32——Java web学习笔记part3

给你一囗甜甜゛ 提交于 2020-02-09 14:06:09
Java web学习笔记 文章目录 Java web学习笔记 8、Cookie、Session 1、会话 2、保存会话的两种技术 3、Cookie 4、session(重) 9、Java Server Page 1、什么是JSP 2、JSP原理 3、JSP基础语法 4、JSP指令 5、9大内置对象 6、JSP标签、JSTL标签、EL表达式 JSP标签 JSTL表达式 7、JavaBean JavaBeans属性 访问JavaBeans 10、MVC三层架构 11、过滤器Filter(重) 12、监听器 过滤器与监听器常见应用 8、Cookie、Session 1、会话 会话 :用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可称为会话。 有状态会话 :(一个同学来过教室,下次再来教室,大家会知道这个同学曾经来过,称之有状态会话) 一个网站,怎么证明你访问过? 客户端——————服务端 1、服务端给客户端一个信件,客户端下次访问服务端带上信件就可;(cookie) 2、服务器登记客户端访问过,下次访问时来匹配就可;(session) 2、保存会话的两种技术 cookie 客户端技术(响应,请求) session 服务器技术,利用这个技术,可以保存用户的会话信息,可以把信息或者数据放在Session中 常见场景 :网站登录(如B站),第一次登录

.NET CORE应用程序启动

99封情书 提交于 2020-02-08 17:04:45
ASP.NET Core 应用是在其 Main 方法中创建 Web 服务器的控制台应用: Main 方法调用 WebHost.CreateDefaultBuilder,通过 生成器模式 来创建web主机.生成器提供定义 Web 服务器(例如,UseKestrel)和启动类 (UseStartup) 的方法。 在前面的例子中,自动分配了 Kestrel Web 服务器。ASP.NET Core 的 Web 主机尝试在 IIS 上运行(如果可用)。 对于其他 Web 服务器(如 HTTP.sys),可通过调用相应的扩展方法来使用。 在下一节对 UseStartup 进行了更深入的介绍。 IWebHostBuilder 是 WebHost.CreateDefaultBuilder 调用的返回类型,它提供了许多可选方法。 其中的一些方法包括用于在 HTTP.sys 中托管应用的 UseHttpSys ,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听 HTTP 请求。 WebHostBuilder 提供了许多可选方法,其中包括用于在 IIS 和 IIS Express 中进行托管的 UseIISIntegration,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run

web/http服务器实现

徘徊边缘 提交于 2020-02-08 16:12:44
文章目录 项目开发流程 程序编码 项目实例 项目开发流程 需求分析:实现基本的HTTP服务器,支持浏览器的访问(支持标准http协议) 接收浏览器发送HTTP请求; 解析请求数据,请求方式(GET),请求文件(html…),协议版本; 根据请求构建响应头,发送响应头: HTTP/1.1 200 Ok HTTP/1.1 404 File not found 根据请求文件,从服务器目录中获取对应的文件,发送给浏览器。 概要设计:绘制基本框图 详细设计:绘制程序流程图 web整体框架总流程 最外层流程 程序读取配置文件流程 子进程处理客户端请求流程 服务器初始化流程 正常请求响应流程 响应404流程 4. 编码:编写程序代码 程序编码 创建TCP并发服务器(多进程、多线程) 从配置中读取端口号–>将端口号写入配置文件configure中,创建服务器时从配置文件中读取端口号。(在启动服务器时添加-b选项使得服务器工作在守护进程模式) int sockfd = socket ( AF_INET , SOCK_STREAM , 0 ) ; if ( - 1 == sockfd ) { perror ( "socket" ) ; return - 1 ; } struct sockaddr_in server_addr ; server_addr . sin_famlily = AF_INET

Nginx简介

折月煮酒 提交于 2020-02-08 15:39:40
一、反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址; 反向代理服务器接受用户的请求; 反向代理服务器在本地缓存中查找请求的内容,找到后直接把内容发送给用户; 如果本地缓存里没有用户所请求的信息内容,反向代理服务器会代替用户向源服务器请求同样的信息内容,并把信息内容发给用户,如果信息内容是缓存的还会把它保存到缓存中。 优点:保护了真实的web服务器,保证了web服务器的资源安全 通常的代理服务器,只用于代理内部网络对Internet外部网络的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。不支持外部网络对内部网络的连接请求,因为内部网络对外部网络是不可见的。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。 节约了有限的IP地址资源 企业内所有的网站共享一个在internet中注册的IP地址,这些服务器分配私有地址

WEB端缓存机制

早过忘川 提交于 2020-02-08 13:28:51
WEB端缓存机制 什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页 数据库数据缓存 数据库数据缓存的实质就是将频繁使用的数据从数据库(硬盘)存到内存中,而内存的读取速度远远快于直接在磁盘读取的速度。至于为什么会有明显的速度差异,浅显的理解是因为内存是电存储,硬盘存储是磁存储。电的速度远远大于磁盘(相当于磁带转动的速度)的速度。即使现在出现了固态硬盘但还仅仅只是在磁盘的基础上有所提高。 服务器端缓存 代理服务器缓存 代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效