• 网页请求的完整过程


    众所周知,打开一个网页的过程中,浏览器会因页面上的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攻击。

     





     

     

  • 相关阅读:
    一只小小麻雀——基于语法分析工具Gold开发的加减法解释器
    儿子和女儿——解释器和编译器的区别与联系
    商用密码企业调研(必做)
    create dict in python
    sequence in python
    Cpp pointers
    sorted: list sort in python
    the array.length() of C++
    string of Cpp
    srandom and random
  • 原文地址:https://www.cnblogs.com/yzwdcjs/p/14690095.html
Copyright © 2020-2023  润新知