美文网首页java web学习
web请求过程分析

web请求过程分析

作者: 丶time | 来源:发表于2018-05-02 22:06 被阅读0次

    web请求过程分析

    大致过程

    首先用户输入URL网址,会请求DNS对域名进行解析成相应的IP地址,然后根据IP地址,在互联网上寻找对应的服务器,向服务器发起一个get请求,服务器返回对应的数据资源。

    当然,服务器可能有很多台,负载均衡设备会平均分配所有用户的请求,请求的数据可能存储在分布式缓存中或是静态文件,或是数据库里。

    当数据返回浏览器,浏览器解析数据发现还有一些静态资源,则又会发起HTTP请求,这些请求很可能在CDN上,CDN服务器又会处理这个用户的请求。!


    image

    HTTP请求:

    HTTP请求头:

    请求头 说明
    Accept 浏览器可接受的MIME类型
    Accept-Charset 浏览器可接受的字符集
    Accept-Encoding 浏览器能够进行解码的数据编码方式
    Accept-Language 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
    Authorization 授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
    Connection 表示是否需要持久连接
    Content-Length 表示请求消息正文的长度
    Cookie 这是最重要的请求头信息之一
    From 请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它
    Host 初始URL中的主机和端口
    If-Modified-Since 只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答
    Pragma 指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝
    Referer 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
    User-Agent 浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用
    UA-Pixels,UA-Color,UA-OS,UA-CPU 由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型
    响应头 说明
    Allow 服务器支持哪些请求方法(如GET、POST等)
    Content-Encoding 文档的编码(Encode)方法
    Content-Length 表示内容长度
    Content-Type 表示后面的文档属于什么MIME类型
    Date 当前的GMT时间
    Expires 指明应该在什么时候认为文档已经过期,从而不再缓存它
    Last-Modified 文档的最后改动时间
    Location 表示客户应当到哪里去提取文档
    Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计

    常用状态码

    1**:请求收到,继续处理

    100——客户必须继续发出请求

    2**:操作成功收到,分析、接受

    200——交易成功

    3**:完成此请求必须进一步处理

    302——在其他地址发现了请求数据

    4**:请求包含一个错误语法或不能完成

    400——错误请求,如语法错误

    403——禁止访问

    404——没有发现文件、查询或URl

    5**:服务器执行一个完全有效请求失败

    500 - 内部服务器错误

    浏览器缓存机制

    cache control

    当刘拉起页面异常,通常可能是浏览器做了缓存。如果ctrl+F5重新请求页面,则请求到的是最新的页面。因为此时请求会增加Pragma:no-cache和Cache-Control :no-cache

    Expires

    浏览器在发出请求之前会检查这个字段,过期则会重新发起请求

    Last-Modefied

    表示最后修改时间,浏览器再次请求时在请求头上加上,询问当前缓存是否是最新的,是则不会传输新的数据。

    DNS域名解析

    步骤:(输入回车后)

    1. 浏览器检查缓存有没有域名对应的IP地址,如果IP没有发生变化,则直接访问成功。如果变化了则失败,因此缓存时间设置不能太长。
    2. 如果浏览器缓存中没有,则会查找操作系统缓存红是否有对应的解析结果。
    3. 如果还没有,操作系统把域名发送给LDNS服务器,该服务器一般都会缓存域名解析结果,缓存时间是受域名失效时间控制,缓存空间一般不是影响域名失效的主要因素。80%的域名解析在这里完成,LDNS承担了域名解析的主要工作。
    4. 如果还没有找到,就去ROOTServer域名服务器请求解析。
    5. 根域名服务器返回给本地域名服务器一个所查询主域名服务器地址(gTLD server)。gTLD是国际顶级域名服务器,全球只有13台。
    6. LDNS向gTLD服务器发送请求。
    7. gTLD查找并返回域名对应的Name Server域名服务器地址。
    8. Name Server根据映射表,得到IP记录,连同一个TTL值返回给DNS Server域名服务器。
    9. 返回该域名对应的IP地址和TTL值,LDNS缓存域名和IP,缓存时间由TTL控制。
    10. LDNS把结果返回给用户,用户根据TTL值缓存在本地缓存中。

    总结:

    浏览会先查找缓存,未找到则会查本地的DNS缓存和hosts文件,
    未找到则会调用DNS服务,将地址给本地解析服务器,解析域名,若未找到则会向上寻找,一直到到根域名服务器
    根域名服务器会顶级域名寻找顶级域名服务器,将该服务器IP发给本地DNS域名解析(根服务器在顶层,不会一层层向下寻找,向下找到一层就让本地DNS自己去找)
    例如:根域名服务器找到.com域服务器地址IP,将ip发送给我们的域名解析服务器,我们的服务器再向该ip地址询问,直到找到域名对应的IP地址

    几种域名解析方式

    • A记录,A代表的是Address,用来指定域名对应的IP地址。
    • MX记录,表示Mail Exchange,将域名下的邮件服务器指向自己的Mail Server
    • CNAME记录,Canonical Name(别名解析)。一个ip地址对应多个域名。
    • NS记录,为某个域名指定DNS解析服务器
      TXT记录,为某个主机名或域名设置说明

    CDN架构

    用户要访问某个静态文件(如CSS文件),假设这个文件域名是cdn.jianshu.com,那么首先要想LDNS发请求,经过迭代解析后会回到这域名的注册服务器去解析,这个DNS解析服务器通常会把它重新CNAME解析到另外一个域名,这个域名最终会指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配给访问用户最近的CDN节点。

    用户拿到DNS解析结果,用户去CDN节点访问静态文件,如果节点中所请求的文件不存在, 就会回到源站去获取这个文件,再返回给用户。

    负载均衡

    Load Balance:对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器。

    链路负载均衡

    通过DNS解析成不同的IP,用户根据IP来访问不同的目标服务器

    集群负载均衡

    • 硬件负载均衡
      一主一备,优点是性能非常好,但较为昂贵,访问量增大到极限时,不能进行动态扩容。
    • 软件负载均衡
      成本低,缺点请求要多次经过代理服务器,增加网络延时,如图,LVS和HAProxy对用户的HTTp请求中的URL或者Coolie来进行负载均衡,发送给指定访问的机器。

    操作系统负载均衡

    利用操作系统级别的软中断或者硬件中断达到负载均衡,如设置多队列网卡

    相关文章

      网友评论

        本文标题:web请求过程分析

        本文链接:https://www.haomeiwen.com/subject/aydhrftx.html