深入web的请求过程
一、深入web的请求过程
1.1、B/S网络架构概述
· 从前端到后端,都基于应用层协议HTTP来交互数据。一个请求就对应了一个操作,完成操作之后就断开了连接。基于这样的特点可以用来满足海量的用户的操作。这样的连接叫做短链接。
· 在浏览器中输入了一个链接,会发生的响应的步骤:
1、请求DNS将域名解析成相应的IP地址
2、通过IP找到对应的服务器
3、向这个服务器发起get请求
4、这个服务器返回默认的资源给用户使用的浏览器
·互联网上所有的资源都有一个URL。发布一个服务或者是一个资源道互联网上,一个自己的URL可以使网络上的用户访问到自己的资源或者是服务。
·必须基于HTTP与服务端交互。
·数据展示在浏览器中进行。获取数据之后,在浏览器上才能恢复出它原来的样子。
1.2、发起HTTP请求
·在网页中输入了一个URL然后按下回车键,就是发起了一个HTTP请求。
·不借助浏览器建立一个HTTP连接和建立一个Socket连接,然后写入的二进制数据必须符合HTTP的要求。
1、根据URL解析出的IP地址,和默认的80端口和远方的服务器建立Socket连接。
2、浏览器根据这个URL组装成一个get类型的HTTP请求头
3、通过outputStream.write发送到目标服务器,等待inputStream.read返回数据。
·发起一个HTTP请求,本质上就是建立一个Socket连接。
·HttpClient就是Java中处理HTTP请求的一个工具包。
有一个使用HttpClient的方法结构,在书本的 page.5 。
1.3、HTTP解析
·HTTP Header 掌握着互联网上成千上万的用户的数据的传输、用户浏览器的渲染行为、服务器的执行逻辑。在书本的 page.7 。
1.3.1使用浏览器自带的调试工具查看 HttpHeader
1.3.2浏览器的缓存机制
·浏览器会缓存一些之前打开这个页面的信息,在下一次打开的时候,可能会使用一些缓存的文件信息。 ·在使用F5刷新这个页面的时候,会在请求头中,加入一些信息,向服务器申明,需要最新的文件信息,而不是使用缓存的文件。
·追加的请求头是:Cache-Control:no-cache。
关于缓存的一些请求头:
1、Cache-Control:缓存控制,用来设置是否被缓存,以及怎么缓存。
2、Expires:缓存失效的时间,使用的是格林威治时间(GMT)。
3、Last-Modified/Etag:服务器上的资源最后一次更改的时间(GMT)。
4、If-Medified-Since:缓存的资源是不是最新的,如果是最新的,那么服务器就会返回一个304状态码,就不会返回新的数据。
5、Etag:使用编号来确定资源是不是新的。
1.4、DNS域名解析
1.4.1解析DNS域名的过程
域名解析,将域名解析成相应的IP地址
1、输入一个域名,浏览器会检查缓存中是否有这个域名的缓存。如果有,解析结束。
# 这个方法存在的弊端是缓存的时间不好掌握,使用TTL属性可以控制域名缓存的时间。
# 如果时间过长,域名和IP的变动,就会将用户带到错误的位置,如果太短会占用大量的解析时间。
2、如果浏览器的缓存中没有,就会在操作系统的缓存中寻找关于这个域名的信息。如果找到了,解析结束。
# 在Windows中,在C:\Windows\System32\drivers\etc\hosts文件中修改一个域名对应的IP。
# 也就是说可以将任意一个域名,通过对这个文件的修改,牵引到任意的IP地址。
3、如果上面的不走无法解决就会在真正的域名解析服务器中解析了。
# 第一个DNS解析的是:本地区域名服务器(LocalDNS)。这个域名解析服务器承担了大部分的域名解析工作。
# 它会缓存域名解析结果。
4、如果LDNS没有解决,就会到Root Server域名服务器,它会返回一个所查询的主域名服务器地址。
5、根据主服务器地址,会到全球只有13台的猪域名解析服务器(gTLD Server)进行解析。它们是全球顶级域名解析服务器。
6、LDNS向gTLD发送请求。
7、接受请求的gTLD服务器查找并返回这个域名对应的Name Server服务器地址。
#(可以理解为Name Server从gTLD中接受信息,解析出IP地址)
8、Name Server查找这个域名的IP,返回给Local DNS。
9、Local DNS 根据TTL值,缓存这个域名和IP的对应关系。
10、返回这个IP和TTL值给用户,并根据TTL值缓存在本地。
1.4.2跟踪域名解析的过程 | 在书本的 page.15 。
1.4.3清除缓存的域名
在本地(浏览器、操作系统)和LDNS会缓存域名和IP对应关系。
在书本的 page.18 。
1.4.4几种域名的解析方式
主要分为A记录、MX记录、CNAME记录、NS记录、TXT记录。
A记录:能将多个域名解析到桶一个IP地址。
MX记录:将某个域名下的邮件服务器解析到自己的Mail Server。
CNAME记录:为一个域名设置一个或者多个别名。
1.5、CDN的工作机制
CDN就是分布式网络(Content Delivery Network)。
CDN以缓存网站中的静态数据为主,例如CSS、JS、图片和HTML等数据。用户从主站服务器请求到动态内容了之后,再到CND中获取静态数据。从而加速网站的加载速度。
CDN要达到以下的目标:可扩展性、安全性、可靠性。
1.5.1 CDN的架构
首先向Local DNS服务器发起请求,经过迭代解析,然后回到这个域名的注册服务器去解析,在注册服务器,通过CNAME得到一个另外的域名。这个域名指向CDN中的均衡负载服务器,然后访问最近的CDN节点。
1.5.2均衡负载
均衡负载就是对工作量进行平衡,分摊到多个单元上执行,共同完成一个任务。提高了服务器的响应速度和利用率,解决了网络拥塞问题。
均衡负载架构的种类有:链路负载均衡、集群负载均衡、操作系统负载均衡。
链路负载均衡:负载均衡是指使用DNS的解析来实现的,用户最终访问哪个Web Server服务器由DNS Server来控制。
集群负载均衡又分为硬件负载均衡和软件负载均衡,其中
硬件负载均衡:使用使用设备,这样的设备很昂贵。
软件负载均衡:节约成本,但是一次访问请求要经过多次代理服务器,增加了网络负担。
操作系统负载均衡:利用操作系统级别的中断来实现负载均衡。
1.6、CDN的动态加速
CDN的动态加速:在CDN解析的过程中,通过动态的链路探测,来寻找最好的回源路径,通过调度DNS在将所有的请求在这条路径上回源。从而加快用户的访问效率。
深入web的请求过程的更多相关文章
- Http协议简单解析及web请求过程
HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. 基于HTTP协议的客户端/服务器请求响应机制的信息交换过程包含下面几个步骤: 1) ...
- web应用程序servlet的映射名称的规则及请求过程
首先用MyEclipse创建一个web Project(工程名起为TestServletProject),新建一个Servlet(这里servlet的名字起TestServlet),将请求的servl ...
- web请求过程-学习使人快乐1
智齿离开我10个小时了,现在除了书啥都不能啃········呜呜呜~ ~~~~~~~~~~~~~~~~~~~想滑滑梯~~~~~~~~~~~~~~~~~~~ 网络请求过程 web请求大多使用B/ ...
- WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)
概述 发起一个http请求的过程就是建立一个socket通信的过程. 我们可以模仿浏览器发起http请求,譬如用httpclient工具包,curl命令等方式. curl "http://w ...
- 《深入分析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开源的通 ...
- 1 深入Web请求过程
1.1 B/S网络架构概述 B/S 网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程 序采用的长连接的交互模式不同,HTTP采用无状态的短连接 ...
- 爬取百度页面代码写入到文件+web请求过程解析
一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...
- [Web] Web请求过程之一:HTTP
请求过程: 1.用户在浏览器输入 www.sdjtu.edu.cn 这个URL. 2.浏览器请求 DNS 服务器将这个 URL 解析成对应的 IP 地址. 3.浏览器向 IP 地址对应的这个服务器发起 ...
随机推荐
- 在html代码中js的script标签建议放在那里?
今天编写了一个简单的js代码,F12有错误,然后发现是<script>放的位置有问题.之前在我的印象当中,说的是这个标签放在哪里都可以,然而...并不是这样的,例如我现在练习的这个代码,写 ...
- Git + Docker + Jenkins自动化部署web到Linux(Centos)
1.把代码托管到Github上 2.安装Docker 3.安装Jenkins 4.在项目中编写Dockerfile.publish.sh (1)Dockerfile内容 # 基于dotnet基础环境构 ...
- pyhton崩溃的第六天,又有新成员
首先在今天的刚刚开始,补充一下上次两个成员的一些特有的方法,一个是列表,一个是字典,首先列表里面多了一个反转的方法,名叫reverse,简单就是把列表中的123变成了321,还有一个方法是sort,是 ...
- 转载:img是什么元素?置换元素?
转载: https://blog.csdn.net/kingliguo/article/details/52643594 img是什么元素? 应是行内元素,判断一个元素是行内元素,还是块元素,无非就是 ...
- JAVA 调用exe程序执行对应的文件 (个人用于编译Java文件)
需求: 需要利用Java程序,来调用计算机本身的黑窗口,来将特定的Java文件编译成对应的字节码文件. 实现思路: 通过调用Java的Runtime类,每个 Java 应用程序都有一个 Runtime ...
- IDEA编译器的常用快捷键
今天想简单分享一下IDEA编译器的常用快捷键 1. -----------自动代码-------- 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boi ...
- [转帖]Windows 上面IE的历史
微软向Chrome举手投降 这么多代IE你都用过吗 2019年04月20日 18:48 4030 次阅读 稿源:太平洋电脑网 2 条评论 这个清明假节,很多人过得波澜不惊,然而一个曾被万千网民挂在口中 ...
- 初识flink
接触flink已经有3个月了,第一次接触flink是从极客时间上的大沙的演讲中了解的. 最近半年对大数据已经有了一定的入门,一方面因为工作中会用到hive,另外工作已经快5年了,一直从事java后台开 ...
- Oracle查看表实际占用空间和实际行数
select t.table_name,t.num_rows from user_tables t ORDER BY NUM_ROWS DESC;//实际行数 analyze table emp co ...
- macbook 入门
前面的话 第一次使用 Mac 之前,需要改变一些原有思维,不应该使用 Windows 的思维习惯去使用 Mac,Mac 会节省系统维护.清理杀毒.升级驱动等操作的时间,让我们可以专注做真正重要的事情, ...