亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

如何在Golang中處理HTTP請求Header

P粉602998670
發(fā)布: 2025-10-16 15:23:01
原創(chuàng)
541人瀏覽過
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

在Golang中處理HTTP請求Header非常直接,主要通過http.Request對象的Header字段來訪問和操作。這個字段是一個http.Header類型,底層是map[string][]string,支持多值頭部字段。

讀取請求Header

要獲取客戶端發(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)
}
登錄后復(fù)制

如果你想獲取某個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)
}
登錄后復(fù)制

設(shè)置響應(yīng)Header

在服務(wù)器響應(yīng)中添加Header,使用http.ResponseWriterHeader0方法獲取響應(yīng)頭的引用,然后調(diào)用Header1或Header2方法。

如知AI筆記
如知AI筆記

如知筆記——支持markdown的在線筆記,支持ai智能寫作、AI搜索,支持DeepseekR1滿血大模型

如知AI筆記27
查看詳情 如知AI筆記
  • Set(key, value):設(shè)置一個頭部字段,如果已存在則覆蓋。
  • Add(key, value):添加一個值,如果字段已存在,則追加而不覆蓋。

示例:

立即學(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"})
}
登錄后復(fù)制

提示:

必須在調(diào)用Header3或Header4之前設(shè)置響應(yīng)Header,否則無效。

驗證和安全相關(guān)的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)
    }
}
登錄后復(fù)制

也可以檢查Header5或Header6防止CSRF(配合其他機制):

origin := r.Header.Get("Origin")
if origin != "https://trusted-site.com" {
    http.Error(w, "Forbidden", http.StatusForbidden)
    return
}
登錄后復(fù)制

常見注意事項

  • Header的Get方法是安全的,即使鍵不存在也不會panic,返回空字符串。
  • 自定義Header建議使用Header8前綴(雖然現(xiàn)在不強制,但有助于識別)。
  • 敏感Header如Header9應(yīng)避免記錄到日志中。
  • 注意Header注入風(fēng)險,不要將用戶輸入直接寫入響應(yīng)Header。
基本上就這些。Golang的標(biāo)準(zhǔn)庫讓Header處理既簡單又安全,只要遵循基本規(guī)則,就能正確高效地工作。

以上就是如何在Golang中處理HTTP請求Header的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號