Web框架原理

阅读:369 2019-03-19 15:03:21 来源:新网

web框架原理什么是web

万维网(英语:worldwideweb),亦作“www”、“web”,是一个由许多互相链接的超文本组成的系统,通过互联网访问。英国科学家蒂姆·伯纳斯-李于1989年发明了万维网。1990年他在瑞士cern的工作期间编写了第一个网页浏览器。网页浏览器于1991年在cern向外界发表,1991年1月开始发展到其他研究机构,1991年8月在互联网上向公众开放。

互联网和万维网这两个词通常没有多少区别。但是,两者并不相同。互联网是一个全球互相连接的电脑网络系统。相比之下,万维网是通过超链接和uris连接的全球收集的文件和其他资源。万维网资源通常使用http访问,这是许多互联网通信协议的其中之一。

我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢?

对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入url的时候,首先浏览器会去请求dns服务器,通过dns获取相应的域名对应的ip,然后通过ip地址找到ip对应的服务器后,要求建立tcp连接,等浏览器发送完httprequest(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回httpresponse(响应)包;客户端收到来自服务器的响应后开始渲染这个response包里的主体(body),等收到全部的内容随后断开与该服务器之间的tcp连接。

一个web服务器也被称为http服务器,它通过http协议与客户端通信。这个客户端通常指的是web浏览器(其实手机端客户端内部也是浏览器实现的)。

web服务器的工作原理可以简单地归纳为:

一个简单的http事务就是这样实现的,看起来很复杂,原理其实是挺简单的。需要注意的是客户机与服务器之间的通信是非持久连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。

我们浏览网页都是通过url访问的,那么url到底是怎么样的呢?

url(uniformresourcelocator)是“统一资源定位符”的英文缩写,用于描述一个网络上的资源,基本格式如下:

scheme://host[:port#]/path/.../[?query-string][#anchor]scheme指定底层使用的协议(例如:http,https,ftp)hosthttp服务器的ip地址或者域名port#http服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.cnblogs.com:8080/path访问资源的路径query-string发送给http服务器的数据anchor锚

dns(domainnamesystem)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于tcp/ip网络,它从事将主机名或域名转换为实际ip地址的工作。dns就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

更详细的dns解析的过程如下,这个过程有助于我们理解dns的工作模式

在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个ip地址映射,完成域名解析。

如果hosts里没有这个域名的映射,则查找本地dns解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

如果hosts与本地dns解析器缓存都没有相应的网址映射关系,首先会找tcp/ip参数中设置的首选dns服务器,在此我们叫它本地dns服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

如果要查询的域名,不由本地dns服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个ip地址映射,完成域名解析,此解析不具有权威性。

如果本地dns服务器本地区域文件与缓存解析都失效,则根据本地dns服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地dns就把请求发至“根dns服务器”,“根dns服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个ip。本地dns服务器收到ip信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级dns服务器地址(qq.com)给本地dns服务器。当本地dns服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

如果用的是转发模式,此dns服务器就会把请求转发至上一级dns服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根dns或把转请求转至上上级,以此循环。不管是本地dns服务器用是是转发,还是根提示,最后都是把结果返回给本地dns服务器,由此dns服务器再返回给客户机。

通过上面的步骤,我们最后获取的是ip地址,也就是浏览器最后发起请求的时候是基于ip来和服务器做信息交互的。

http协议是web工作的核心,所以要了解清楚web的工作方式就需要详细的了解清楚http是怎么样工作的。

http是一种让web服务器与浏览器(客户端)通过internet发送与接收数据的协议,它建立在tcp协议之上,一般采用tcp的80端口。它是一个请求、响应协议--客户端发出一个请求,服务器响应这个请求。在http中,客户端总是通过建立一个连接与发送一个http请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回调连接。客户端与服务器端都可以提前中断一个连接。例如,当浏览器下载一个文件时,你可以通过点击“停止”键来中断文件的下载,关闭与服务器的http连接。

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求是否来自同一个客户端。为了解决这个问题,web程序引入了cookie机制来维护连接的可持续状态。

http协议是建立在tcp协议之上的,因此tcp攻击一样会影响http的通讯,例如比较常见的一些攻击:synflood是当前最流行的dos(拒绝服务攻击)与ddos(分布式拒绝服务攻击)的方式之一,这是一种利用tcp协议缺陷,发送大量伪造的tcp连接请求,从而使得被攻击方资源耗尽(cpu满负荷或内存不足)的攻击方式。

我们先来看看request包的结构,request包分为3部分,第一部分叫requestline(请求行),第二部分叫requestheader(请求头),第三部分是body(主体)。header和body之间有个空行,请求包的例子所示:

get/domains/example/http/1.1//请求行:请求方法请求urihttp协议/协议版本host:www.iana.org//服务端的主机名user-agent:mozilla/5.0(windowsnt6.1)applewebkit/537.4(khtml,likegecko)chrome/22.0.1229.94safari/537.4//浏览器信息accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8//客户端能接收的mineaccept-encoding:gzip,deflate,sdch//是否支持流压缩accept-charset:utf-8,*;q=0.5//客户端字符编码集//空行,用于分割请求头和消息体//消息体,请求资源参数,例如post传递的参数

http协议定义了很多与服务器交互的请求方法,最基本的有4种,分别是get,post,put,delete。一个url地址用于描述一个网络上的资源,而http中的get,post,put,delete就对应着对这个资源的查,增,改,删4个操作。我们最常见的就是get和post了。get一般用于获取/查询资源信息,而post一般用于更新资源信息。

通过fiddler抓包可以看到如下请求信息:

上图:fiddler抓取的get信息

上图:fiddler抓取的post信息

我们看看get和post的区别:

我们再来看看http的response包,他的结构如下:

http/1.1200ok//状态行server:nginx/1.0.8//服务器使用的web软件名及版本date:date:tue,30oct201204:14:25gmt//发送时间content-type:text/html//服务器发送信息的类型transfer-encoding:chunked//表示发送http包是分段发的connection:keep-alive//保持连接状态content-length:90//主体内容长度//空行用来分割消息头和主体

response包中的第一行叫做状态行,由http协议版本号,状态码,状态消息三部分组成。

状态码用来告诉http客户端,http服务器是否产生了预期的response。http/1.1协议中定义了5类状态码,状态码由三位数字组成,第一个数字定义了响应的类别

我们看下面这个图展示了详细的返回信息,左边可以看到有很多的资源返回码,200是常用的,表示正常信息,302表示跳转。responseheader里面展示了详细的信息。

上图:访问一次网站的全部请求信息

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。

http是一个无状态的面向连接的协议,无状态不代表http不能保持tcp连接,更不能代表http使用的是udp协议(面对无连接)。

从http/1.1起,默认都开启了keep-alive保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输http数据的tcp连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的tcp连接。

上一篇: cname和CDN
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服