当前位置: 首页 > java >正文

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.xdnf.cn/news/631.html

相关文章:

  • 对象多态与行为多态
  • 网络开发基础(游戏)之 二进制数据处理
  • SSM(SpringMVC+spring+mybatis)整合的步骤以及相关依赖
  • JVM垃圾回收器整理
  • Oracle EBS COGS Recognition重复生成(一借一贷)
  • Docker Registry(镜像仓库)
  • Linux网络编程 TCP---并发服务器:多进程架构与端口复用技术实战指南
  • OpenCV 高斯模糊 cv2.GaussianBlur
  • k8s 基础入门篇之开启 firewalld
  • 网络原理 - 应用层, 传输层(UDP 和 TCP) 进阶, 网络层, 数据链路层 [Java EE]
  • 为什么this与super不能出现在同一构造器的原因
  • 计算机视觉与深度学习 | Transformer原理,公式,代码,应用
  • 深度解析算法之前缀和
  • 【中间件】nginx将请求负载均衡转发给网关,网关再将请求转发给对应服务
  • 26考研 | 王道 | 数据结构 | 第六章 图
  • 重构之去除多余的if-else
  • AWS Linux快速指南:5分钟搭建多用户图形界面
  • Unity游戏开发实战:从PlayerPrefs到JSON,精通游戏存档与加载机制
  • 软件测试的页面交互标准:怎样有效提高易用性
  • [ 春秋云镜 ] — Time 仿真场景
  • 第1期:Python基础语法入门
  • 前端面试的话术集锦第 25 篇博文——CSS面试题上
  • 在 Windows 8/10/11 上运行Windows7的经典游戏(扫雷 蜘蛛纸牌等)
  • (eNSP)Super Vlan配置
  • PKI 公钥基础设施
  • NHANES指标推荐:WWI
  • WSL 升级报错
  • BR_频谱20dB 带宽(RF/TRM/CA/BV-05-C [TX Output Spectrum – 20 dB Bandwidth])
  • 机械设计【】技术要求(实际使用)
  • 测试第四课---------性能测试