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 中time.After释放的问题
May 05 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
golang的文件创建及读写操作
Apr 14 Golang
Go获取两个时区的时间差
Apr 20 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
Go语言入门exec的基本使用
May 20 Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 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数据库操作类代码(增,删,改,查)
2013/04/08 PHP
php汉字转拼音的示例
2014/02/27 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vue 项目常用加载器及配置详解
2018/01/22 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
生产主管岗位职责
2013/11/10 职场文书
毕业典礼主持词
2015/06/29 职场文书
六年级作文之预言作文
2019/10/25 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python
Golang Web 框架Iris安装部署
2022/08/14 Python