go語言對http協議的支持

http:無狀態協議,是互聯網中使用http使用http實現計算機和計算機之間的請求和響應

使用純文本方式發送和接受協議數據,不需要借助專門工具進行分析就知道協議中的數據

服務器端的幾個概念

  • Request:用戶請求的信息,用來解析用戶的請求信息,包括 post、get、cookie、url 等信息

  • Response:服務器需要反饋給客戶端的信息

  • Conn:用戶的每次請求鏈接

  • Handler:處理請求和生成返回信息的處理邏輯

http報文的組成

  • 請求行
  • 請求頭
  • 請求體
  • 響應頭
  • 響應體

多種請求方式:

  • GET:向服務器請求資源地址
  • POST:直接返回請求內容
  • HEAD:只要求響應頭
  • PUT:創建資源
  • DELETE:刪除資源
  • TRACE:返回請求本身
  • OPTIONS:返回服務器支持HTTP方法列表、
  • CONNECT:建立網絡連接
  • PATCH :修改資源

軟件模型

  • B/S結構,客戶端瀏覽器/服務器,客戶端是運行在瀏覽器中
  • C/S結構,客戶端/服務器,客戶端是獨立的軟件

HTTP POST 簡易模型

在這里插入圖片描述

go對HTTP的支持

在golang的net/http包中提供了HTTP客戶端和服務端的實現

Handle Func()可以設置函數的請求路徑

LIstenAndServer實現監聽服務

單控制器

發給處理器(Handler)
在Golang的net/http包下有ServeMutx實現了Front設計模式的Front窗口,ServeMux負責接收請求并把請求分發給處理器(Handler)

http.ServeMux實現了Handler接口

多控制器

在實際開發中大部分情況是不應該只有一個控制器的,不同的詩求應該交給不同的處理單元.

在Golang中支持兩種多處理方式

  • 多個處理器(Handler)

  • 多個處理函數(HandleFunc)

使用多處理器

  • 使用http.Handle把不同的URL綁定到不同的處理器
  • 在瀏覽器中輸入http://localhost:8090/myhandler或http://ocalhost:8090/myother可以訪問兩個處理器
    方法.但是其他URI會出現404(資源未找到)頁面
package mainimport "net/http"type MyHandler struct {
}
type MyHandle struct {
}func (m *MyHandle) ServeHTTP(w http.ResponseWriter, r *http.Request) {w.Write([]byte("MyHandle--第二個"))
}func (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {w.Write([]byte("MyHandler"))
}func main() {h := MyHandler{}h2 := MyHandle{}server := http.Server{Addr: "localhost:8090"}http.Handle("/first", &h)http.Handle("/second", &h2)server.ListenAndServe()
}

使用多處理函數

func first(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "多函數first")
}
func second(w http.ResponseWriter, r *http.Request) {fmt.Fprintln(w, "多函數second")
}func main() {server := http.Server{Addr: "localhost:8090"}http.HandleFunc("/first", first)http.HandleFunc("/second", second)server.ListenAndServe()
}

獲取請求頭

package mainimport ("fmt""net/http"
)func param(w http.ResponseWriter, r *http.Request) {h := r.Header //mapfmt.Fprintln(w, h)for _, n := range h["Accept-Language"] {fmt.Fprintln(w, n)}
}func main() {server := http.Server{Addr: ":8090"}http.HandleFunc("/param", param)server.ListenAndServe()
}

獲取請求參數

可以一次性全部獲取也可以按照名稱獲取

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902480.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iscsi服務端安裝及配置

1. 安裝targetcli軟件包 yum install -y targetcli 2. 啟動target服務 systemctl start target systemctl enable target 3. 配置防火墻 firewall-cmd --add-port"3260/tcp" 3. 準備一個物理分區(或者邏輯分區)…

解決 MongoDB 查詢中的 `InvalidMongoDbApiUsageException` 錯誤

您在使用 Spring Data MongoDB 時遇到了 InvalidMongoDbApiUsageException 異常,錯誤信息如下: “由于 com.mongodb.BasicDocument 的限制,您無法添加第二個 ‘null’ 條件。查詢已經包含 ‘{ “KaTeX parse error: Expected }, got EOF at e…

一個關于相對速度的假想的故事-4

回到公式, 正寫速度疊加和倒寫速度疊加的倒寫相等,這就是這個表達式所要表達的意思。但倒寫疊加用的是減法,而正寫疊加用的是加法。當然是這樣,因為正寫疊加要的是單位時間上完成更遠的距離,而倒寫疊加說的是單位距離需…

重學React(一):描述UI

背景:React現在已經更新到19了,文檔地址也做了全面的更新,上一次系統性的學習還是在16-17的大版本更新。所以,現在就開始重新學習吧~ 學習內容: React官網教程:https://zh-hans.react.dev/lea…

AI大模型:(二)2.3 預訓練自己的模型

目錄 1.預訓練原理 2.預訓練范式 1.未標注數據 2.標注數據 3.有正確答案、也有錯誤答案 3.手撕transform模型 3.1.transform模型代碼 3.2.訓練數據集 3.3.預訓練 3.4.推理 4.如何選擇模型

gradle可用的下載地址(免費)

這幾天接手一個老項目,想找gradle老版本的,但一搜,雖然在CSDN上搜索出來一堆,但都是收費,有些甚至要幾十積分(吃相有點難看了)。 我找了一個能訪問的地址,特地分享出來,有需要的自取&#xff01…

vue3新增特性

