Go Web 学习:总体介绍

1,662 阅读3分钟

这是我参与更文挑战的第 30 天,活动详情查看: 更文挑战

Web 应用程序是一种可以通过 Web 访问的应用程序,Web 程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件。Web 应用对于身处互联网时代的我们来说太普遍。无论哪一种语言,只要它能够开发出与人类交互的软件,它就必然会支持 Web 应用开发。

和其它语言一样,Go 语言也提供了对 Web 编程的支持。既然 Go 语言各方面都这么优异,那如何使用 Go 语言编写 Web 应用呢?本章将会介绍 Go Web 相关的基础,包括:Web 的工作原理、使用 Go 构建服务器、如何接收和处理请求,以及服务端数据存储的几种常用的方式。

Web 的工作原理

Web 应用应该是这样的计算机程序:它会对客户端发送的 HTTP 请求做出响应,并通过 HTTP 响应将 HTML 回传至客户端。

Web 的工作原理要从 HTTP 协议的解析开始介绍,包括 HTTP Request 和 HTTP Response 由哪些部分组成,以及访问 Web 站点涉及的客户端和服务端交互细节。

HTTP 协议详解

HTTP 是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP 协议是 Web 工作的核心,所以要了解清楚 Web 的工作方式就需要详细地了解清楚 HTTP 协议如何工作。

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

HTTP Request

HTTP 的请求包括:请求行(Request Line)、请求头部(Header)、空行和请求数据四个部分组成。

我们访问 www.spring4all.com/common/tags/hot,如下为请求的部分抓包数据:

Transmission Control Protocol, Src Port: 54539, Dst Port: 80, Seq: 3628, Ack: 52330, Len: 607
    Source Port: 54539
    Destination Port: 80
Hypertext Transfer Protocol
    GET /common/tags/hot HTTP/1.1\r\n
    Host: www.spring4all.com\r\n
    Connection: keep-alive\r\n
    Accept: */*\r\n
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36\r\n
    X-Requested-With: XMLHttpRequest\r\n
    Accept-Encoding: gzip, deflate\r\n
    Accept-Language: zh-CN,zh;q=0.9\r\n

我们关注的是传输控制层,目标端口号为 80,下面是 HTTP Request 的具体信息。

  1. 请求行:GET 为请求类型,/common/tags/hot 为要访问的资源,HTTP/1.1 是协议版本;
  2. 请求头部:从第二行起为请求头部,Host 指出请求的目的地(主机域名);User-Agent 是客户端的信息,它是检测浏览器类型的重要信息,由浏览器定义,并且在每个请求中自动发送;
  3. 空行:请求头后面必须有一个空行;
  4. 请求数据:请求的数据也叫请求体,可以添加任意的其它数据。这个例子的请求体为空。

小结

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

阅读最新文章,关注公众号:aoho求索