zoukankan      html  css  js  c++  java
  • 网页请求的完整过程

    众所周知,打开一个网页的过程中,浏览器会因页面上的css/js/image等静态资源会多次发起连接请求,所以我们暂且把这个网页加载过程分成两部分:

    html或者jsp/php/aspx 页面加载

    css/js/image等网页静态资源加载(假设使用CDN)(静态资源:非服务器动态运行生产的文件)

     

    步骤:

    1.DNS解析:当用户输入一个网址并按下回车键的时候,浏览器得到了一个域名。而在实际通信过程中,我们需要的是一个IP地址。因此我们需要先把域名转换成相应的IP地址,这个过程称作DNS解析。根据ip找到ip对应的服务器。

    1) 浏览器首先搜索浏览器自身缓存的DNS记录。

    或许很多人不知道,浏览器自身也带有一层DNS缓存。Chrome 缓存1000条DNS解析结果,缓存时间大概在一分钟左右。(Chrome浏览器通过输入:chrome://net-internals/#dns 打开DNS缓存页面)

    2) 如果浏览器缓存中没有找到需要的记录或记录已经过期,则搜索hosts文件和操作系统缓存。

    3) 如果在hosts文件和操作系统缓存中没有找到需要的记录或记录已经过期,则向域名解析服务器发送解析请求。

    4) 如果域名解析服务器也没有该域名的记录,则开始递归+迭代解析。

    5) 获取域名对应的IP后,一步步向上返回,直到返回给浏览器。

    2.建立TCP连接(三次握手)

    3.发起HTTP请求(如果资源就在本地浏览器缓存里,那就不需要发出请求到服务端,直接浏览器里获取)

    其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个网页的请求。

    4.nginx服务器收到请求,根据请求的文件后缀是html还是php来判断这是静态文件还是动态文件,静态文件直接返回html文件,动态文件会先交给php应用服务器(后端服务器)去处理,处理成静态html文件返回给浏览器,因为浏览器只能解析静态html文件。

    5.浏览器解析html的时候,会去加载很多静态文件:js/css/img等等,请求先发送到nginx上,通过修改nginx配置,location可以指定这些请求都转发到oss源站上。设置了cdn加速的话,在nginx上直接搭建cdn,nginx就是一个cdn节点服务器,第一次nginx上没有资源,会直接到oss获取,oss获取到资源返回给nginx节点服务器,同时在nginx上缓存一份静态资源,以后再次请求就可以直接到nginx上获取资源,不需要nginx转发请求,再到oss上获取资源。nginx在这里作为一个前端服务器,处理静态资源的。

    cdn不是服务器,cdn是内容分发网络,一种应用在服务器上的加速技术。cdn通过在网络各处放置节点服务器,所构成的在现有的互联网基础之上的一层智能虚拟网络。CDN系统能够实时根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息,将用户的请求重新导向离用户最近的服务器节点上。cdn是一种加速服务,收费的。原理是在各个地方部署服务器,把前端内容缓存到这些服务器中(第一次访问后)。

    什么是CDN?如果我在广州访问杭州的淘宝网,跨省的通信必然造成延迟。如果淘宝网能在广东建立一个服务器,静态资源我可以直接从就近的广东服务器获取,必然能提高整个网站的打开速度,这就是CDN。CDN叫内容分发网络,是依靠部署在各地的边缘服务器,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度。

    解析到js的时候,JavaScript 中调用 XMLHttpRequest 对象,通过 XMLHttpRequest 对象向服务器发送http请求,来请求数据,服务器使用 JSPPHPServlet,ASP.net 等与数据库交互,检索数据,服务器将 XML 数据或 JSON 数据发送到nginx服务器,再返回给客户端。浏览器渲染html模板和数据,最终显示出用户看到的画面。

     

     

    ps:跨域访问

    user访问服务器的页面A,页面A同时又要访问另一个网站B的某个资源。这就叫做跨域访问。会引起CSRF攻击。

     





     

     

  • 相关阅读:
    【leetcode】Search a 2D Matrix
    【leetcode】Minimum Path Sum
    LCD1602和LCD12864
    Keil建立第一个ARM工程的步骤
    Keil建立第一个C51工程的步骤
    STM32 GPIO寄存器 IDR ODR BSRR BRR
    STM32F10x_StdPeriph_Driver_3.5.0(中文版).chm的使用
    如何查看stm32固件库版本及MDK和keil uvision的关系
    stm32时钟系统
    stm32f103和s3c2440配置
  • 原文地址:https://www.cnblogs.com/yzwdcjs/p/14690095.html
Copyright © 2011-2022 走看看