• 深入Web请求过程


    B/S网络架构概述

    B/S网络架构基于统一的应用层协议HTTP协议交互数据,与传统的C/S网络应用程序使用长连接交互模式是不同,HTTP采用无状态的短连接的通信方式,通常一次请求就完成一次数据交互,然后就断开连接。采用这种方式是为了能够同时服务更多的用户,因为当前互联网每天都会处理上亿的用户,不可能每个用户访问一次后就一直保持这个连接。

    一些固定不变的原则:

    • 互联网上所有的资源都用一个URL(统一资源定位符)来表示
    • 必须基于HTTP与服务器交互
    • 数据展示必须在浏览器中进行

    如何发起一个请求

    如何发起一个HTTP请求和如何建立一个Socket连接区别不大,只不过写入的二进制字节数据要符合HTTP规范。具体步骤如下:

    1. 浏览器在建立Socket连接之前,必须根据地址栏输入的URL的域名解析出IP地址
    2. 根据IP地址+默认的80端口和服务器建立Socket连接
    3. 浏览器根据这个URL组装一个get类型的HTTP请求,通过outputStream.write发送到服务器
    4. 服务器等待inputStream.read读取请求并响应数据
    5. 响应完毕则断开连接

    在Java中可以通过HttpClientOkHttp等处理的HTTP的工具包模拟浏览器请求;在Linux中可以通过curl命令,通过curl+URL就可以简单地发起一个HTTP请求

    DNS域名解析

    DNS域名解析的目的就是将域名解析出对应的IP地址,解析过程如下:

    1. 浏览器会先检查自身缓存中有没有域名对应的IP地址,同时浏览器缓存域名也是有限制的,不仅浏览器缓存的大小有限制,而且缓存的时间也有限制 (域名被缓存的时间限制可以通过TTL属性来设置)
    2. 如果浏览器缓存中没有,浏览器会检查操作系统缓存是否有这个域名对应的DNS解析结果,即host文件。在Windows中在C:WindowsSystem32driversetchosts文件来设置,可以将任何域名解析到任何IP地址。在Linux中这个配置文件是/etc/hosts。同样的缓存的时间受这个域名失效时间和缓存空间大小控制。以上两步属于在本机解析,还没涉及到域名服务器,如果本机解析不到就需要请求域名服务器来解析这个域名了
    3. 在我们的网络配置中都会有"DNS服务器地址"这一项,当上述两个过程无法解析时,操作系统会把这个域名发送到设置的这些地址上,即LDNS(Local DNS Server 本地域名服务器),你所属区域的电信或联通,或者是学校,通常不会很远。在Windows通过ipconfig可以查看LDNS的IP地址,在Linux通过cat /etc/resolv.conf查看,如果没有可能看到有可能使用的是自动获取DNS的方式。这个专门的域名服务器性能都会很好,一般缓存空间不是影响域名失效的主要因素,而是受失效时间控制。LDNS主要承担了域名解析工作,大部分解析到这里都已经完成了
    4. 如果LDNS没有命中,就直接到Root Server( . 根域名)域名服务器请求解析
    5. 根据域名服务器返回给本地域名服务器(LDNS)一个说查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com .cn .org等
    6. 本地域名服务器(LDNS)再向上一部返回的gTLD服务器发送请求
    7. 接受请求的gTLD服务器查找并返回此域名对应的Name Server服务器地址,这个Name Server就是该域名注册的域名服务器地址
    8. Name Server域名服务器查询存储的域名和IP地址映射表,得到对应IP记录,连同一个TTL值返回给LDNS域名服务器
    9. LDNS域名服务器缓存域名和IP对应关系,缓存时间由TTL值控制
    10. 把解析结果返回给用户(操作系统,浏览器),用户根据TTL值缓存在本地中,域名解析过程结束

    CDN网络介绍

    CDN也就是内容分布网络,是构建在现有Internet上的先进的流量分配网络。将网站的内容发布到最接近用户的网络,使用户可以就近取得所需资源,提高访问网站的响应速度

    目前CDN都是以缓存网站中的静态数据为主,如CSS,JS,图片和静态页面等数据

    CDN = 资源镜像(Mirror)+ 缓存(Cache)+ 整体负载均衡(GSLB)

  • 相关阅读:
    sass安装与使用
    前端兼容性问题
    springboot项目数据库错误记录
    C#实现微信聊天对话框
    关于html的多行匹配,正则re.S的使用(爬取豆瓣电影短评)
    判断网页能否打开?python
    利用python爬取点小图片,满足私欲(爬虫)
    ajax加载时的进度条
    java 发送微信客服消息
    Fastjson Mysql JDBC 反序列化
  • 原文地址:https://www.cnblogs.com/lz2017/p/13764198.html
Copyright © 2020-2023  润新知