B/S网络架构

带来的好处:

  1.客户端使用同一的浏览器。 --浏览器的交互特性使其使用起来非常简便

  2.服务器基于统一的http。  --简化、规范开发模式,大大节省开发成本.如tomcat nginx这些服务器可以直接拿来使用

1.1 B/S网络架构概述

    从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,HTTP采用无状态的短连接的通信方式(一次请求就完成一次数据交互、对应一个业务逻辑,然后此次通信断开)。这种方式是为了能够服务更多的用户,因为当前互联网应用每天都会处理上亿的用户请求。

  固定不变的原则

  a.互联网上所有的资源都要用一个URL来表示。

  b.必须基于HTTP与服务端教书。

  c.数据展示必须在浏览器中进行。

1.2 如何发起一个请求 

步骤:1)浏览器在建立Socket连接之前,先将URL的域名DNS解析出IP地址

   2)根据IP和默认80端口与远程服务器建立Socket连接

   3)浏览器根据URL组装成一个get类型的HTTP请求头,通过outputstream.write发送到目标服务器,服务器等待inputstream.read返回数据

   4)最后断开连接

1.3 HTTP解析

  B/S网络架构的核心是HTTP,要理解HTTP,最重要的就是要熟悉HTTP中的HTTP Header,HTTP Header控制着互联网成千上万用户的数据传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。

常见的HTTP请求头
请求头 说明
Accept-Charset 用于指定客户端接受的字符集
Accept-Encoding   用于指定可接受的内容编码,如Accept-Encoding:gzip.deflate
Accept-Language   用于指定一种自然语言,如Accept-Language:zh-cn
Host 用于指定被请求资源的Internet主机和端口号,如Host:www.taobao.com
User_Agent 客户端将它的操作系统、浏览器和其他属性告诉服务器
Connection 当前连接是否保持,如Connection:Keep-Alive
常见的HTTP响应头
响应头 说明
Server 使用的服务器名称,如Server:Apache/1.3.6
Content-Type  用来指明发送给接收者的实体正文的媒体类型,如Content-Type:text/html;charset=GBK
Content-Encoding   与请求报头Accept-Encoding对应,告诉服务器采用的是什么压缩编码
Content-Language 描述了资源所用的自然语言,与Accept-Language对应
Content-Length 指明实体正文的长度,用以字节方式存储的十进制数字来表示
Keep-Alive 保持连接的时间,如Keep-Alive:timeout=5,max=120

  a.浏览器缓存

  在浏览(测试)网页的时候发现有异常的情况下,通常考虑的是不是浏览器做了缓存,所以一般的做法是按Ctrl+F5组合件重新请求一次这个页面(组合刷新)。

当使用Ctrl+F5刷新一个页面的时候,在HTTP的请求头中会增加一些请求头(Pragma  no-cache,Cache-Control no-cache),它告诉服务端我们要获取最新的数据而不是缓存。

1.4 DNS域名解析

  DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。

  域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。

  其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。

  域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。

在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。

 a. DNS域名解析过程

  当用户在浏览器中输入域名并按下回车键后,

  1.浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。(有缓存大小,缓存时间的限制,域名缓存时间由TTL属性设置)

  2.如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。

  3.操作系统会把这个域名发送到LDNS,也就是本地区的域名服务器(联通、电信、学校)。它们性能都会很好,一般会缓存域名解析结果。

  4.如果LDNS任然没有命中,那么就直接到Root Server 根域名服务器请求解析。

  5.根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com,.cn,.org等

  6.本地域名服务器再向上一步返回的gTLD服务器发送请求

  7.接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址。(比如 你在阿里云上买的域名服务器地址)

  8.NameServer域名服务器会查新存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器

  9.返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL控制。   TTL Time to live

  10.把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

 b.清除缓存的域名

  DNS域名解析后会缓存解析结果,其中主要在两个地方缓存结果,一个是Local DNS Server,另外一个是用户的本地机器。

  第一个很难人工介入清除,第二个可以使用如下方式清除:

Windows下 在cmd命令行模式中执行 ipconfig/flushdns命令来刷新缓存

Linux下可以通过/etc/init.d/nscd restart来清除缓存

  重启依然是解决很多问题的第一选择

  JAVA应用中JVM也会缓存DNS的解析结果,我不理解这个,请大神补充。。

