《go语言网络编程》笔记

1.1 大型可扩展web应用的特点:

  • 可扩展
  • 模块化
  • 可维护
  • 高性能

可扩展

  • 纵向扩展 - go在一个线程上可以运行上千个goroutines
  • 横向扩展 - go程序编译成静态二进制文件,可以在多个系统上运行 
模块化:go经常用来创建微服务,多个微服务可以组成一个大型应用
可维护:go语言语法简单,包管理灵活,文档工具(godoc)使用简单,内置测试功能
高性能:go性能接近于C,且同时可执行上千个goroutines


1.2 web应用如何工作

通过HTTP协议传输数据
web application: 传输数据给用户使用
web service: 传输数据给其它应用使用


1.3 简单介绍HTTP

HTTP是无状态的,基于文本的,使用客户端-服务器计算模型的请求-响应协议

无状态:本次的“请求-响应”与上一次的“请求-响应”没有关系

基于文本:不用特殊的协议分析器,就可以很容易的定位错误

HTTP 0.9:1990年,第一个版本

HTTP 1.0:1996年

HTTP 1.1:1999年

HTTP 2.0:正在起草


1.4 web应用的发展

(1)提供静态内容

(2)提供动态内容

CGI:每一个连接创建一个CGI进程,CGI进程从环境变量、标准输入中读取数据,处理数据,然后向标准输出输出数据,处理完毕后退出

SSI:server-side includes,它是可以包含在HTML中的一些指令。当HTML文件被请求时,这些指令被执行,并将输出结果嵌入HTML文件中,然后发送给客户端


1.5 HTTP请求

HTTP请求由以下部分组成:

  1. 请求行
  2. 零或多个请求头
  3. 空行
  4. 消息体 (optional)
请求行
  • 请求方法   (0.9版本只有GET,1.0版本增加POST、HEAD,1.1版本增加另外5个:PUT、DELETE、OPTIONS、TRACE、CONNECT,一些实现又增加了PATCH)
  • URI
  • HTTP版本
        注意:浏览器仅支持GET和POST方法
请求头
        Accept、Accept-Charset、Authorization、Cookie、Content-Length、Content-Type、Host、Referrer、User-Agent

1.6 HTTP响应
  1. 状态行
  2. 零或多个响应头
  3. 空行
  4. 消息体(optional)
状态行
  • 状态码 (1XX, 2XX, 3XX, 4XX, 5XX)
  • 状态码相应的描述
响应头
        Allow, Content-Length, Content-Type, Date, Location, Server, Set-Cookie, WWW-Authenticate

1.7 URI
URN: uniform resource name
URL: uniform resource locator
URI: uniform resource identifier
URI是URN和URL的总称
URI的一般格式:<scheme name>:<hierarchical part>[?<query>][#<fragment>]

1.8 HTTP/2介绍
HTTP/2是HTTP的新版本,专注于性能,是一个二进制协议。在Go 1.6中使用HTTPS时,自动使用HTTP/2,之前的版本可以通过 golang.org/x/net/http2 包使用HTTP/2

1.9 web app的组成
handlers: 处理HTTP请求,执行需要的工作
        handlers调用template engine。在MVC结构中,handlers是M和C(C一般比较小,仅负责路由、HTTP的封包和解包,M较大,包含应用逻辑和数据, V是返回给client的HTML)
template engine: 产生HTML,并返回给客户端。
        静态模板:HTML夹杂着占位符号,静态模板引擎直接将占位符号替换成正确的数据。静态模板引擎有:CTemplate、Mustache等
        动态模板:HTML夹杂着占位符号以及某种编程语言的结构(条件语句、迭代器、变量等)。动态模板引擎有:JSP、ASP、ERB等

1.10 Hello Go
        术语handler通常用于事件触发的回调函数

猜你喜欢

转载自blog.csdn.net/gutsyfarmer/article/details/78232696
今日推荐