ZBLOG

req.Header.Set("Origin", "http://example.com")

在 Go 语言中,req.Header.Set("Origin", "http://example.com") 是用于设置 HTTP 请求头中的 Origin 字段的代码。以下是详细说明和注意事项:


作用

  1. 模拟跨域请求
    Origin 头通常由浏览器自动添加,用于标识请求的来源(协议 + 域名 + 端口)。在后端测试或爬虫场景中,可能需要手动设置以模拟浏览器的行为。

  2. CORS (跨域资源共享)
    服务端会根据 Origin 判断是否允许跨域请求。如果服务端配置了允许 http://example.com 的跨域请求,则此设置会生效。


代码示例

package main

import (
	"net/http"
)

func main() {
	// 创建一个新的 HTTP 请求
	req, err := http.NewRequest("GET", "https://api.target.com/data", nil)
	if err != nil {
		panic(err)
	}

	// 设置 Origin 头
	req.Header.Set("Origin", "http://example.com")

	// 发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
}

注意事项

  1. 浏览器限制
    在浏览器环境中,Origin 是只读的,无法通过 JavaScript(如 Fetch/XHR)手动修改。只有后端代码或工具(如 cURL、Postman)可以自由设置。

  2. 安全性
    服务端应验证 Origin 头的合法性,防止伪造跨域请求(CSRF 攻击)。

  3. 其他相关头部

    • Access-Control-Allow-Origin: 服务端返回的响应头,指定允许的源。
    • Referer: 类似功能,但包含完整路径且可能被隐私工具过滤。
  4. Go 的 Header 操作

    • Set(): 覆盖已存在的值。
    • Add(): 追加多个值(适用于多值的 Header)。

常见问题

  • 为什么设置了 Origin 仍被服务器拒绝?
    检查服务端的 CORS 配置是否正确(如 Nginx/Apache/后端框架的中间件)。

  • Referer 的区别?
    两者都可能用于来源判断,但:

    • Origin<scheme>://<hostname>:<port> (无路径)。
    • Referer<scheme>://<hostname>:<port>/path?query...

如果需要进一步调试 CORS ,可以通过浏览器的开发者工具(Network Tab)或抓包工具(如 Wireshark)分析请求头和响应头。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23956

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?