【杂谈】一个回车下去,浏览器作了什么?

前言

  在使用PostMan以前,本身测试Rest接口都是直接在浏览器地址栏输入URL来测试的,可是这种方法发出的请求都是Get,若是要发送POST请求只能用ajax等编程方式。有了PostMan就方便多了。某一天在输URL的时候,忽然想看看浏览器到底作了什么,因而就有了下面这些内容。css

概述

如下讲述的是一个请求静态网页文件的例子,该例子有如下几个过程:ajax

1.在浏览器地址栏输入一个URL,并回车编程

2.浏览器利用DNS,找到域名对应的IP地址浏览器

3.浏览器与服务端创建socket链接,若是已有则无需创建tomcat

4.浏览器利用socket链接发送请求数据报服务器

5.服务端返回响应数据报网络

6.浏览器渲染HTMLsocket

7.若是HTML中含有其余文件的引用,如css,js文件,那么它还会重复步骤3~6测试

创建Socket

要与服务端创建socket链接,浏览器要知道哪些信息呢?网站

  • 服务器的IP地址
  • 应用程序占用端口。

IP地址怎么获取?

首先你输入要访问一个网站必然有域名,有了域名必然就能找到IP地址。域名与IP地址是多对一的关系。值得一提的是,域名到IP地址的映射不必定要用到DNS,若是本地hosts文件中有相关的映射,那就没必要远程查询了。

地址栏就不能直接输IP地址吗?

只要你记得住,固然能够输,还省去了解析域名的麻烦。域名的出现就是为了避免用去记IP地址。例如,baidu.com 总比 xxx.xxx.xxx.xxx好记吧。

那端口呢?

端口在URL中是直接跟在IP地址/域名后面,通常是这样:

IP地址/域名:端口

好比tomcat项目就是,localost:8080/xxx

那为何不少网站访问的时候不须要输端口?

由于默认不输入的话,会补上80端口。因此端口仍是有的。

发送请求数据报

请求数据报包含哪些内容?

那就要说到数据报的结构了,HTTP请求报文分三部分,请求行(request line)、请求头(request headers)、请求实体(request body)。大概就是下面这样:

Method Uri Protocol/version CRLF

Header1:Value1 CRLF
Header2:Value2 CRLF
....
CRLF

Body

这三大块用CRLF分隔(CLRF就是回车+换行,即"\r\n")。

接收响应数据报

200、500等这些响应结果是怎么回事?

你能收到这些响应结果,至少网络是通的。须要明确一点的是,这些状态码是服务端写好,而后发给你的。请求正常就是200,请求参数致使服务程序出现异常就是500等等。这些状态码不少,有兴趣的能够去看Http协议说明。

网页数据在哪里?

网页文件的内容都放在响应报文的body中,浏览器会把网页内容渲染到页面上。

提示下载文件是怎么回事?

这其实说的是响应报文对于body内容的处理方式,默认状况下是直接在网页上展现的。这主要由响应头中的Content-Disposition值决定,默认是inline,也就是直接在网页上展现。若是是须要下载的话,那就是attachement;filename=xxx.若是浏览器接收到这样的响应报文,会弹出下载提示框,让用户选择保存位置。

断开Socket链接

何时断开链接?

实际上,Http协议到了1.1以后,默认维持的是长链接,也就是不会关闭。由于若是每一个请求都创建新的链接的话,握手的开销不可小觑。如今基本上使用的都是1.1版本。

怎么断开链接?

socket链接只要双方任何一方关闭便可断开链接,因此能够是浏览器或服务端任意一方关闭链接。

浏览器 => 关闭浏览器应用 Or 提示服务端,让服务端关闭,具体方式为添加请求头Connect:close

服务端 => 编程调用close方法

相关文章
相关标签/搜索