第一章--Go與web應用
阿新 • • 發佈:2018-12-23
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)
}