美文网首页
Go语言 Web开发(1)Web的工作方式

Go语言 Web开发(1)Web的工作方式

作者: 小杰的快乐时光 | 来源:发表于2018-08-23 05:11 被阅读0次

    Web的工作方式
    当我们浏览网页,输入网址后回车,页面就会显示你需要的内容,这个流程大致可以分为:
    ①浏览器根据输入的url去请求DNS服务器,通过DNS获取相应的域名对应的IP
    ②通过IP地址找到IP对应的服务器后,要求建立TCP连接
    ③浏览器发送HTTP Request(请求)后,服务器在接收到请求后开始处理请求,服务器调用自身服务,返回HTTP Response(响应);
    ④客户端收到来自服务器的响应后开始渲染这个Response里的主体(body)
    ⑤等收到全部的内容随后断开与该服务器之间的TCP连接

    一个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端通信。
    Web服务器的工作原理可以简单地归纳为:
    客户机通过TCP/IP协议建立到服务器的TCP连接
    客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
    服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言
    的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
    客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果

    客户机与服务器之间的通信是非持久连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求。

    URL与DNS解析
    URL(Uniform Resource Locator)是“统一资源定位符”的英文缩写,用于描述一个网络上的资源, 基本格式如下

    [schema://host](schema://host/)[:port#]/path/.../[?query-string][#anchor]
    

    scheme:指定低层使用的协议 ( 例如: http, https, ftp)
    host:HTTP 服务器的 IP 地址或者域名
    port#:HTTP 服务器的默认端口是 80 ,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
    path:访问资源的路径
    query-string:发送给 http 服务器的数据
    anchor:锚

    DNS(Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它从事将主机名或域名转换为实际IP地址的工作。DNS的基本工作原理流程图:

    DNS的基本工作原理流程图.png

    完整分析工作原理流程图:

    ①输入www.google.com域名,操作系统第一步会检查自己本地的hosts文件中是否有这个网址的映射关系,如果hosts文件中有这个映射关系,那么就会优先调用这个IP地址映射,完成域名解析。

    ②若hosts文件中没有这个映射关系,那么就会找本地DNS解析器缓存,查看是否有这个网址映射关系,若有,则直接返回,完成域名解析。

    ③若hosts文件和本地DNS解析器缓存中都没有这个映射关系,那么就会去TCP/IP参数中设置的首选DNS服务器(也叫本地DNS服务器)去查找。若有那么返回解析结果给客户端,完成域名解析。

    本地DNS服务器区域解析分为两种:第一种是要查询的域名包含在本地配置区域资源中;第二种是要查询的域名不在本地配置区域资源中,而是包含在缓存中,两种都可以完成解析,但是前者解析是具有权威性。

    ④若以上都解析失效,那么会根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(google.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找google.com域服务器,重复上面的动作,进行查询,直至找到www.google.com主机。

    ⑤如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。

    HTTP协议解析
    HTTP是一种让Web服务器与浏览器(客户端)通过Internet发送与接收数据的协议,它建立在TCP协议之上,一般采用TCP的80端口。它是一个请求、响应协议--客户端发出一个请求,服务器响应这个请求。在HTTP中,客户端总是通过建立一个连接与发送一个HTTP请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回调连接。客户端与服务器端都可以提前中断一个连接。例如,当浏览器下载一个文件时,你可以通过点击“停止”键来中断文件的下载,关闭与服务器的HTTP连接。

    HTTP协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对HTTP服务器来说,它并不知道这两个请求是否来自同一个客户端。为了解决这个问题, Web程序引入了Cookie机制来维护连接的可持续状态。

    HTTP协议是建立在TCP协议之上的,因此TCP攻击一样会影响HTTP的通讯。

    参考书籍:《Go Web编程》

    相关文章

      网友评论

          本文标题:Go语言 Web开发(1)Web的工作方式

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