一、深入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在将所有的请求在这条路径上回源。从而加快用户的访问效率。

转载于:https://www.cnblogs.com/zjxu97/p/10049455.html

深入web的请求过程相关推荐

  1. Web 页面请求过程

    1.DHCP 配置主机信息 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取. 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口68 的 U ...

  2. 深入理解WEB请求过程

    随着web2.0时代的到来,互联网的网络架构已经从传统的C/S架构转变成更加方便快捷的B/S架构,B/S架构大大简化了用户使用网络应用的难度,带来了以下两方面的好处: 1.客户端使用统一的浏览器.由于 ...

  3. web应用程序servlet的映射名称的规则及请求过程

    首先用MyEclipse创建一个web Project(工程名起为TestServletProject),新建一个Servlet(这里servlet的名字起TestServlet),将请求的servl ...

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

    WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发) 目录 WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发) 概述 HTTP解析 HTTP请求头 HTTP响应头 H ...

  5. 应用请求web服务器的过程详解

    我们在做渗透测试时,需要知道互联网中是如何处理客户端与服务器端之间的请求的.本文转载一篇文章详解介绍了一次web请求过程的处理. 我们要了解一下Internet中一台计算机访问Web服务器的全部过程, ...

  6. php web请求 过程,Web QQ 的请求交互过程

    获取安全参数 发送http GET请求: https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=5&a ...

  7. 深入分析Java Web技术内幕读书笔记(一)浅析Web请求过程

    随着Web技术的快速发展,互联网的网络架构已经从传统的C/S架构转变为B/S架构,B/S架构相较于传统的C/S架构,有诸多优点,例如:提供了统一的操作方式,简化了用户的学习成本:便捷的开发方式大大提高 ...

  8. golang 关闭制定名称的 tomcat_Tomcat原理详解及请求过程

    点击蓝字"程序员考拉"欢迎关注! Tomcat是一个JSP/Servlet容器.其作为Servlet容器,有三种工作模式:独立的Servlet容器.进程内的Servlet容器和进程 ...

  9. Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring?

    一.知史可以明鉴 我们学习技术的时代赶上了最好的时代,跳过了很多前人经常踩的坑,前人在踩坑的过程中总结了很多经验和教训,而新时代的我们只是继承了前人的经验和教训,而忽略了这些采坑的过程,以至于我们面对 ...

  10. 一次完整的http的请求过程与https的实现

    一次完整的http请求过程: (1)发起请求建立连接:  三次握手 接收请求或拒绝请求 (2)接受请求 来自网络的请求报文中对某资源的一次请求过程: 并发访问响应模型(Web I/O); 单进程I/O ...

最新文章

  1. 利用人工智能众包数据,加速药物发现
  2. 初级程序员常犯错误一览
  3. Win10 Microsoft Store 微软商店 Error 0x00000193 解决方法
  4. 经典递归——斐波那契数列,汉诺塔
  5. java学习笔记(七)数据库链接字符
  6. 22. Kotlin学习笔记 (一) 约定
  7. unity调整旋转需要传什么参数?参数在数学上叫做什么?_人脸识别背后,卷积神经网络的数学原理原来是这样的...
  8. 1002. 写出这个数 (20)
  9. php原生类,反序列化之PHP原生类的利用
  10. 1.4编程基础之逻辑表达式与条件分支 07 收集瓶盖赢大奖
  11. java 某点 旋转_java-如何围绕某个点旋转顶点?
  12. 虐哭无数人的烧脑刑侦科推理题,程序员一秒解
  13. VC 中一些控件的使用方法(TabControl, 工具栏)
  14. 用Python做一个无限弹窗
  15. 论文中et al.、etc.、e.g.、 i.e.的意思
  16. 河南公务员写古文辞职信:陡增酒量 武功尽废
  17. 移动网络安全之无线局域网安全
  18. 物联网项目开发编程语言一览
  19. Java——nefu
  20. 好的数据库面试题集合

热门文章

  1. vim中自动格式化代码
  2. 如果Google统治世界[组图]
  3. Eclipse—在Eclipse中如何发布创建的JavaWeb工程
  4. 30. 最小的K个数(C++版本)
  5. 23. 从上往下打印二叉树[层序遍历](C++版本)
  6. 47. 避免产生直写型(write-only)的代码
  7. 每天一道剑指offer-丑数
  8. 怎样把百度图片设置成传统翻页 瀑布流与传统翻页的转换
  9. Python基础知识笔记(一)
  10. java 泛型 basedao_java的SSH的baseDao,巧用泛型