在Golang中使用http.FileServer返回静态文件的操作
作者:寒江雪1719 发布时间:2024-02-20 07:51:50
标签:Golang,http,FileServer,静态文件
Golang中使用http.FileServer
使用http.FileServer可以管理向浏览器返回静态文件
http.Handle("/",http.FileServer(http.Dir("/Users/administrator/Desktop/public")))
err := http.ListenAndServe("0.0.0.0:8080",nil)
if err!=nil{
fmt.Print(err);
}
补充:golang https server分析
https:
HTTPS是http安全版本的实现,在http与tcp之间加了一层ssl/tls安全传输协议
为了防止请求被监听、篡改、冒充,在tls实现过程中引入了数字证书机制,数字证书由第三方权威机构提供保证。
数字证书原理是采用非对称加密生成一对公钥、私钥,服务端保存私钥,下发公钥给客户端,由于非对称加密计算量比较大,
所以https通信过程中,通过客户端与服务端的握手交互产生三次随机码,从而生成一个相对安全的对称加密密码,密码通过非对称加密下发给客户端,从而完成加密通信
https本质上还是tcp通信,所以https的捂手是在建立tcp连接后,进行的一系列校验而已,
在处理tcp conn连接的过程中,会判断连接类型是不是tls类型,如果是会进入tlsConn.serverHandshake()握手过程。详细流程如下:
下面分析一下golang中如何实现的https握手
在建立tlsConn连接后,服务端新起一个goroutine处理,
config.serverInitOnce.Do(config.serverInit) // 产生一个随机数作为通信凭证,下次通信时凭证校验通过后直接通信,校验不通过重新建立连接
msg, err := c.readHandshake() // 解析clientHello信息,此时获取到由客户端生成的第一个随机数
c.vers, ok = config.mutualVersion(hs.clientHello.vers) // 检查客户端与服务端tls版本是否一致
_, err = io.ReadFull(config.rand(), hs.hello.random) // 服务端产生第二个随机数
hs.setCipherSuite(id, supportedList, c.vers) // 确认加密算法
设置服务器证书
hs.cert, err = config.getCertificate(&ClientHelloInfo{
CipherSuites: hs.clientHello.cipherSuites,
ServerName: hs.clientHello.serverName,
SupportedCurves: hs.clientHello.supportedCurves,
SupportedPoints: hs.clientHello.supportedPoints,
});
skx, err := keyAgreement.generateServerKeyExchange(config, hs.cert, hs.clientHello, hs.hello) // 生成服务端摘要信息
c.writeRecord(recordTypeHandshake, helloDone.marshal()) //发送helloDone信息
preMasterSecret, err := keyAgreement.processClientKeyExchange(config, hs.cert, ckx, c.vers) // 处理获取由客户端生成的第三个随机数
hs.masterSecret = masterFromPreMasterSecret(c.vers, hs.suite, preMasterSecret, hs.clientHello.random, hs.hello.random) // 生成通信秘钥
hs.finishedHash.Write() // 服务端发送最后一次确认请求
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/lkysyzxz/article/details/79157035
0
投稿
猜你喜欢
- 首先是对一元函数求积分,使用Scipy下的integrate函数:from scipy import integratedef g(x):
- JDBC连接MySQLJDBC连接MySQL加载及注册JDBC驱动程序Class.forName("com.mysql.jdbc.
- 1.int,float相互转换例1:int转float使用float(int)float转int使用int(float)# coding:u
- 哦,这就是真正牛X的程序员。不过,他也仅仅是牛X罢了,还不是大神。大神程序员是什么样儿呢?他是扫地僧,大隐隐于市。先搞清楚这些名词再说别的:
- 1.问题出现:在测试阶段,大数据并发的情况下,发现sql语句造成表的死锁,过一段时间,死锁消失。于是进行排查报错如下:对应的sql语句如下:
- 先写一个批处理文件,给个例子。 代码如下:set rq=%date:~0,10% exp system/system的
- 本文实例为大家分享了python使用Matplotlib绘制分段函数的具体代码,供大家参考,具体内容如下环境Python3Mac OS代码#
- DataFrame是一个组织成命名列的数据集。它在概念上等同于关系数据库中的表或R/Python中的数据框架,但其经过了优化。DataFra
- * 表的建立关系数据库的主要特点之一就是用表的方式组织数据。表是SQL语言存放数据、查找数据以及更新数据的基本数据结构。在SQL语言中,表有
- 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限
- mysql高效查询mysql牺牲了group by来增加left join的速度(前提是加了索引)。user表:10万数据实例1: 200秒
- 编写Python代码,大家都需要遵循PEP8,因此在pycharm中,如何设置每行最大长度限制,成为了一个小的知识盲点,在这里做一下记录,方
- URL提交是百度提供的一个站长工具,用于给站长提供手工收录某些URL的接口,但是该接口有验证码识别部分,比较难弄。所以编写了如下程序进行验证
- 在ASP中,FSO的意思是File System Object,即文件系统对象。
- 一个朋友给她的朋友买礼物。撕心裂肺、绞尽脑汁。最后蹦出来一个主意:“送打火机”我不知道小妞们通过哪的投票,就这么断定男人都喜欢打火机。导致一
- ansible 简介ansible 是什么?ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、
- Numpy中的N维数组(ndarray)Numpy 中的数组是一个元素表(通常是数字),所有元素类型相同,由正整数元组索引。在 Numpy
- 这篇文章主要介绍了python自动化unittest yaml使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- XML 的使用越来越广泛,但是很多 XML 的结构并不好。即便结构良好,也常常设计得很糟,使得处理和维护非常困难。而大部分用于 XML 的基
- 本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下=====欢迎使用通讯录管理系统=====1.添加2.