C.几种域名解析方式

  A记录,A代表的是Address,用来指定域名对应的IP地址。A记录可以将多个域名解析到一个IP地址,但不能将一个域名解析到多个IP地址。

  MX记录,表示的是Mail Exchange,就是将某个域名下的邮件服务器指向自己的Mail Server。

  CNAME记录,全称是Canonical Name 别名解析。可以为一个域名设置一个或多个别名。

  NS记录,为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器去解析。

  TXT记录,为某个主机名或域名设置说明。

1.5 CDN工作机制

CDN(内容分布网络)=镜像+缓存+整体负载均衡

相当于1.4步骤7)后增加一步:Name Server域名服务器把它重新解析到另一个域名,而这个域名最终被指向CDN全局中的DNS负载均衡服务器,再由这个GTM判断是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。

1.5.2 负载均衡

  负载均衡就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等。

  

    ---------参考自《深入分析Jav Web技术内幕》

深入Web请求过程的更多相关文章

  1. Http协议简单解析及web请求过程

    HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. 基于HTTP协议的客户端/服务器请求响应机制的信息交换过程包含下面几个步骤: 1)    ...

  2. 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程

    第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...

  3. Web请求过程总结

    Web请求过程总结 1.CND架构图 图片来源:深入分析JavaWeb技术内幕(许令波著) 2.发起HTTP请求 发起一个HTTP请求就是浏览器建立socket通信的过程,HttpClient开源的通 ...

  4. 爬取百度页面代码写入到文件+web请求过程解析

    一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...

  5. web请求过程-学习使人快乐1

    智齿离开我10个小时了,现在除了书啥都不能啃········呜呜呜~     ~~~~~~~~~~~~~~~~~~~想滑滑梯~~~~~~~~~~~~~~~~~~~ 网络请求过程 web请求大多使用B/ ...

  6. 1 深入Web请求过程

    1.1 B/S网络架构概述 B/S 网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程 序采用的长连接的交互模式不同,HTTP采用无状态的短连接 ...

  7. [Web] Web请求过程之一:HTTP

    请求过程: 1.用户在浏览器输入 www.sdjtu.edu.cn 这个URL. 2.浏览器请求 DNS 服务器将这个 URL 解析成对应的 IP 地址. 3.浏览器向 IP 地址对应的这个服务器发起 ...

  8. WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)

    概述 发起一个http请求的过程就是建立一个socket通信的过程. 我们可以模仿浏览器发起http请求,譬如用httpclient工具包,curl命令等方式. curl "http://w ...

  9. 【深入分析Java Web技术内幕】1、深入Web请求过程知识点

    如何发起一个请求 发起一盒HTTP请求的过程就是建立一个Socket通信的过程! 既然发起一个HTTP的本质就是建立一个Socket连接,那么我们完全可以模拟浏览器来发起HTTP请求,这很好实现,如H ...

随机推荐

  1. ABP 学习汇总

    本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所用到的一些新技 ...

  2. JavaWeb从0开始学(一)-----搭建第一个Web应用程序与JSP工作原理

    以往学习的时候大多是看完书或者看完视频,动手实践一下就OK了.然而过了一段时间我发现东西都忘差不多了,需要复习才能重新掌握.现在开始学习JavaWeb了,我将在这里记录自己的学习的一点一滴,不仅便于自 ...

  3. Java基础之数据类型和转换

    一.常见的数据类型分类 1.java中基本数据类型分为三大类,即布尔类型,字符型,数值型.其中数值型又分为整型和浮点型.引用数据类型分为类,接口,数组,枚举,注解.具体如下: 注:一个字节 = 8位 ...

  4. Python学习路线图

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 Python学习路线图你可以通过百度云盘下载观看对应的视频 链接: http://pan.baidu.com/s/1c2zLllA ...

  5. 3631: [JLOI2014]松鼠的新家

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 707  Solved: 342[Submit][Statu ...

  6. 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队

    3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 129  Solv ...

  7. requireJS的配置心得

    1.html页面中如果同时存在data-main和require()和配置(config中的baseUrl),那么定义根路径 baseUrl > data-main > index.htm ...

  8. python 机器学习 决策树

    决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归. 优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的 ...

  9. 优雅的使用sublime写lua~ sublime lua相关必装插件推荐~~

    缘起 lua脚本语言虽好,代码写得飞快,可是写错了调试起来却很困难,lua使用者经常容易犯得一个错误是--写错变量名了,if end 嵌套太多没匹配~,多打了一个逗号, 假设定义了一个变量 local ...

  10. 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考

    在ORACLE中,我们可以通过file_id(file#)与block_id(block#)去定位一个数据库对象(object).例如,我们在10046生成的trace文件中file#=4 block ...