美文网首页
HTTP从浏览器(客户端)到服务器,发生了什么?

HTTP从浏览器(客户端)到服务器,发生了什么?

作者: 软萌白甜Hedy | 来源:发表于2019-08-10 23:57 被阅读0次

      在我还没有开始接触计算机和编程的时候,虽然天天上网,但仅限于输入网址→回车键→等待结果的不走心过程,脑子里从未思考过,网络上的信息传递到底经历了怎样的过程,才把结果呈现在我眼前,今天就让我们都用程序员的眼和脑来梳理一下背后的过程。

    从网址到真正的IP地址

    输入网址:https://www.jianshu.com/p/4aa3bb16f36c
      一般情况下,网络上输入的地址都称为网址,官方的名字叫URL(Uniform Resource Locator,统一资源定位符),完整的URL的完整格式包括:协议名://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件/文件名.后缀?参数=值#标志,之所以使用它也是为了便于非专业人士记忆,就用刚刚的网址为例,它的组成包括了:
    协议名称:https,每个协议有自己固定的通讯规则,所以协议主要规定了浏览器通过何种内容格式来获取想要的文件。
    网络地址:www.jianshu.com(依次为 子/三级域名.二级域名.顶/一级域名),网络地址指示目标资源所在的服务器,也可用IP地址+端口号表示。
    资源路径:/p/4aa3bb16f36c,以“/”开始,说明目标资源放在服务器的具体的位置,类似我们的文件路径。
      将上述地址输入完毕后,浏览器首先会查看浏览器缓存,若未找到对应的IP地址,则会查看系统缓存里的host文件,会再去查找路由器缓存,若还是未找到,则通过查询DNS服务器将网址转换成网络便于读取的IP地址,这一步也叫DNS解析服务。

    建立TCP连接

      HTTP协议的底层依靠的是TCP连接,所以查到真正的IP地址后,浏览器会跟服务器之间建立TCP连接,TCP连接是一种面向连接的,可靠的传输协议,所以它的建立需要先进行“三次握手”,三次握手在专门讲TCP/IP协议的部分已经讲过,在此不再赘述,配置网上找的简图一张:


    三次握手.png
    浏览器向服务器发送HTTP请求

      HTTP是网络模型里应用层的协议,HTTP协议有一套自己的通讯规则,所以在TCP建立之前,浏览器会按照http协议的规则,将需要请求的内容生成HTTP报文的格式,以这种统一规划的报文形式在网络里传输。当TCP连接的三次握手完成,代表TCP连接成功建立,浏览器就会将HTTP请求的报文发送给服务器。请求报文的格式可以大致划分为请求头和请求体,请求头包含了关键的信息:协议名称,请求方法(常用为post和get),目标URL,请求返回是否需要缓存,客户端是否需要cookie等。
      按照网络模型的层次划分,HTTP协议处于应用层,在浏览器客户端的这一层来说,应用层的下面依次还有传输层(TCP),网络层(IP),数据链路层和物理层,浏览器生成的HTTP协议会在TCP连接建立好后,会加上TCP/IP两层的报文首部,IP协议的作用是把TCP分割好的数据包包装好发送给接收方,但保证数据准确送达还有需要MAC地址(物理链路层唯一性),经过ARP协议,将IP地址转换成MAC地址,拥有TCP/IP首部的数据包经由物理链路层、物理层,传给MAC地址显示的目标地。

    服务器接收HTTP请求

      数据包到达服务器会按照物理层、数据链路层、网络层、传输层、应用层的顺序将数据包恢复到HTTP报文的格式。

    服务器响应HTTP请求并返回浏览器

      服务器上的操作系统发现Tomcat监听8080端口,所以操作系统会将HTTP报文传给Tomcat,Tomcat是一个servlet容器,所谓servlet,它是运行在Web服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Tomcat在收到HTTP请求的报文并解析后,会生成HttpServletRequest和HttpServletResponse两个对象,HttpRequestServlet封装HTTP报文的请求资源,Tomcat将HttpServletRequest对象传递给Servlet,并通过Servlet的service()方法处理请求(诸如访问数据库之类),生成的结果将由HttpServletResponse传给Tomcat,Tomcat获取内容,会生成一个HTTP响应体,响应体(包含协议版本,状态码,响应数据等)会经由服务器端的封装,经由TCP/IP,回到浏览器,浏览器再经过一层层解析,最后将响应数据渲染成页面。

    关闭TCP连接

      浏览器完成了一次完整的请求并收到回复,此时,TCP连接等待下一次请求或选择关闭连接,若需要关闭连接,则通过四次挥手关闭,简图如下:


    四次挥手.png

    相关文章

      网友评论

          本文标题:HTTP从浏览器(客户端)到服务器,发生了什么?

          本文链接:https://www.haomeiwen.com/subject/svdcdctx.html