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 相关文章推荐
golang 如何用反射reflect操作结构体
Apr 28 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
golang import自定义包方式
Apr 29 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
Go 语言结构实例分析
Jul 04 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
深入理解 Golang 的字符串
May 04 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP 遍历XP文件夹下所有文件
2008/11/27 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
python实现二维码扫码自动登录淘宝
2016/12/27 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
C,C++的几个面试题小集
2013/07/13 面试题
服务之星获奖感言
2014/01/21 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
运动会演讲稿100字
2014/08/25 职场文书
综治工作心得体会
2014/09/11 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
股权转让协议范本
2014/12/07 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
出生证明格式
2015/06/15 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL