Golang中通過http.Request.Header讀取請求頭,使用Get獲取單值或多值字段,響應(yīng)頭則通過ResponseWriter.Header()設(shè)置,需在寫響應(yīng)前完成。1. 讀取:r.Header.Get("Key")獲取首值,r.Header["Key"]獲取所有值。2. 設(shè)置響應(yīng)頭:w.Header().Set()覆蓋,Add()追加。3. 安全:校驗API密鑰、Origin等,避免日志記錄敏感信息,防止Header注入。示例包含User-Agent、Content-Type處理及中間件認(rèn)證。
在Golang中處理HTTP請求Header非常直接,主要通過http.Request
對象的Header
字段來訪問和操作。這個字段是一個http.Header
類型,底層是map[string][]string
,支持多值頭部字段。
要獲取客戶端發(fā)送的請求頭信息,可以通過req.Header.Get(key)
方法。它返回指定鍵的第一個值,如果不存在則返回空字符串。這是最常用的方式。
雖然HTTP頭部字段名不區(qū)分大小寫,但Go的Header
對象會規(guī)范化的鍵名(例如轉(zhuǎn)為“Content-Type”這種格式),你可以使用任意大小寫傳入Get
方法,Go會自動處理。
示例:
立即學(xué)習(xí)“go語言免費學(xué)習(xí)筆記(深入)”;
func handler(w http.ResponseWriter, r *http.Request) { userAgent := r.Header.Get("User-Agent") contentType := r.Header.Get("Content-Type") authToken := r.Header.Get("Authorization") fmt.Fprintf(w, "User-Agent: %s\n", userAgent) fmt.Fprintf(w, "Content-Type: %s\n", contentType) }
如果你想獲取某個Header的所有值(因為一個Header可能有多個值),可以使用r.Header["FieldName"]
或r.Header.Values("FieldName")
:
acceptValues := r.Header["Accept"] // 或 acceptValues := r.Header.Values("Accept") for _, v := range acceptValues { log.Println("Accept:", v) }
在服務(wù)器響應(yīng)中添加Header,使用http.ResponseWriter
的Header
0方法獲取響應(yīng)頭的引用,然后調(diào)用Header
1或Header
2方法。
示例:
立即學(xué)習(xí)“go語言免費學(xué)習(xí)筆記(深入)”;
func handler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("X-Request-ID", "12345") // 添加多個Cache-Control指令 w.Header().Add("Cache-Control", "no-cache") w.Header().Add("Cache-Control", "no-store") json.NewEncoder(w).Encode(map[string]string{"status": "ok"}) }
必須在調(diào)用Header
3或Header
4之前設(shè)置響應(yīng)Header,否則無效。
在實際應(yīng)用中,常需要對某些Header進行校驗,比如認(rèn)證Token、來源檢查等。
示例:檢查API密鑰
func authMiddleware(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { apiKey := r.Header.Get("X-API-Key") if apiKey != "my-secret-key" { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } next(w, r) } }
也可以檢查Header
5或Header
6防止CSRF(配合其他機制):
origin := r.Header.Get("Origin") if origin != "https://trusted-site.com" { http.Error(w, "Forbidden", http.StatusForbidden) return }
Get
方法是安全的,即使鍵不存在也不會panic,返回空字符串。Header
8前綴(雖然現(xiàn)在不強制,但有助于識別)。Header
9應(yīng)避免記錄到日志中。以上就是如何在Golang中處理HTTP請求Header的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號