Go語言構建web應用的特性
- 可擴展
- 可維護
- 模塊化
- 高性能
HTTP簡介
HTTP是一種無狀態、由文本構成的請求-響應(request-response)協議,這種協議使用的是客戶端-服務器(client-server)計算模型
CGI
通用網管接口(Common Gateway Interface),允許web服務器與一個獨立運行於web服務器進程之外的進程對接
SSI
服務器端包含(server-side includes),允許開發者在HTML文件裏包含一些指令,衍生出了JSP(Java Server Pages),ASP(Active Server Pages)等Web模板引擎
http請求
- 請求行(request-line)
- 零個或任意多個請求首部(header)
- 一個空行
- 可選的報文主體(body)
請求方法
- GET
- POST
- HEAD
- PUT
- DELETE
- TRACE
- OPTIONS
- CONNECT
- PATCH
http響應
- 一個狀態行
- 零個或任意數量的響應首部
- 一個空行
- 一個可選的報文主體
響應狀態碼
- 1XX 情報狀態碼
- 2XX 成功狀態碼
- 3XX 重定向狀態碼
- 4XX 客戶端錯誤狀態碼
- 5XX 服務器錯誤狀態碼
響應首部
- Allow
- Content-Length
- Content-Type
- Date
- Location
- Server
- Set-Cookie
- WWW-Authenticate
URI
統一資源標識符(Uniform Resource Identifier),在Tim Berners-Lee在1994年發表的RFC 1630中定義了這個概念,還包括統一資源名稱(Uniform Resource Name)和統一資源定位符(Uniform Resource Location),URI是一個涵蓋性術語,包含了URN和URL,URI一般格式爲:
<方案名稱>:<分層部分>[ ? <查詢參數>] [ # <片段>]
因每個URL都是一個單獨的字符串,所以URL裏不能包含空格,?和#這些符號也不能做其它用途,我們需要用URL編碼(百分號編碼)對這些字符進行轉換,做法是將該字符在ASCII碼中的字節值轉換爲16進制,並在前面加上%,例如空格就被轉換爲%20。
處理器
Web應用中的處理器出了要接收和處理客戶端發來的請求,還需要調用模板引擎,然後由模板引擎生成HTML並把數據填充至將要回傳給客戶端的響應報文中
模板引擎(template engine)
- 靜態模板
- 動態模板
Hello Go
本地運行hello, world!
package main
import (
"fmt"
"net/http"
)
func handler(writer http.ResponseWriter, request *http.Request) {
fmt.Fprintf(writer, "Hello World %s", request.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}