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

一、http的重定向


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

cpp 复制代码
package main

import (
	"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 308
	redirectForbidden()
}
相关推荐
aesthetician7 小时前
WebSocket: 实时通信的脉动:深度解析与 TypeScript 实践
websocket·网络协议·typescript
moxiaoran57538 小时前
Go语言的文件操作
开发语言·后端·golang
云小逸8 小时前
【网络通信】TCP核心原理深度解析:三次握手/四次挥手为基,拥塞控制与慢启动核心精讲
网络·网络协议·tcp/ip
赴前尘8 小时前
记一次golang进程执行卡住的问题排查
开发语言·后端·golang
深蓝电商API8 小时前
httpx 异步客户端处理 WebSocket 数据
websocket·网络协议·httpx
苏渡苇9 小时前
用 Spring Boot 项目给工厂装“遥控器”:一行 API 控制现场设备!
java·人工智能·spring boot·后端·网络协议·边缘计算
北京耐用通信9 小时前
电子制造行业:耐达讯自动化Profinet转DeviceNet网关助力工业相机高效互联
人工智能·数码相机·物联网·网络协议·自动化·信息与通信
希赛网9 小时前
华为认证数通备考,以太网交换机的基础原理与应用
网络协议·华为认证·数通·希赛·交换路由·交换机基础与应用·以太网交换
小李独爱秋9 小时前
计算机网络经典问题透视:无线局域网名词中DCF和PCF的含义是什么?
网络协议·计算机网络·网络安全·信息与通信·dcf·pcf
酣大智9 小时前
FTP--文件传输协议
运维·网络·网络协议·tcp/ip·华为