• 从输入URL到页面展现在用户面前,都发生了什么?


    总体分为这么几个过程:

    • DNS解析
    • TCP连接
    • 发送HTTp请求
    • 服务器处理并返回HTTP报文
    • 浏览器解析渲染页面
    • 连接结束

    具体过程
    1、DNS解析
    DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当输入www.baidu.com的时候,其实是要找对应的ip地址,DNS充当了翻译的角色,实现了网址到IP地址的转换。因为互联网上的每一台计算机的唯一标识是它的IP地址。

    解析过程:

    DNS解析是一个递归查询的过程。

    首先在本地域名服务器中查询IP地址,如果没有找到的情况下,本地域名服务器会向根域名服务器发送一个请求,如果根域名服务器也不存在该域名时,本地域名会向com顶级域名服务器发送一个请求,依次类推下去。直到最后本地域名服务器得到baidu的IP地址并把它缓存到本地,供下次查询使用。从上述过程中,可以看出网址的解析是一个从右向左的过程: com -> baidu.com -> www.baidu.com。但是你是否发现少了点什么,根域名服务器的解析过程呢?事实上,真正的网址是www.baidu.com.,并不是我多打了一个.,这个.对应的就是根域名服务器,默认情况下所有的网址的最后一位都是.,既然是默认情况下,为了方便用户,通常都会省略,浏览器在请求DNS的时候会自动加上,所有网址真正的解析过程为: . -> .com -> baidu.com. -> www.baidu.com.。

    2、TCP连接
    3、 HTTP请求
    其实这部分又可以称为前端工程师眼中的HTTP,它主要发生在客户端。发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。
    请求行

    格式如下:

    Method Request-URL HTTP-Version CRLF

    eg: GET index.html HTTP/1.1
    常用的方法有: GET, POST, PUT, DELETE, OPTIONS, HEAD。

    TODO:

    GET和POST有什么区别?
    请求报头

    请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息。
    PS: 客户端不一定特指浏览器,有时候也可使用Linux下的CURL命令以及HTTP客户端测试工具等。
    常见的请求报头有: Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Type, Authorization, Cookie, User-Agent等。

    请求正文

    当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中。在请求包头中有一些与请求正文相关的信息,例如: 现在的Web应用通常采用Rest架构,请求的数据格式一般为json。这时就需要设置Content-Type: application/json。

    4、服务器处理并返回HTTP报文
    自然而然这部分对应的就是后端工程师眼中的HTTP。后端从在固定的端口接收到TCP报文开始,这一部分对应于编程语言中的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。这一部分工作一般是由Web服务器去进行,我使用过的Web服务器有Tomcat, Jetty和Netty等等。

    HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。

    状态码

    状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:

    1xx:指示信息–表示请求已接收,继续处理。
    2xx:成功–表示请求已被成功接收、理解、接受。
    3xx:重定向–要完成请求必须进行更进一步的操作。
    4xx:客户端错误–请求有语法错误或请求无法实现。
    5xx:服务器端错误–服务器未能实现合法的请求。平时遇到比较常见的状态码有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500(分别表示什么请自行查找)。
    TODO:

    301和302有什么区别?
    HTTP缓存
    响应报头

    常见的响应报头字段有: Server, Connection...。

    响应报文

    服务器返回给浏览器的文本信息,通常HTML, CSS, JS, 图片等文件就放在这一部分。

    5、浏览器解析渲染页面

    参考:http://blog.csdn.net/aishangy...

  • 相关阅读:
    Python的注释
    Python的优缺点
    pymysql模块
    python(pymysql操作数据库)
    面向对象的测试用例设计有几种方法?如何实现?
    请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
    什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
    当开发人员说不是BUG时,你如何应付?
    性能测试的流程?
    您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
  • 原文地址:https://www.cnblogs.com/seasondaily/p/7675665.html
Copyright © 2020-2023  润新知