zoukankan      html  css  js  c++  java
  • 输入网址背后发生的故事

    本篇体验当在浏览器地址栏中输入网址后发生的事情。参考了韩星Igor Ostrovsky的博文。

    一切从输入网址/域名开始:

    输入域名

      1、浏览器查找域名对应的IP地址

    实际上是查找DNS(Domain Name System的缩写,存储域名和IP地址映射的分布式数据库)的过程。查找DNS缓存的顺序为:

    1、在浏览器中查找DNS缓存:不同的浏览器缓存DNS的时间是不一样的,一般在1-30分钟时间。比如FireFox的默认DNS缓存时间是1分钟。
    2、在系统中查找DNS缓存。
    3、在路由器中查找DNS缓存。
    4、在ISP(网路提供商)的DNS缓存服务器中查找。
    5、如果以上都没有,ISP的DNS服务器开车从root域名服务器开始递归,即从顶级域名开始,再到二级域名、三级域名。

    如图:

    查找DNS缓存

    另外:
    ● 一个域名可能对应多个不同的IP,这个是由"Round-robin DNS"解决方案提供实现。
    ● 针对来自不同客户端的IP请求,"负载均衡器Load-balancer"可以把不同的IP请求动态分配到不到的服务器。
    ● 针对来自不同区域客户端的IP请求,"Geographic DNS"把一个域名与不同的IP映射起来,根据域名的区域,返回对应的IP。

      2、浏览器发送HTTP请求到服务器

    浏览器发送HTTP请求到服务器

    User-Agent:描述了浏览器信息。
    Accept:能接收的返回类型。
    Accept-Encoding:能接收的返回的编码类型。
    Accept-Language:能接收的返回语言。
    Connection: 要求服务端TCP打开以保持通讯。
    Cookie:针对该域名的cookie,以键值对存放,包括登录用户名、服务器分配给客户端的号码等。

    请求的类型:
    1、GET请求,把请求参数放在URL地址中:http://baidu.com/some.aspx?id=1。
    2、POST请求,用于提交表单数据,参数放在请求主体中。

      3、服务器返回永久重定向

    在浏览器地址栏输入:http://facebook.com/

    服务器返回永久重定向

    可见:
    请求的是:http://facebook.com/
    返回的是:http://www.facebook.com/
    Status Code是:301 Moved Permanently

    重定向后再请求,返回Status Code:200:

    重定向后再请求


    为什么需要重定向?
    处于对搜索引擎和缓存友好的考虑。

    有趣的是:
    当输入"http://baidu.com/"时
    Request URL自动变成了:http://www.baidu.com, 也没有出现重定向。

    百度没有重定向

      4、服务器处理请求

    服务器软件(比如IIS,Apache)工作原理:
    →接收HTTP请求。
    →搜寻哪个handler处理请求。

    什么是handler?
    读取请求中的一切信息,比如参数、缓存,再转换成HTML相应。 

    5、服务器返回HTML响应

    6、浏览器渲染HTML

    7、浏览器发送Ajax请求

    发送GET或POST请求到服务器,返回jsong, string, html, xml等。

  • 相关阅读:
    node-sass安装失败问题
    通过JS下载 or 唤起App
    获取地址栏参数
    JS获取浏览器可视区域的尺寸
    Pyhton2.x 和Python3.x
    导入一个AndroidStudio工程作为一个Library Module
    win10 右键菜单添加Git Hash Here
    CTRL-Space always toggles Chinese IME (Windows 7、10)
    DOM解析XML报错:Content is not allowed in prolog
    重复安装相同包名APK出现的问题。
  • 原文地址:https://www.cnblogs.com/darrenji/p/3591510.html
Copyright © 2011-2022 走看看