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中semaphore(信号量)源码
Apr 03 Golang
golang在GRPC中设置client的超时时间
Apr 27 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
彻底理解golang中什么是nil
Apr 29 Golang
完美解决golang go get私有仓库的问题
May 05 Golang
Golang中异常处理机制详解
Jun 08 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
golang 语言中错误处理机制
Aug 30 Golang
详解Golang如何优雅的终止一个服务
Mar 21 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Go gorilla securecookie库的安装使用详解
Aug 14 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 函数语法介绍一
2009/06/14 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python 的列表遍历删除实现代码
2020/04/12 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
用python实现对比两张图片的不同
2018/02/05 Python
python:接口间数据传递与调用方法
2018/12/17 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
现金会计岗位职责
2013/12/05 职场文书
运动会领导邀请函
2014/01/10 职场文书
法院信息化建设方案
2014/05/21 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
淮海战役观后感
2015/06/11 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技