golang 实现Location跳转方式


Posted in Golang onMay 02, 2021

golang作为互联网时代的C语言,对网络的支持是非常友好的,最近想做个短网址转发使用,自然想到用Golang开发。

闲话少说,直接上源码:

package main 
import (
 "fmt"
 "log"
 "net/http"
)
 
func login(w http.ResponseWriter, r *http.Request) {
 fmt.Print(fmt.Sprintf("%v+", r))
 w.Header().Set("Cache-Control", "must-revalidate, no-store")
 w.Header().Set("Content-Type", " text/html;charset=UTF-8")
 w.Header().Set("Location", "http://wap.baidu.com/")//跳转地址设置
 w.WriteHeader(307)//关键在这里!
}
func main() {
 http.HandleFunc("/", login)              //设置访问的路由
 err := http.ListenAndServe(":9090", nil) //设置监听的端口
 if err != nil {
  log.Fatal("ListenAndServe: ", err)
 }
}

补充:Go获取Location重定向url

go本身不提供重定向的url,如果想要获取,只能从源码下手。

http.Get()接收到一个url后,会进一步确认,是否包含重定向url,如果包含,自动转到新的url,我们需要做的就是在这之前截取重定向url。

进入到http包中找到函数:

//自用,保留url地址信息,头部大写进行暴露
var RedirectMy string //此行源码中没有,为自己添加
 
func defaultCheckRedirect(req *Request, via []*Request) error {
 //自用,将url根据需求进行组合
 RedirectMy = "//"+req.URL.Host+req.URL.Path//此行源码中没有,为自己添加
 if len(via) >= 10 {
  return errors.New("stopped after 10 redirects")
 }
 return nil
}

从源码中可以看出,go本身支持10次重定向,超过10次便会报错。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
go语言map与string的相互转换的实现
Apr 07 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
Golang二维数组的使用方式
May 28 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
Golang 实现WebSockets
Apr 24 Golang
Golang并发工具Singleflight
May 06 Golang
Golang gRPC HTTP协议转换示例
Jun 16 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 Golang
Go语言怎么使用变长参数函数
Jul 15 Golang
解决golang post文件时Content-Type出现的问题
May 02 #Golang
对Golang中的FORM相关字段理解
May 02 #Golang
解决go在函数退出后子协程的退出问题
Apr 30 #Golang
Go语言 go程释放操作(退出/销毁)
golang DNS服务器的简单实现操作
golang slice元素去重操作
Apr 30 #Golang
Golang中interface{}转为数组的操作
Apr 30 #Golang
You might like
php字符串截取问题
2006/11/28 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
Python中的多重装饰器
2015/04/11 Python
深入理解Python中字典的键的使用
2015/08/19 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
恶意软件的定义
2014/11/12 面试题
社区工作者先进事迹
2014/01/18 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
保护动物的标语
2014/06/11 职场文书
元旦晚会活动总结
2014/07/09 职场文书
自我检讨书范文
2015/01/28 职场文书
计划生育个人总结
2015/03/02 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python