精华内容
下载资源
问答
  • Web服务器的工作原理

    2018-04-21 22:31:47
    什么是web服务器、应用服务器和web容器? 什么是Servlet?他们有什么作用? 什么是ServletContext?它由谁创建? ServletRequest和ServletResponse从哪里进入生命周期? 如何管理Session?知道cookie吗? ...
  • web工作原理

    千次阅读 2020-05-29 17:29:55
    1、用户打开客户端,启动浏览器程序,并在浏览器中制定一个URL(统一资源定位器),浏览器便向该URL所指向的Web服务器发出的请求。 2、Web服务器接到浏览器的请求后,把URL转换成页面所在服务器上的文件路径名。 3...

    一、工作过程

             过程如图所示:

    1、用户打开客户端,启动浏览器程序,并在浏览器中制定一个URL(统一资源定位器),浏览器便向该URL所指向的Web服务器发出的请求。

    2、Web服务器接到浏览器的请求后,把URL转换成页面所在服务器上的文件路径名。

    3、如果URL指向的是普通的HTML(Hyper Text Markup Language,超文本标记语言)文档,Web服务器直接将它送给浏览器。HTML文档中可能包含有ActiveX、VBScript、Java、JavaScript等编写的小应用程序(applet),服务器也将其随HTML一道传送到浏览器,在浏览器所在的机器上执行。

    4、如果HTML文档中嵌有ASP或CGI(Common Gateway Interface,公共网关接口)程序,Web服务器就运行ASP或CGI程序,并将结果传送至浏览器。Web服务器运行CGI程序时还可能需要调用其他服务器。

    5、URL也可以指向VRML(Virtual Reality Modeling Language,虚拟现实建模语言)文档。只要浏览器中配置有VRML插件,或者客户机上已安装VRML浏览器,就可以接收Web服务器发送的VRML文档。

    二、什么是B/S体系结构?

             B/S架构即浏览器/服务器结构。它是C/S架构的一种改进,可以说属于三层C/S架构。主要是利用了不断成熟的WWW浏览器技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。

             第一层是浏览器,即客户端,只有简单的输入输出功能,处理极少部分的事务逻辑。由于客户不需要安装客户端,只要有浏览器就能上网浏览,所以它面向的是大范围的用户,所以界面设计得比较简单,通用。

             第二层是WEB服务器,扮演着信息传送的角色。当用户想要访问数据库时,就会首先向WEB服务器发送请求,WEB服务器统一请求后会向数据库服务器发送访问数据库的请求,这个请求是以SQL语句实现的。

             第三层是数据库服务器,他扮演着重要的角色,因为它存放着大量的数据。当数据库服务器收到了WEB服务器的请求后,会对SQL语句进行处理,并将返回的结果发送给WEB服务器,接下来,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器,也就是我们打开浏览器看到的界面。

     

    三、B/S体系结构特点

    1、由于Web支持底层的TCP/IP协议,使Web网与局域网都可以做到连接,从而彻底解决了异构系统的连接问题。

    2、由于Web采用了“瘦客户端”,使系统的开放性得到很大的改善,系统对将要访问系统的用户数的限制有所放松。

    3、系统的相对集中性使得系统的维护和扩展变得更加容易。比如数据库存储空间不够,可再加一个数据库服务器;系统要增加功能,可以新增—个应用服务器来运行新功能。

    4、界面统一(全部为浏览器方式),操作相对简单。

    5、业务规则和数据捕获的程序容易分发。

     

    四、B/S工作原理

             B/S架构采取浏览器请求,服务器响应的工作模式。

             用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;

           而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;

            从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。

          下面来看看B/S架构工作原理图:

             工作流程:

             1. 客户端发送请求: 用户在客户端【浏览器页面】提交表单操作,向服务器发送请求,等待服务器响应;

             2. 服务器端处理请求: 服务器端接收并处理请求,应用服务器端通常使用服务器端技术,如JSP等,对请求进行数据处理,并产生响应;

             3. 服务器端发送响应: 服务器端把用户请求的数据(网页文件、图片、声音等等)返回给浏览器。

             4. 浏览器解释执行HTML文件,呈现用户界面。

              ●浏览器:

             是阅读和浏览Web的工具,它是通过B/S方式与Web服务器交互信息的。

             一般情况下,浏览器就是客户端,它要求服务器把指定信息传送过来,然后通过浏览器把信息显示在屏幕上。

               浏览器实际上是一种允许用户浏览Web信息的软件,只不过这些信息是由Web服务器发送出来的。

             ● 服务器:        

             服务器(Server),它既是计算机硬件的称谓,有时又是计算机服务端软件的称谓,用户应该区分开它们,主要就是从语境上去区分。

             (1)、服务器是一种计算机硬件:服务器应该算是一种高性能的计算机,它作为网络的节点,存储、处理网络上的数据、信息,因此也被称为网络的灵魂。 

             (2)、服务器是一种计算机软件:一般IIS服务器、Java服务器、.NET服务器等名词,一般都是指一种计算机软件。当用户使用计算机上网时,其实是访问服务器硬件。但 是,这个服务器硬件上安装了服务器软件,例如IIS服务器、Java服务器、.NET服务器,它们负责接收用户的访问请求,并根据请求经过计算将数据返回给用户的客户端(浏览器)。

             服务器软件分为两类:一类是Web服务器;另一类是应用程序服务器(简称为App Server)。IIS服务器和Apache是最常用的Web服务器软件;Java服务器、.NET服务器、PHP服务器是最常用的应用程序服务器软件。

             (3)、Web服务器:Web服务器实际上是一种连接在Internet上的计算机软件。它负责Web浏览器提交的文本请求。

           ● Web应用程序:

             最简单的Web应用程序其实就是一些HTML文件和其它的一些资源文件组成的集合。

             Web站点则可以包含多个Web应用程序。它们位于Internet上的一个服务器中,一个Web站点其实就对应着一个网络服务器(Web服务器).

     

     

     

     

     

    展开全文
  • Web服务器工作原理

    2019-12-14 09:16:01
    Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,...

    本文翻译自 howtodoinjava

    Web服务器工作原理概述

    很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,ServletRequest,ServletResponse和Session这些类)在其中扮演了什么角色?这些都是web应用开发者或者想成为web应用开发者的人必须要知道的重要问题或概念。在这篇文章里,我将会尽量给出以上某些问题的答案。请集中精神!

    文章章节:

    • 什么是web服务器、应用服务器和web容器?
    • 什么是Servlet?他们有什么作用?
    • 什么是ServletContext?它由谁创建?
    • ServletRequest和ServletResponse从哪里进入生命周期?
    • 如何管理Session?知道cookie吗?
    • 如何确保线程安全?

    什么是web服务器,应用服务器和web容器?

    我先讨论web服务器和应用服务器。让我在用一句话大概讲讲:

    “在过去它们是有区别的,但是这两个不同的分类慢慢地合并了,而如今在大多在情况下和使用中可以把它们看成一个整体。”

    Mosaic浏览器(通常被认为是第一个图形化的web浏览器)和超链接内容的初期,演变出了“web服务器”的新概念,它通过HTTP协议来提供静态页面内容和图片服务。在那个时候,大多数内容都是静态的,并且HTTP 1.0只是一种传送文件的方式。但在不久后web服务器提供了CGI功能。这意味着我们可以为每个web请求启动一个进程来产生动态内容。现在,HTTP协议已经很成熟了并且web服务器变得更加复杂,拥有了像缓存、安全和session管理这些附加功能。随着技术的进一步成熟,我们从Kiva和NetDynamics学会了公司专属的基于Java的服务器端技术。这些技术最终全都融入到我们今天依然在大多数应用开发里使用的JSP中。

    http://ww1.sinaimg.cn/mw690/b254dc71gw1ep5905azewg20go0bm0t6.gif

    以上是关于web服务器的。现在我们来讨论应用服务器

    在同一时期,应用服务器已经存在并发展很长一段时间了。一些公司为Unix开发了Tuxedo(面向事务的中间件)、TopEndEncina等产品,这些产品都是从类似IMS和CICS的主机应用管理和监控环境衍生而来的。大部分的这些产品都指定了“封闭的”产品专用通信协议来互连胖客户机(“fat” client)和服务器。在90年代,这些传统的应用服务器产品开始嵌入HTTP通信功能,刚开始要利用网关来实现。不久后它们之间的界线开始变得模糊了。

    同时,web服务器越来越成熟,可以处理更高的负载、更多的并发和拥有更好的特性;应用服务器开始添加越来越多的基于HTTP的通信功能。所有的这些导致了web服务器与应用服务器的界线变得更窄了。

    目前,“应用服务器”和“web服务器”之间的界线已经变得模糊不清了。但是人们还把这两个术语区分开来,作为强调使用。

    当有人说到“web服务器”时,你通常要把它认为是以HTTP为核心、web UI为向导的应用。当有人说到“应用服务器”时,你可能想到“高负载、企业级特性、事务和队列、多通道通信(HTTP和更多的协议)”。但现在提供这些需求的基本上都是同一个产品。

    以上就是关于web服务器和应用服务器的全部内容。现在我们来看看第三个术语,即web容器。

    http://ww2.sinaimg.cn/mw690/b254dc71gw1ep5905ms0dj20ev05vq2y.jpg

    在Java方面,web容器一般是指Servlet容器。Servlet容器是与Java Servlet交互的web容器的组件。web容器负责管理Servlet的生命周期、把URL映射到特定的Servlet、确保URL请求拥有正确的访问权限和更多类似的服务。综合来看,Servlet容器就是用来运行你的Servlet和维护它的生命周期的运行环境。

    什么是Servlet?他们有什么作用?

    在Java里,Servlet使你能够编写根据请求动态生成内容的服务端组件。事实上,Servlet是一个在javax.servlet包里定义的接口。它为Servlet的生命周期声明了三个基本方法——init()、service()和destroy()。每个Servlet都要实现这些方法(在SDK里定义或者用户定义)并在它们的生命周期的特定时间由服务器来调用这些方法。

    类加载器通过懒加载(lazy-loading)或者预加载(eager loading)自动地把Servlet类加载到容器里。每个请求都拥有自己的线程,而一个Servlet对象可以同时为多个线程服务。当Servlet对象不再被使用时,它就会被JVM当做垃圾回收掉。

    懒加载的Servlet

    http://ww2.sinaimg.cn/mw690/b254dc71gw1ep59037o3ej208e08it8v.jpghttp://ww4.sinaimg.cn/mw690/b254dc71gw1ep5902u9f1j208d08hq3v.jpg

    预加载的Servlet

    http://ww3.sinaimg.cn/mw690/b254dc71gw1ep5901hyivj208f08iaap.jpghttp://ww4.sinaimg.cn/mw690/b254dc71gw1ep59014zsvj208e08hgmc.jpg

    什么是ServletContext?它由谁创建?

    当Servlet容器启动时,它会部署并加载所有的web应用。当web应用被加载时,Servlet容器会一次性为每个应用创建Servlet上下文(ServletContext)并把它保存在内存里。Servlet容器会处理web应用的web.xml文件,并且一次性创建在web.xml里定义的Servlet、Filter和Listener,同样也会把它们保存在内存里。当Servlet容器关闭时,它会卸载所有的web应用和ServletContext,所有的Servlet、Filter和Listner实例都会被销毁。

    从Java文档可知,ServletContext定义了一组方法,Servlet使用这些方法来与它的Servlet容器进行通信。例如,用来获取文件的MIME类型、转发请求或者编写日志文件。在web应用的部署文件(deployment descriptor)标明“分布式”的情况下,web应用的每一个虚拟机都拥有一个上下文实例。在这种情况下,不能把Servlet上下文当做共享全局信息的变量(因为它的信息已经不具有全局性了)。可以使用外部资源来代替,比如数据库。

    ServletRequest和ServletResponse从哪里进入生命周期?

    Servlet容器包含在web服务器中,web服务器监听来自特定端口的HTTP请求,这个端口通常是80。当客户端(使用web浏览器的用户)发送一个HTTP请求时,Servlet容器会创建新的HttpServletRequest和HttpServletResponse对象,并且把它们传递给已经创建的Filter和URL模式与请求URL匹配的Servlet实例的方法,所有的这些都使用同一个线程。

    request对象提供了获取HTTP请求的所有信息的入口,比如请求头和请求实体。response对象提供了控制和发送HTTP响应的便利方法,比如设置响应头和响应实体(通常是JSP生成的HTML内容)。当HTTP响应被提交并结束后,request和response对象都会被销毁。

    如何管理Session?知道cookie吗?

    当客户端第一次访问web应用或者第一次使用request.getSession()获取HttpSession时,Servlet容器会创建Session,生成一个long类型的唯一ID(你可以使用session.getId()获取它)并把它保存在服务器的内存里。Servlet容器同样会在HTTP响应里设置一个Cookie,cookie的名是JSESSIONID并且cookie的值是session的唯一ID。

    根据HTTP cookie规范(正规的web浏览器和web服务器必须遵守的约定),在cookie的有效期间,客户端(web浏览器)之后的请求都要把这个cookie返回给服务器。Servlet容器会利用带有名为JSESSIONID的cookie检测每一个到来的HTTP请求头,并使用cookie的值从服务器内容里获取相关的HttpSession。

    HttpSession会一直存活着,除非超过一段时间没使用。你可以在web.xml里设定这个时间段,默认时间段是30分钟。因此,如果客户端已经超过30分钟没有访问web应用的话,Servlet容器就会销毁Session。之后的每一个请求,即使带有特定的cookie,都再也不会访问到同一个Session了。servletcontainer会创建一个新的Session。

    现有的Session

    http://ww2.sinaimg.cn/mw690/b254dc71gw1ep5902g0ifj208e08jq3r.jpg

    新的Session

    http://ww4.sinaimg.cn/mw690/b254dc71gw1ep5903nmyej20gu08k40f.jpg

    另外,在客户端的session cookie拥有一个默认的存活时间,这个时间与浏览器的运行时间相同。因此,当用户关闭浏览器后(所有的标签或者窗口),客户端的Session就会被销毁。重新打开浏览器后,与之前的Session关联的cookie就再也不会被发送出去了。再次使用request.getSession()会返回一个全新的HttpSession并且使用一个全新的session ID来设置cookie。

    如何确保线程安全?

    你现在应该已经知道所有的请求都在共享Servlet和Filter。这是Java的一个很棒的特性,它是多线程的并且不同的线程(即HTTP请求)可以使用同一个实例。否则,对每一个请求都重新创建一个实体会耗费很多的资源。

    http://ww1.sinaimg.cn/mw690/b254dc71gw1ep5904rzzvj208f08hwf3.jpg

    你同样要知道,你不应该使用Servlet或者Filter的实例变量来存放任何的请求或者会话范围内的数据。这些数据会被其他Session的所有请求共享。这是非线程安全的!下面的例子说明了这个问题:

    public class MyServlet extends HttpServlet
    
    {
    
        private Object thisIsNOTThreadSafe; //Don't to this
    
    
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    
        {
    
            Object thisIsThreadSafe;
    
    
    
            thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
    
            thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
    
        }
    
    }

    不要这样做,这会导致软件出bug。

     

     

    展开全文
  • 主要介绍了python web框架 django wsgi原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
  • 什么是Web?及web服务器原理

    千次阅读 2016-12-10 23:53:06
    什么是WebWeb就是一种超文本信息系统,Web的一个主要的概念就是超文本连接,它使得文本不再象一本书一样是固定的线性的。而是可以从一个位置跳到另外的位置。你可以从中获取更多的信息。可以转到别的主题上。...

    什么是Web?

    Web就是一种超文本信息系统,Web的一个主要的概念就是超文本连接,它使得文本不再象一本书一样是固定的线性的。而是可以从一个位置跳到另外的位置。你可以从中获取更多的信息。可以转到别的主题上。想要了解某一个主题的内容只要在这个主题上点一下,就可以跳转到包含这一主题的文档上。正是这种多连接性我们才把它称为Web。 
    World Wide Web,简称WWW,是英国人TimBerners-Lee 1989年在欧洲共同体的一个大型科研机构任职时发明的。通过WEB,互联网上的资源,可以在一个网页里比较直观的表示出来;而且资源之间,在网页上可以链来链去。在WEB1.0上做出巨大贡献的公司有Netscape,Yahoo和Google。 Netscape研发出第一个大规模商用的浏览器,Yahoo的杨致远提出了互联网黄页, 而Google后来居上,推出了大受欢迎的搜索服务。 
    搜索最大的贡献是,把互联网上海量的信息,用机器初步分了个线索。但是,光知道网页里有哪些关键字,只解决了人浏览网页的需求。所以,Tim-Berners-Lee在提出WWW不久,即开始推崇语义网(Semantic Web)的概念。为什么呢?因为互联网上的内容,机器不能理解。他的理想是,网页制作时和架构数据库时,大家都用一种语义的方式,将网页里的内容表述成机器可以理解的格式。这样,整个互联网就成了一个结构严谨的知识库。从理想的角度,这是很诱人的,因为科学家和机器都喜欢有次序的东西。Berners-Lee关心的是,互联网上数据,及能否被其它的互联网应用所重复引用。举一个例子说明标准数据库的魅力。有个产品叫LiberyLink。装了它后,到Amazon上去浏览时,会自动告诉你某一本书在用户当地的图书馆能否找到,书号是多少等。因为一本书有统一的书号和书名,两个不同的互联网服务(Amazon 和当地图书馆数据库检索)可以公享数据,给用户提供全新服务。 
    但是,语义网提出之后,曲高和寡,响应的人不多。为什么?因为指望要网页的制作者提供这么多额外的信息去让机器理解一个网页,太难;简直就是人给机器打工。这违反了人们能偷懒就偷懒的本性。看看Google的成功就知道。 Google有个Page Rank技术,将网页之间互相链接的关系,用来做结果排序的一个依据,变相利用了网页制作人的判断力。想一想网页的制作者们,从数量来说,比纯浏览者的数量小得多。但Google就这一个革新,用上了网页的制作者的一部份力量,已将其推上了互联网的顶峰。 
    所以互联网下一步,是要让所有的人都忙起来,全民织网,然后用软件,机器的力量使这些信息更容易被需要的人找到和浏览。如果说WEB1.0是以数据为核心的网,那我觉得WEB2.0是以人为出发点的互联网。我们看一看最近的一些WEB2.0产品,就可以理解以上观点。 
    Blog: 用户织网,发表新知识,和其他用户内容链接,进而非常自然的组织这些内容。 
    RSS: 用户产生内容自动分发,定阅 
    Podcasting: 个人视频/声频的发布/定阅 
    SNS: blog+人和人之间的链接 
    WIKI: 用户共同建设一个大百科全书 
    从知识生产的角度看,WEB1.0的任务,是将以前没有放在网上的人类知识,通过商业的力量,放到网上去。WEB2.0的任务是,将这些知识,通过每个用户的浏览求知的力量,协作工作,把知识有机的组织起来,在这个过程中继续将知识深化,并产生新的思想火花; 
    从内容产生者角度看,WEB1.0是商业公司为主体把内容往网上搬,而WEB2.0则是以用户为主,以简便随意方式,通过blog/podcasting 方式把新内容往网上搬; 
    从交互性看,WEB1.0是网站对用户为主;WEB2.0是以P2P为主。 
    从技术上看,WEB客户端化,工作效率越来越高。比如像Ajax技术, GoogleMAP/Gmail里面用得出神入化。 
    我们看到,用户在互联网上的作用越来越大;他们贡献内容,传播内容,而且提供了这些内容之间的链接关系和浏览路径。在SNS里面,内容是以用户为核心来组织的。WEB2.0是以用户为核心的互联网。 
    那么,这种意义上的WEB2.0,和Tim Berners-Lee的语义网,有什么不同呢?语义网的出发点是数据的规整及可重复被机器调用,提出使用语义化的内容发布工具, 试图从规则和技术标准上使互联网更加有序。 Google等搜索引擎,在没有语义网的情况下,尽可能的给互联网提供了线索。 WEB2.0则是鼓励用户用最方便的办法发布内容(blog/podcasting),但是通过用户自发的(blog)或者系统自动以人为核心(SNS)的互相链接给这些看似凌乱的内容提供索引。因为这些线索是用户自己提供,更加符合用户使用感受。互联网逐渐从以关键字为核心的组织方式和阅读方式,到以互联网用户的个人portal(SNS)为线索,或者以个人的思想脉络(blog/rss)为线索的阅读方式。WEB2.0强调用户之间的协作。WIKI是个典型例子。从这个角度看,互联网是在变得更有序,每个用户都在贡献:要么贡献内容,要么贡献内容的次序. 
    对下一代互联网的看法,还会有很多的讨论。有一点可以肯定,WEB2.0是以人为核心线索的网。提供更方便用户织网的工具,鼓励提供内容。根据用户在互联网上留下的痕迹,组织浏览的线索,提供相关的服务,给用户创造新的价值,给整个互联网产生新的价值,才是WEB2.0商业之道。

    Web的特点:

    一、Web是图形化的和易于导航的(navigate)

    Web 非常流行的一个很重要的原因就在于它可以在一页上同时显示色彩丰富的图形和文本的性能。在Web之前Internet上的信息只有文本形式。Web可以提供将图形、音频、视频信息集合于一体的特性。同时,Web是非常易于导航的,只需要从一个连接跳到另一个连接,就可以在各页各站点之间进行浏览了。

    二、Web与平台无关

    无论你的系统平台是什么,你都可以通过Internet访问WWW。浏览WWW对你的系统平台没有什么限制。无论从Windows平台、UNIX平台、Macintosh还是别的什么平台我们都可以访问WWW。对WWW的访问是通过一种叫做浏览器(browser)的软件实现的。如Netscape 的Navigator、NCSA的Mosaic、Microsoft的Explorer等。

    三、Web是分布式的

    大量的图形、音频和视频信息会占用相当大的磁盘空间,我们甚至无法预知信息的多少。对于Web没有必要把所有信息都放在一起,信息可以放在不同的站点上。只需要在浏览器中指明这个站点就可以了。使在物理上并不一定在一个站点的信息在逻辑上一体化,从用户来看这些信息是一体的。

    Web 是动态的

    最后,由于各Web站点的信息包含站点本身的信息,信息的提供者可以经常对站上的信息进行更新。如某个协议的发展状况,公司的广告等等。一般各信息站点都尽量保证信息的时间性。所以Web站点上的信息是动态的。经常更新的。这一点是由信息的提供者保证的。

    Web动态的特性还表现在Web是交互的。

    Web的交互性首先表现在它的超连接上,用户的浏览顺序和所到站点完全由他自己决定。另外通过FORM的形式可以从服务器方获得动态的信息。用户通过填写FORM可以向服务器提交请求,服务器可以根据用户的请求返回相应信息。

    Web服务器工作原理:

    一个 Web 服务器也被称为 HTTP 服务器,它通过 HTTP 协议与客户端通信。这个客户端通常指的是 Web 浏览器。一个基于 Java 的 Web 服务器用到二个重要的类,java.net.Socket 与 java.net.ServerSocket ,并通过 HTTP 消息通信。因此,本文从讨论 HTTP 与这二个类开始,然后我将解释一个与本文相关的简单的 Web 应用。

    The Hypertext Transfer Protocol(HTTP)

    HTTP 是一种让 Web 服务器与浏览器(客户端)通过 Internet 发送与接收数据的协议。它是一个请求、响应协议--客户端发出一个请求,服务器响应这个请求。HTTP 运用可靠的 TCP 连接,通常用的 TCP 80 端口。它的第一个版本是 HTTP/0.9 ,然后被 HTTP/1.0 取代。当前的版本是 HTTP/1.1 ,由RFC2616(.pdf) 定义。

    本节主要对应 HTTP 1.1 ,足够使你充分理解由 Web 服务器程序发出的消息。如果你对更加详细的知识有兴趣,可以参考 RFC2616 。

    在 HTTP 中,客户端总是通过建立一个连接与发送一个 HTTP 请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回叫连接。客户端与服务器端都可以提前中断一个连接。例如,当用一个浏览器下载一个文件时,你可以通过点击“停止”键来中断文件的下载,关闭与服务器的 HTTP 连接。

    HTTP 请求

    一个 HTTP 请求包含三个部分:

    Method-URI-Protocol/Version方法-地址-版本

    Request header请求头

    Entity body请求实体

    下面是一个 HTTP 请求实例:

    POST /servlet/default.jsp HTTP/1.1

    Accept: text/plain; text/html

    Accept-Language: en-gb

    Connection: Keep-Alive

    Host: localhost

    Referer: http://localhost/ch8/SendDetails.htm

    User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

    Content-Length: 33

    Content-Type: application/x-www-form-urlencoded

    Accept-Encoding: gzip, deflate

    LastName=Franks&FirstName=Michael

    The Method-URI-Protocol/Version 在这个请求的第一行:

    POST /servlet/default.jsp HTTP/1.1

    其中 POST 是请求的类型。每个客户端 HTTP 请求可以是 HTTP 规范中指定的许多请求类型中的一种。HTTP 1.1 支持七种类型的请求,它们是 GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE。其中 GET 与 POST 是 Internet 应用中经常用到的二种请求类型。

    URI 完整地指定了 Internet 资源。一个 URI 通常被解析为相对服务器的根目录。这样,它应该总是以一个 '/' 前缀开始。一个 URL 实际上是 URI 的一种类型。

    Version 指的是该 HTTP 请求所用到的 HTTP 协议版本。

    请求头包含了客户端环境与请求实体的一些有用的信息。例如它包含浏览器设定的语言、实体的长度等等。每条请求头用回车换行符(CRLF)分开。

    一个非常重要的空行分开了请求头与实体,它标志着实体内容的开始。一些 Internet 开发书籍认为这个 CRLF 空行是 HTTP 请求的第四个部分。

    在上面的 HTTP 请求中,实体只是简单以下的一行:

    LastName=Franks&FirstName=Michael

    在一个典型的 HTTP 请求中,请求实体内容会长得多。

    HTTP 响应

    与请求相似,HTTP 响应也由三部分组成:

    Protocol-Status code-Description协议状态 描述代码

    Response headers响应头

    Entity body响应实体

    以下是一个 HTTP 响应的实例:

    HTTP/1.1 200 OK

    Server: Microsoft-IIS/4.0

    Date: Mon, 3 Jan 1998 13:13:33 GMT

    Content-Type: text/html

    Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT

    Content-Length: 112

    <html>

    <head>

    <title>HTTP Response Example</title></head><body>

    Welcome to Brainy Software

    </body>

    </html>

    响应头的第一行类似请求头的第一行,告诉你所用的协议是 HTTP 1.1 ,请求成功(200=success),以及没有任何问题。

    响应头类似请求头也包含了一些有用的信息。响应的实体响应本身的 HTML 内容。头与实体之间由回车换行的空行(CRLF)分开。

    Socket 类

    一个 socket 是一个网络连接的端点,它使得一个应用可以从网络读与写。在不同电脑上的二个应用软件能够通过收发字节流而彼此通信。要发一个信息到另一个应用程序,你需要知道它的IP地址,以及它的 socket 端口号。在 Java 中,一个 socket 用 java.net.Socket 来实现。

    要创建一个 socket ,你可以用 Socket 类中几个构建方法中的一个。其中一个接受主机名与端口号作为参数:

    new Socket("yahoo.com", 80);

    一旦你成功地创建了一个 Socket 类的实例,你就可以用它去发送与接收字节流了。要发送字节流,你需要呼叫 Socket 类的 getOutputStream 方法来得到一个 java.io.OutputSteam 对象。要发送文本到远程的程序,你通常需要从返回的 OutputStream 创建一个 java.io.PrintWriter 对象。要从连接的另一端接收字节流,你需要呼叫 Socket 类的 getInputStream 方法,它返回一个 java.io.InputStream 对象。

    以下代码创建一个可以与本地 HTTP 服务器通信的 socket (127.0.0.1 表示一个本地的主机),发送一个 HTTP 请求,并接收从服务器的响应。它还创建一个 StringBuffer 对象来接受响应,并打印到控制台。

    Socket socket= new Socket("127.0.0.1", "8080");

    OutputStream os= socket.getOutputStream();

    boolean autoflush = true;

    PrintWriter out= new PrintWriter( socket.getOutputStream(), autoflush );

    BufferedReader in = new BufferedReader(

    new InputStreamReader( socket.getInputStream() ));

    // send an HTTP request to the web server

    out.println("GET /index.jsp HTTP/1.1");

    out.println("Host: localhost:8080");

    out.println("Connection: Close");

    out.println();

    // read the response

    boolean loop= true;

    StringBuffer sb = new StringBuffer(8096);

    while (loop) {

    if ( in.ready() ) {

    int i=0;

    while (i!=-1) {

    i = in.read();

    sb.append((char) i);

    }

    loop = false;

    }

    Thread.currentThread().sleep(50);

    }

    // display the response to the out console

    System.out.println(sb.toString());

    socket.close();

    注意要从 web 服务器得到正确的响应,你必须要发送用 HTTP 协议编译了的 HTTP 请求。如果你看了上面的 HTTP 部分,你应该能够理解上面代码中的 HTTP 请求。

    黑客首选--Web 2.0应用程序

    日前,全球互联网内容安全领导者趋势科技(东京证交所代号:4704)发布了趋势科技实验室整理分析的“08 年病毒威胁摘要暨-09年病毒趋势预测”。根据这份研究报告指出,2008年亚洲地区的网络罪犯纷纷使用新媒介或针对旧媒介进行改良,用以谋取利益,并且以大规模的网页入侵、AUTORUN 恶意软件、社交诈骗手法与区域性病毒威胁为主要四大类型网络犯罪。进入2009年,值得注意的是:由于Web2.0社交网站的使用率大增,然而网站设计的安全弱点加上Web2.0用户的认知不足,因此,这类网站将成为 Web威胁繁衍的沃土。同时,2009年还需特别留意的还有浏览器与其他Web 应用程序,它们将成为黑客攻击的首要目标!

    趋势科技的产品技术顾问徐学龙指出:“2008年,锁定特定用户群与热门网站为目标的病毒攻击手法相当猖獗。在5月份,包括娱乐、政治、购物网、社交网络等各种性质的网站达到病毒入侵的最高峰,全球许多网站被植入了恶意代码,借此感染不知情的网民。该趋势似乎正以令人无法想象的速度持续发展,相当令人忧心。”

     

    据趋势科技2008年度数据安全分析报告指出:去年感染比例最高的是以利用USB移动储存装置作为传播媒介的AUTORUN恶意软件,在亚洲区即高达15%的感染比例,而在欧洲、中东及非洲 (EMEA) 地区感染数最高的恶意软件当中也出现其身影,甚至还成功渗透NASA与美国国防部网络。由于企业内部USB移动储存装置不易控管,造成窃取私密数据越来越方便,随之兴起了盗卖个人资料的地下经济。而Web威胁结合USB、Email整合而成的混合式攻击,也使得处理病毒问题日趋复杂,企业MIS人员很难找出造成问题的恶意软件档案,致使企业生产力降低。针对此现象,徐学龙进一步分析:“现今病毒感染途径范围越来越大,光靠单一防护措施已经越来越难以防止,若是没做好环节中的其中一项,将导致企业内部用户感染病毒的频率上升。”

    另外报告中提到,在过去一年中黑客擅于利用网民所关心的事件,如四川地震、北京奥运等作为套诱饵制作恶意软件向网民连番攻击,而针对特定地区的独特背景所设计的不同攻击事件也依然层出不穷。举例来说,08年2 月份,中国在线游戏平台联众网站遭恶意软件作者利用安全弱点设下陷阱等待玩家上钩。另外,持续兴风作浪的网络钓鱼诈骗邮件,在08年则锁定Yahoo! Japan拍卖网站用户为攻击目标,使他们面临帐户信息遭窃的风险。

    Web 2.0的安全风险及对策

    在企业IT世界中,安全风险随处可遇,例如不够强壮的密码,意料之外的电子邮件附件,浏览网页时误点了恶意网址,还有不请自来的流氓软件。诸如防火墙、杀毒软件等安全工具基本可以处理这些安全威胁。不过,随着Web 2.0应用逐渐增多,企业IT部门又迎来了新的安全威胁,传统的安全工具在面对Web 2.0应用时往往显得心有余而力不足,那么企业IT部门应该如何应对Web 2.0应用所带来的安全威胁呢?

    Web 2.0应用安全风险加剧

    随着互联网和Web 2.0应用的日益普及,无论是个人用户,还是企业用户,都将面临着巨大的安全威胁。

    安全公司Sophos曾经表示,每天有15000多个新网页将被感染,90%的Web威胁位于合法的黑客站点上,同时在全部搜索结果中有1%包含被感染的网页。

    其中,对于多数IT经理或信息安全管理者来说,社交网站所带来的安全威胁日渐增大。黑客们已经把目光转向了众多知名社交网站。

    在过去一年中,著名社交网站Facebook用户已经屡次遭到了多种蠕虫病毒的袭击。恶意分子首先获得某Facebook用户帐户,然后向其好友发送一条消息,告诉他们点击这个链接观看来自谷歌Picasa的相片或者是一段视频。缺乏防范意识的用户点击链接后,会被提示下载一个视频控件,但这实际上是一个传播木马病毒的恶意程序。

    去年8月份,Facebook的1800多名用户的信息遭到秘密安装的木马程序窜改。

    而微博客Twitter也同样成为网络罪犯散播恶意软件和商业广告讯息的工具。最近Twitter用户就遭遇到了钓鱼攻击,黑客首先用伪冒网站骗取用户的账号和密码,然后向被攻击用户的好友发送销售讯息或利用Twitter特有的缩址服务,欺骗网友进入第三方网站。

    除了社交网站之外,其它很多Web 2.0应用同样深受用户喜欢,因为它们非常易用和实用,用户一般主动去安装这些工具,但是同时它们也将其固有的风险引入到了企业此前非常牢固的网络架构之内,让企业数据面临着安全风险。

    Web 2.0应用安全防护的难点

    对于IT经理来说,防护Web 2.0应用所带来的安全风险是一件非常麻烦的事情,因为这些安全威胁的特点已经与传统的安全威胁有了很大区别。

    在过去,可以在网络入口处保护网络终端,但是现在,Web内容逐渐趋于动态化,用户需要持续不断的更新现有内容、共享应用程序,并通过多种渠道进行即时通讯。

    很多Web 2.0应用都对算法进行了优化,以确保不被阻挡,另外,这些应用还可以将自己伪装成HTTP、FTP、SMTP和Telnet通信,来绕开防火墙和目前统一威胁管理系统的探测。

    另外,企业IT人员无法采取一刀切的形式,禁止员工使用所有Web 2.0应用,这是不现实的。因为这样做只会阻扰员工,切断本应通过这些应用得到的具有潜在价值的商机。

    如何应对Web 2.0应用安全风险

    企业IT人员需要根据当今世界的Web2.0调整自己的安全策略,为社交网站、博客和所有其他类型的网站创建规则,同时借助于新的安全工具来检测和屏蔽恶意Web 2.0应用。

    为了避免Web 2.0应用导致企业数据面临威胁,企业安全人员应对企业内部的核心数据进行分门别类,并通过高质量的加密保证非常有价值的数据不被拦截和非授权用户利用。

    另外,加强企业内部员工的安全意识教育,通过不断强化员工的风险意识,实际操作培训等使员工自觉遵守相关的策略,帮助企业避免核心数据从内部泄露。

    除了加强安全策略和提高员工安全意识外,市场也在呼唤新的技术来加强对Web 2.0应用的管理和防护。

    美国FaceTime Communications公司最近推出了名为ACE的新探测分类技术,“ACE”是应用程序控制引擎(Application Control Engine)的首字母缩写。这种专利安全技术可以扫描网络,识别1400多个Web 2.0应用和5万多个社交网络插件。

    扫描网络上的恶意应用程序对IT人士来说或许不是一件新鲜的事情,但是FaceTime的ACE技术关注于扫描Web 2.0应用,这就颇具新意了。

    通过FaceTime的ACE,这1400多个Web应用可以被识别,同时更多的社交网络插件也可以被单独认出。不管这些应用使用什么端口、协议或逃避技术,ACE都可以发现并关闭它们。

    另外,ACE软件开发工具可以让第三方解决方案提供商进行扩展开发,可以帮助它们的客户管理即时通讯、端对端文件共享、社交网络、Web 2.0、VOIP等方面的应用。

    展开全文
  • web 开发原理

    2018-12-10 16:45:20
    作为一位 Java Web 开发人员,你是否遭遇过下面这些状况: · 客户端请求参数我要一个个地取,不能用循环,醉了…… · 参数取出来都是 String 类型,我还得一个个做类型转换,很恼火…... · 配置文件写得比...

    作为一位 Java Web 开发人员,你是否遭遇过下面这些状况:

    · 客户端请求参数我要一个个地取,不能用循环,醉了……

    · 参数取出来都是 String 类型,我还得一个个做类型转换,很恼火…...

    · 配置文件写得比代码还多,这是要逼疯我的节奏吗?

    · Servlet 处理多个请求,需要手动完成逻辑控制,就不能智能一点吗?!

    如果你坚持使用原生的 Servlet 做开发,上面这些坑是一定绕不过去的。Servlet 是 Java Web 的基石,首先简单谈一下 Servlet,为什么使用起来这么不方便。

    Web 开发的原理是服务端接收到客户端传来的 request,进行业务处理,然后将结果通过 Response 响应给客户端的过程。

    客户端和服务端通过 HTTP 协议进行数据交互,底层机制是客户端将用户输入的信息组装成 HTTP 协议报文,然后通过网络将报文传输到服务端。

    服务端通过特定的 Web 容器(Tomcat、Jetty 等)接收报文并进行解析,将数据封装到 request 对象中,并通过 request 获取数据进行业务逻辑处理,将处理结果封装到 response 对象中,传给 Web 容器。

    Web 容器再次进行解析,将 response 对象转为 HTTP 协议报文返回给客户端,客户端对结果进行渲染展示给用户。

    服务端具体对接收请求做出响应的工作是由 Servlet 来完成的,但是 Servlet 有其自身无法克服的缺点:配置过于繁琐。

    同时 HTTP 协议传输的数据都是文本形式,这就需要开发者进行大量的数据类型转换,这种工作没有技术含量、简单枯燥易出错。因此,使用 Servlet 显得非常低效和落后。

    我们的时间和精力是有限的,不能把有限的时间和精力浪费在没有技术含量的体力活上,我们追求的是更加高效、更加便捷的开发模式。

    这就是框架存在的价值:让开发者将精力集中在核心业务的开发上,框架会帮你屏蔽掉跟业务开发无关的各种问题,体力活框架帮你做。

    框架的特点就是在原有技术的基础上,提供一套和原技术具备相同业务功能的组件,同时比原技术更加高效易用,功能更加强大。

    Spring MVC 就是这样一款实现 MVC 设计模式的框架,是 Spring 框架的一个分支产品,以 Spring IoC 容器为基础,并利用容器的特性来简化它的配置。

    Spring MVC 相当于 Spring 的一个子模块,可以很好地和 Spring 结合起来进行开发,是每一个 Java Web 开发者都应该掌握的技术。

     

    为什么要使用 Spring MVC

    使用 Spring MVC 可以帮助你屏蔽掉繁琐的数据类型、数据绑定,同时提高良好的自定义校验,强大的标签库,让你开发起来更加得心应手、高效。

    相比于 Struts2 框架,Spring MVC 的开发效率和性能更高,配置更简单,功能更强大,同时可以和 Spring 框架无缝对接,安全性比 Struts2 更高。

     

    Spring MVC 的优点

    • 完整的角色划分:每种角色各司其职、协同工作。

    • 简便的配置方式:以 Spring IoC 为基础,将各个组件都以 JavaBean 的形式配置。

    • 代码复用:可使用现有的业务对象作为表单对象,不需要去扩展某个特定框架的基类。

    • 自定义数据转换器:可根据需求对数据类型进行转换,比如将特定格式的字符串转为日期类型。

    • 功能强大的表单标签库:让 JSP 表单的数据绑定更加便捷高效。

    • 国际化:支持根据用户区域显示不同国家的语言。

     

    Spring MVC 工作流程

    • 客户端请求被 DispatcherServlet(前端控制器)接收

    • 根据 HandlerMapping 映射到 Handler

    • 生成 Handler 和 HandlerInterceptor(如果有则生成)

    • Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式一并返回给 DispatcherServlet

    • DispatcherServlet 通过 HandlerAdapter 调用 Handler 的方法做业务逻辑处理

    • 返回一个 ModelAndView 对象给 DispatcherServlet

    • DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析成物理视图 View

    • ViewResolver 返回一个 View 给 DispatcherServlet

    • DispatcherServlet 根据 View 进行视图渲染(将模型数据填充到视图中)

    • DispatcherServlet 将渲染后的视图响应给客户端       

        

    展开全文
  • java web什么原理

    千次阅读 2020-02-08 20:25:34
    言归正传,Java语言能长期霸占语言排行榜一个重要的原因就是强大的web开发能力,web开发是java的基石(在EJB推出的时候当时的Sun用基石来描述EJB),所以了解java web开发原理是非常重要的。如果仅仅跟大家聊java ...
  • 常见WEB漏洞原理分析

    千次阅读 2019-08-09 11:47:05
    本文根据当前Web应用的安全情况,列举了Web应用程序常见的攻击原理及危害,并给出如何避免遭受Web攻击的建议。 Web应用漏洞原理 Web应用攻击是攻击者通过浏览器或攻击工具,在URL或者其它输入区域(如表单等),...
  • web手写签名功能

    2019-07-09 11:27:36
    实现web手写签名功能 打开就能用 鼠标手写触摸板手写 手机端也可以用 写完直接转image 很实用
  • 随着互联网技术在全球范围内的迅速发展,各种 Web 应用程序已成为系统软件开发的主流,对应的自动化测试理论和工具日趋重要。基于开源的自动化测试工具 Geb,介绍了它的大致原理,给出了一个简单可行的实践步骤。...
  • Java Web工作原理

    千次阅读 2018-06-02 15:44:25
    一:在本章我们将学到如下的内容》HTTP协议原理》服务器端Web编程原理》Servlet与Web容器》Java Web应用程序的组成》Tomcat介绍 一:1.1解析HTTP协议HTTP:超文本传输协议(HyperText Transfer Protocol)HTTP是一种...
  • 什么是web框架
  • Web服务器工作原理详解(基础篇)

    万次阅读 多人点赞 2018-08-14 17:12:00
    概述:Web服务器概念较为广泛,我们最常说的Web服务器指的是网站服务器,它是建立在Internet之上并且驻留在某种计算机上的程序。Web服务器可以向Web客户端(如浏览器)提供文档或其他服务,只要是遵循HTTP协议而设计的...
  • web的工作原理

    千次阅读 2017-03-02 16:41:43
    Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext...
  • Web服务器的工作原理(一)

    千次阅读 2016-11-21 15:16:31
    Web服务器的工作原理(一)12@(服务器)[Web服务器, Notes] VICTORY LOVES PREPARATIONWeb服务器的工作原理一12 思维导图 一web服务器应用服务器和web容器 web服务器 应用服务器 web容器 二Servlet 三ServletContext...
  • Web基础(三)Python Web

    千次阅读 多人点赞 2018-11-14 19:11:49
    文章目录Python Web基础1. WSGI1.1 概述1.2 实现原理1、WSGI Server/gateway2、WSGI Application3、WSGI MiddleWare1.3 测试 WSGI服务器代码简析1.4 实现WSGI服务器1.5 生产环境中的Web服务器[Gunicorn]...
  • web应用工作原理

    2020-03-16 17:00:57
    文章目录静态网页动态网页工作流程服务器Web服务器IISApacheNginxTomcatWeblogic数据库开发语言及常见框架/cmsweb常见架构 静态网页 html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如...
  • ASP.NET Core Web API中的功能原理 该存储库包含一个ASP.NET Core Web API示例,该示例应用了功能编程基础上的基本原理,使您可以深入了解REST API的行为方式。 应用函数式编程原理可以使您能够创建可快速适应不断...
  • Web应用运行原理

    千次阅读 2018-09-10 23:46:45
    web应用启动做了什么? 读取web.xml文件   - web.xml常用配置参数: 1).context-param(上下文参数) 2).listener(监听器配置参数) 3).filter(过滤器配置参数) 4).servle(servlet页面参数) 5).其他 -读取...
  • web服务器运行原理

    千次阅读 2019-03-04 09:45:41
    这几天的工作,就是把程序解耦,将功能分离,服务器只用来提供WEB服务,WEB应用用来实现数据处理。 大家可以了解一下开发中比较常用的WEB框架,比如 Apache ,Nigix,Tomcat等。 没有一个服务器框架安装完成后,就...
  • web前端开发是什么

    千次阅读 2020-01-20 16:13:19
    1、webweb系统,是以网站的形式呈现,通过浏览器的访问来实现一定的功能的系统。 2、什么是前端开发? 前端开发是创建web页面或app等前端界面呈现给用户的过程。通过html、css、js以及衍生出来的各种技术、框架、...
  • Web服务器工作原理概述

    千次阅读 2015-02-12 10:03:24
    很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了什么动作?Java Servlet API(例如ServletContext,ServletRequest,...
  • Java Web开发实现原理

    千次阅读 2018-09-25 23:06:42
    目录 一、Web 发展历史 1. 通信条件 2. 服务器 ...1. 工作原理 2. 应用技术 四、Tomcat 1. 概念 2. Tomcat 目录结构 3. Eclipse 关联 Tomcat 五、HTTP协议 1. 主要特点 2. HTTP 请求 2. HT...
  • 主要介绍了Java web数据可视化实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • JWT(JSON Web Token)原理简介

    万次阅读 多人点赞 2018-10-07 21:36:05
    参考了一下这篇文章:https://medium.com/vandium-software/5-easy-steps-to-understanding-json-web-tokens-jwt-1164c0adfcec ...首先这个先说这个东西是什么,干什么用的,一句话说:就是这是一种认证机...
  • web服务器的工作原理

    2018-03-28 10:22:25
    了解WEB服务器的工作原理和相关概念是后台开发人员的必修课,这篇文章来自 : Web服务器的工作原理很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http...
  • web常见漏洞原理,利用,防御1.SQL注入原理利用防御2.XSS(Cross-site scripting)原理 1.SQL注入 原理 把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的...
  • Web技术的主要组成和工作原理

    千次阅读 2019-01-02 11:29:16
    一个web应用是受到多个步骤组成的, 1.本地计算机和远程服务器 ...2.Web应用程序的工作原理 浏览器的访问过程如下(用户想要访问网页,需要先获取网站首页的站点信息): (1)浏览器地址栏输入想...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428,204
精华内容 171,281
关键字:

web的功能原理是什么