一、Vue 3 新增特性 1. Composition API 概述: Composition API 提供了一種更靈活和強大的方式來組織和復用邏輯。適用于復雜組件和邏輯復用場景。主要功能: setup 函數:組件的入口點,用于定義響應式數據、方法、生命周期鉤子等。響應式 API:ref 和 reactive 提供更細粒度…

前端性能優化全攻略:JavaScript 優化、DOM 操作、內存管理、資源壓縮與合并、構建工具及性能監控

1 為什么需要性能優化? 1.1 性能優化的核心價值:用戶體驗與業務指標 性能優化不僅是技術層面的追求,更是直接影響用戶體驗和業務成敗的關鍵因素。 用戶體驗(UX): 響應速度:用戶期望頁面加載時…

【Unity筆記】Unity + OpenXR項目無法啟動SteamVR的排查與解決全指南

圖片為AI生成 一、前言 隨著Unity在XR領域全面轉向OpenXR標準,越來越多的開發者選擇使用OpenXR來構建跨平臺的VR應用。但在項目實際部署中發現:打包成的EXE程序無法正常啟動SteamVR,或者SteamVR未能識別到該應用。本文將以“Unity OpenXR …

Curl用法解析

Curl 用法解析 簡介 Curl 是一個強大的命令行工具,主要用于從服務器發送 HTTP 請求并獲取數據。它廣泛應用于調試 RESTful API、文件上傳下載、模擬用戶交互等多種場景。下面是一些基本用法及常見參數的分析: 基礎用法 curl [options] [URL]其中最基…

C語言教程(十一):C 語言中四種主要作用域及作用域嵌套遮蔽

一、引言 在 C 語言里,作用域指的是程序中變量、函數、類型等標識符能夠被使用的范圍。C 語言里有四種主要的作用域:塊作用域、函數作用域、文件作用域和原型作用域,下面為你展開介紹: 二、塊作用域 定義:塊作用域是 C…

初次嘗試Ghidra

最近看京東讀書上有本書叫《Ghidra權威指南》,竟然是美國國家安全局出品的逆向工具,我真是孤陋寡聞,第一次聽說。趕緊試試。 Release Ghidra 11.3.2 NationalSecurityAgency/ghidra GitHub 最新版本竟然是上周發布的,看來很活…

樂視系列玩機---樂視2 x620 x628等系列線刷救磚以及刷寫第三方twrp 卡刷第三方固件步驟解析

樂視2 x620 x628 x626等,搭載了Helio X20處理器,mtk6797芯片。 通過博文了解?????? 1??????-----詳細解析樂視2 x620系列黑磚線刷救磚的步驟 2??????----官方兩種更新卡刷步驟以及刷寫第三方twrp過程與資源 3??????----樂視2 mtk系列機型救磚 刷…

web原生API AbortController網絡請求取消方法使用介紹:防止按鈕重復點擊提交得最佳方案

在前端開發中,取消網絡請求是一個常見的需求,尤其是在用戶頻繁操作或需要中斷長時間請求的場景下。 AbortController 主要用于 ?優雅地管理和取消異步操作: 瀏覽器原生 API 一、代碼解析 1. ?創建 AbortController 實例 const controlle…

2025智能駕駛趨勢評估

以下是對2025年智能駕駛趨勢的評估: 技術發展 ? 自動駕駛級別提升:2025年有望成為L3級自動駕駛的商用元年。L3級自動駕駛技術開始從高端車型向20萬元以下價格帶下沉,部分車企如江淮和華為合作的尊界S800、小鵬汽車等都在積極推進L3級自動駕駛…

Spring MVC DispatcherServlet 的作用是什么? 它在整個請求處理流程中扮演了什么角色?為什么它是核心?

DispatcherServlet 是 Spring MVC 框架的絕對核心和靈魂。它扮演著前端控制器(Front Controller)的角色,是所有進入 Spring MVC 應用程序的 HTTP 請求的統一入口點和中央調度樞紐。 一、 DispatcherServlet 的核心作用和職責: 請…

Linux 內核中 cgroup 子系統 cpuset 是什么?

cpuset 是 Linux 內核中 cgroup(控制組) 的一個子系統,用于將一組進程(或任務)綁定到特定的 CPU 核心和 內存節點(NUMA 節點)上運行。它通過限制進程的 CPU 和內存資源的使用范圍,優…

【MATLAB第115期】基于MATLAB的多元時間序列的ARIMAX的預測模型

【MATLAB第115期】基于MATLAB的多元時間序列的ARIMAX的預測模型 ?一、簡介 ARIMAX?(Autoregressive Integrated Moving Average with eXogenous inputs)模型是一種結合自回歸(AR)、差分(I)、移動平均&a…

數據庫對象與權限管理-視圖與索引管理

一、視圖(View)管理 1. 視圖的定義與本質 視圖(View)是Oracle數據庫中的邏輯表,它不直接存儲數據,而是通過預定義的SQL查詢動態生成結果集。視圖的本質可以理解為: 虛擬表:用戶可…

IPoIB驅動接收路徑深度解析:從數據包到協議棧

引言 在InfiniBand網絡中,IPoIB(IP-over-InfiniBand)協議通過封裝和模擬以太網行為,使得傳統IP應用能夠無縫運行。其接收路徑是性能優化的關鍵環節,涉及硬件中斷處理、內存管理、協議解析等多個復雜步驟。本文以Linux內核中ipoib_ib_handle_rx_wc_rss函數為核心,結合IPo…