golang https server分析】的更多相关文章

https: HTTPS是http安全版本的实现,在http与tcp之间加了一层ssl/tls安全传输协议 为了防止请求被监听.篡改.冒充,在tls实现过程中引入了数字证书机制,数字证书由第三方权威机构提供保证. 数字证书原理是采用非对称加密生成一对公钥.私钥,服务端保存私钥,下发公钥给客户端,由于非对称加密计算量比较大, 所以https通信过程中,通过客户端与服务端的握手交互产生三次随机码,从而生成一个相对安全的对称加密密码,密码通过非对称加密下发给客户端,从而完成加密通信 https本质上还…
http:http请求过程实质上是一个tcp连接通信,具体通过socket接口编码实现 在go中是通过listenAndServer()方法对外提供了一个http服务,在该方法中完成了socket的通信过程 具体流程如下: func (srv *Server) ListenAndServe() error { addr := srv.Addr if addr == "" { addr = ":http" } // 创建socket文件描述符,绑定ip:port,改变…
建议看这篇文章前先看一下net/http文档 http://golang.org/pkg/net/http/ net.http包里面有很多文件,都是和http协议相关的,比如设置cookie,header等.其中最重要的一个文件就是server.go了,这里我们阅读的就是这个文件. 几个重要概念 ResponseWriter: 生成Response的接口 Handler: 处理请求和生成返回的接口 ServeMux: 路由,后面会说到ServeMux也是一种Handler Conn : 网络连接…
Nginx 在一个IP上配置多个https server时,默认只会发送默认server name的证书.这是由ssl 协议本身行为导致的:先建立ssl connection,后发送http请求.即nginx 建立ssl connection时是不知道请求的主机名字,因此返回默认server name的证书. 解决方案: 1. 一个https server 一个IP. 2. 启用sni, 此需要浏览器,本机openssl,nginx 同时支持. 编译参数:--enable-tlsext $ ng…
前面 2 篇 golang 性能优化分析系列文章: golang 性能优化分析工具 pprof (上) golang 性能优化分析工具 pprof (下) 一.基准测试 benchmark 简介 在 golang 中,可以通过 benchmark 基准测试来测试代码性能.基准测试主要是通过测试 cpu 和内存的效率问题,来评估被测试代码的性能. 基准测试的指标: 程序所花费的时间 内存使用的情况 cpu 使用情况 基准测试文件名和函数规定: go 基准测试文件都是以 _test.go 结尾,和单…
最近发现了一个 golang 开发的 HTTP server,叫做 Caddy,它配置起来十分简便,甚至可以 28 秒配置好一个支持 http2 的 server ,而且对各种 http 新特性都支持的比较早(比如 http2.quic都有支持). 安装 用过 golang 的应该都知道,golang 程序基本上不会有各种依赖,都是光秃秃一个可执行程序,cp 到 /usr/local/bin就算安装完成了,所以说安装 caddy 是很简单的,我给出三种方法. 脚本安装" data-anchor-…
loki 是一个方便的类似prometheus 的log 系统,mtail 是一个方便的日志提取工具, 可以暴露为http 服务——支持导出prometheus metrics 环境准备 docker-compose 文件   version: "3" services:  nginx-log:    build: ./    ports:    - "8090:80"    - "3903:3903"    volumes:    - &quo…
gqlgen golang 的graphql server 具体代码参考https://github.com/rongfengliang/gqlgen-demo 特点 模型优先 类型安全 代码生成 安装 go get -u github.com/vektah/gqlgen 创建schema schema.graphql type Todo { id: ID! text: String! done: Boolean! user: User! } type User { id: ID! name:…
何为逃逸分析 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序的哪些地方可以访问到指针.它涉及到指针分析和形状分析. 当一个变量(或对象)在子程序中被分配时,一个指向变量的指针可能逃逸到其它执行线程中,或是返回到调用者子程序.如果使用尾递归优化(通常在函数编程语言中是需要的),对象也可以看作逃逸到被调用的子程序中.如果一种语言支持第一类型的延续性在Scheme和Standard ML of New Jersey中同样如此),部分调用栈也可能发生逃逸. 如果一个子程序分配一…
开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢? 目录总览 . ├── AUTHORS ├── CONTRIBUTING.md ├── CONTRIBUTORS ├── LICENSE ├── PATENTS ├── README.boringcrypto.md ├── README.md ├── SECURITY.md ├── api ├── do…