当我们在浏览器输入 www.baidu.com 时, 浏览器就会加载出百度的主页, 那么浏览器背后的处理是什么样的呢?
总体来说, 大概流程是这样的!
1) 当你输入 URL 时, 浏览器的服务器会请求 DNS, 通过 DNS 来获取对应的 IP.
2) 通过 IP 来寻找对应的服务器, 请求建立 TCP 连接.
3) 浏览器发送 HTTP 请求包, 服务器接收到后开始处理.
4) 服务器收到请求后, 调用自身服务开始返回 HTTP 请求包.
5) 客户端接收到服务器的相应后开始运行, 并在接收到全部内容后断开 TCP 连接.
1,DNS 解析
当我们在浏览器中输入一个网址时, 是不能直接连接的, 需要用 DNS 地址解析将输入的 URL 网址转换为 IP 地址后才能连接.
具体过程分为:
1) 在浏览器输入网址时, 浏览器会先检查自己本地 hosts 文件有没有缓存, 如果有, 直接完成解析.
2) 如果自身 hosts 文件没有缓存, 则找 LDNS(local DNS), 本地 DNS 服务器如果有, 直接完成解析.
3) 如果 hosts 和本地 DNS 服务器都没有, 则 LDNS 去外地的 DNS 服务器请求.
2,socket 连接
当我们发起一个请求时, 首先要建立起 socket 连接, socket 是要通过 IP 和端口建立的, 所以要进行 DNS 解析.
3, 发送 http 请求
连接成功建立后, 开始向 web 服务器发送请求, 当浏览器向 Web 服务器发出请求时, 它向服务器传递了一个数据块, 也就是请求信息, 通常有 get 和 post.
HTTP 请求信息由 3 部分组成:
1) 请求方法 URI 协议 / 版本
2) 请求头 (Request Header)
3) 请求正文
4, 服务器响应
服务器接到请求后进行处理. 从它的文档空间中搜索子目录 mydir 的文件 index.html. 如果找到该文件, Web 服务器把该文件内容传送给相应的 Web 浏览器. Web 服务器首先传送一些 HTTP 头信息, 比较常见的有:
- ) HTTP 1.0 200 OK
- ) MIME_Version:1.0
3) content_type ; 指示 HTTP 体信息的 MIME 类型.
4) content_length
5, 断开连接
当应答结束后, 浏览器与服务器必须断开, 以保证其它浏览器能够与服务器建立连接.
来源: http://www.bubuko.com/infodetail-3110510.html