深入Web请求过程
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控制着互联网成千上万用户的数据传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。
| 请求头 | 说明 |
| 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 |
| 响应头 | 说明 |
| 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请求过程的更多相关文章
- Http协议简单解析及web请求过程
HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. 基于HTTP协议的客户端/服务器请求响应机制的信息交换过程包含下面几个步骤: 1) ...
- 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程
第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...
- Web请求过程总结
Web请求过程总结 1.CND架构图 图片来源:深入分析JavaWeb技术内幕(许令波著) 2.发起HTTP请求 发起一个HTTP请求就是浏览器建立socket通信的过程,HttpClient开源的通 ...
- 爬取百度页面代码写入到文件+web请求过程解析
一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...
- web请求过程-学习使人快乐1
智齿离开我10个小时了,现在除了书啥都不能啃········呜呜呜~ ~~~~~~~~~~~~~~~~~~~想滑滑梯~~~~~~~~~~~~~~~~~~~ 网络请求过程 web请求大多使用B/ ...
- 1 深入Web请求过程
1.1 B/S网络架构概述 B/S 网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程 序采用的长连接的交互模式不同,HTTP采用无状态的短连接 ...
- [Web] Web请求过程之一:HTTP
请求过程: 1.用户在浏览器输入 www.sdjtu.edu.cn 这个URL. 2.浏览器请求 DNS 服务器将这个 URL 解析成对应的 IP 地址. 3.浏览器向 IP 地址对应的这个服务器发起 ...
- WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)
概述 发起一个http请求的过程就是建立一个socket通信的过程. 我们可以模仿浏览器发起http请求,譬如用httpclient工具包,curl命令等方式. curl "http://w ...
- 【深入分析Java Web技术内幕】1、深入Web请求过程知识点
如何发起一个请求 发起一盒HTTP请求的过程就是建立一个Socket通信的过程! 既然发起一个HTTP的本质就是建立一个Socket连接,那么我们完全可以模拟浏览器来发起HTTP请求,这很好实现,如H ...
随机推荐
- Docker私有仓库--自签名方式
为了能集中管理我们创建好的镜像,方便部署服务,我们会创建私有的Docker仓库.通读了一遍官方文档,Docker为了确保安全使用TLS,需要CA认证,认证时间长的要钱啊,免费过期时间太短,还是用自签名 ...
- postman传json串,以及postman官方文档
最近在调试接口遇到一个问题.就是post接口传的body是一个json串. 刚开始还不知道,百度了一下才知道,其实很简单,就是在raw里面选择json.我的天如此简单的内容,而且支持html. 于是读 ...
- SmartRoute之大规模消息转发集群实现
消息转发的应用场景在现实中的应用非常普遍,我们常用的IM工具也是其中之一:现有很多云平台也提供了这种基础服务,可以让APP更容易集成相关功能而不必投入相应的开发成本.对于实现这样一个简单功能并不复杂, ...
- vSphere在RedHat6.0上搭建Oracle 11g R2 RAC环境
一.前期准备工作 1.1 为方便操作,装完系统后我们先安装Vmware Tools: 1.1.1.安装工具 在VMware的菜单栏上选择"虚拟机/安装虚拟机工具(VM/Install VMw ...
- Selenium 使用css selector (资源来源于网络)
Selenium - CSS Selector 昨天我练习了用CSS(即层叠样式表Cascading Stylesheet) Selector来定位(locate)页面上的元素(Elements).S ...
- 8个超炫酷的jQuery相册插件欣赏
在网页中,相册应用十分常见,如果你经常逛一些社交网站,那么你应该会注意到很多各式各样的网页相册应用.今天我们要来分享一些最新收集的jQuery相册插件,这些精美的jQuery相册插件可以帮助你快速搭建 ...
- 3212: Pku3468 A Simple Problem with Integers
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1053 So ...
- .net Core 1.0.1 下的Web框架的的搭建过程step by step
环境:ubuntu+VScode 数据库:mysql ,ORM框架:chloe 官网 看完本篇文章你能学会 在Vscode下创建项目,一些基础的命令 ,以及得到一个配置文件的简单读取实例 1,在VS ...
- ASP.NET Core MVC 源码学习:MVC 启动流程详解
前言 在 上一篇 文章中,我们学习了 ASP.NET Core MVC 的路由模块,那么在本篇文章中,主要是对 ASP.NET Core MVC 启动流程的一个学习. ASP.NET Core 是新一 ...
- 【笔记】归纳js getcomputedStyle, currentStyle 以及其相关用法
好吧,鉴于前端则个行业知识宽度广而深,早期看过高程介绍过的获取元素计算后的最终样式(浏览器显示的最终样式)的方法现在也忘得七七八八了 于是百度了一下,看了一下大神张鑫旭的博客,这里写个随笔记录一下 ...