当前位置: 首页 > news >正文

【六、http】go的http的客户端重定向

一、http的重定向

在这里插入图片描述
重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

package mainimport ("errors""fmt""net/http"
)func redirectLimitTimes() {// 限制重定向的次数client := &http.Client{CheckRedirect: func(req *http.Request, via []*http.Request) error {if len(via) > 10 {return errors.New("redirect too times")}return nil},}request, _ := http.NewRequest(http.MethodGet,"http://httpbin.org/redirect/20",nil,)_, err := client.Do(request)if err != nil {panic(err)}
}func redirectForbidden() {// 禁止重定向// 登录请求,防止重定向到首页client := &http.Client{CheckRedirect: func(req *http.Request, via []*http.Request) error {return http.ErrUseLastResponse},}request, _ := http.NewRequest(http.MethodGet,"http://httpbin.org/cookies/set?name=poloxue",nil,)r, err := client.Do(request)if err != nil {panic(err)}defer func() {_ = r.Body.Close()}()fmt.Println(r.Request.URL)
}func main() {// 重定向// 返回一个状态码,3xx 301 302 303 307 308redirectForbidden()
}

相关文章:

  • UE5——源码阅读——4——引擎预初始化
  • 【PWN · heap | unlink】hitcon2014_stkof
  • Box2d 物理画线,Cocos Creator 3.8
  • Ubuntu定时执行日志备份及删除脚本
  • PySpark 优雅的解决依赖包管理
  • 如何在idea中使用maven搭建tomcat环境
  • 【网络协议】聊聊HTTPS协议
  • 一 Java初探
  • NoSQL数据库使用场景以及架构介绍
  • stable diffusion安装踩坑之clip安装、git报错
  • C4D 2024终于发布,速度翻倍!模拟模块大更新!
  • 【数据结构与算法】JavaScript实现哈希表
  • JavaEE-博客系统2(功能设计)
  • CM3D2 汉化杂记
  • 048基于web+springboot的校园资料分享平台
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CentOS6 编译安装 redis-3.2.3
  • Cumulo 的 ClojureScript 模块已经成型
  • express如何解决request entity too large问题
  • Gradle 5.0 正式版发布
  • Java|序列化异常StreamCorruptedException的解决方法
  • JS笔记四:作用域、变量(函数)提升
  • laravel with 查询列表限制条数
  • php的插入排序,通过双层for循环
  • Python 基础起步 (十) 什么叫函数?
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 开源SQL-on-Hadoop系统一览
  • 力扣(LeetCode)56
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端面试之闭包
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (5)STL算法之复制
  • (poj1.3.2)1791(构造法模拟)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (分布式缓存)Redis分片集群
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)重识new
  • ***利用Ms05002溢出找“肉鸡
  • .cn根服务器被攻击之后
  • .Net MVC4 上传大文件,并保存表单
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NetCore项目nginx发布
  • .NET设计模式(8):适配器模式(Adapter Pattern)