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


    前言

      在使用PostMan之前,自己测试Rest接口都是直接在浏览器地址栏输入URL来测试的,但是这种方法发出的请求都是Get,如果要发送POST请求只能用ajax等编程方式。有了PostMan就方便多了。某一天在输URL的时候,突然想看看浏览器到底做了什么,于是就有了下面这些内容。

    概述

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

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

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

    3.浏览器与服务端建立socket连接,如果已有则无需建立

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

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

    6.浏览器渲染HTML

    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就是回车+换行,即" ")。

    接收响应数据报

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

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

    网页数据在哪里?

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

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

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

    断开Socket连接

    什么时候断开连接?

    实际上,Http协议到了1.1之后,默认维持的是长连接,也就是不会关闭。因为如果每个请求都建立新的连接的话,握手的开销不可小觑。现在基本上使用的都是1.1版本。

    怎么断开连接?

    socket连接只要双方任何一方关闭即可断开连接,所以可以是浏览器或服务端任意一方关闭连接。

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

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

  • 相关阅读:
    动态Webapi参考资料
    解决异步事务好文章
    .net core 插件开发
    端口被占用代码
    性能测试
    .NET/.NET Core 单元测试:Specflow
    Autofac 替换默认控制器骚操作
    Swagger非常好的文章
    sqlserver入门到精通(2016安装教程)
    springboot 学习之路 27(实现ip白名单功能)
  • 原文地址:https://www.cnblogs.com/longfurcat/p/10353786.html
Copyright © 2020-2023  润新知