深入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 ...
随机推荐
- ABP 学习汇总
本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所用到的一些新技 ...
- JavaWeb从0开始学(一)-----搭建第一个Web应用程序与JSP工作原理
以往学习的时候大多是看完书或者看完视频,动手实践一下就OK了.然而过了一段时间我发现东西都忘差不多了,需要复习才能重新掌握.现在开始学习JavaWeb了,我将在这里记录自己的学习的一点一滴,不仅便于自 ...
- Java基础之数据类型和转换
一.常见的数据类型分类 1.java中基本数据类型分为三大类,即布尔类型,字符型,数值型.其中数值型又分为整型和浮点型.引用数据类型分为类,接口,数组,枚举,注解.具体如下: 注:一个字节 = 8位 ...
- Python学习路线图
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 Python学习路线图你可以通过百度云盘下载观看对应的视频 链接: http://pan.baidu.com/s/1c2zLllA ...
- 3631: [JLOI2014]松鼠的新家
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 707 Solved: 342[Submit][Statu ...
- 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 129 Solv ...
- requireJS的配置心得
1.html页面中如果同时存在data-main和require()和配置(config中的baseUrl),那么定义根路径 baseUrl > data-main > index.htm ...
- python 机器学习 决策树
决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归. 优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的 ...
- 优雅的使用sublime写lua~ sublime lua相关必装插件推荐~~
缘起 lua脚本语言虽好,代码写得飞快,可是写错了调试起来却很困难,lua使用者经常容易犯得一个错误是--写错变量名了,if end 嵌套太多没匹配~,多打了一个逗号, 假设定义了一个变量 local ...
- 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考
在ORACLE中,我们可以通过file_id(file#)与block_id(block#)去定位一个数据库对象(object).例如,我们在10046生成的trace文件中file#=4 block ...