如何解决 XMLHttpRequest 跨域请求被拒绝的 CORS 错误


本文详解因端口不同导致的跨域资源共享(cors)问题,指导你在 go 后端服务中正确添加 `access-control-allow-origin` 等响应头,使前端(如 dropzone)能成功向 `http://localhost:9090/receive` 发起 post 请求。

当你通过 Nginx(运行在 https://www./link/e91d9d8a18bc230d88e9241865958431)提供 HTML 页面,而该页面中的 Dropzone 组件尝试向 Go 服务(http://localhost:9090/receive)发起 POST 文件上传请求时,浏览器会触发 跨域资源共享(CORS)预检机制。尽管协议(http)和主机名(localhost)相同,但端口 9009 ≠ 9090,已构成不同源(RFC 6454 §5),因此浏览器拒绝响应——除非后端明确允许。

要解决此问题,需在 Go 服务的 HTTP 处理器中添加标准 CORS 响应头。以下是推荐的轻量级实现方式(无需第三方库):

func receiveHandler(w http.ResponseWriter, r *http.Request) {
    // 允许指定源(开发环境可设为 "*",生产环境建议精确指定)
    w.Header().Set("Access-Control-Allow-Origin", "https://www./link/e91d9d8a18bc230d88e9241865958431")
    // 允许携带凭证(如 cookies、Authorization header),若需则开启;注意:此时 Origin 不能为 "*"
    // w.Header().Set("Access-Control-Allow-Credentials", "true")
    w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type, X-Requested-With")

    // 处理预检请求(OPTIONS)
    if r.Method == "OPTIONS" {
        w.WriteHeader(http.StatusOK)
        return
    }

    // 实际业务逻辑:处理文件上传
    if r.Method != "POST" {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }

    // 示例:解析 multipart 表单
    err := r.ParseMultipartForm(32 << 20) // 32MB max memory
    if err != nil {
        http.Error(w, "Unable to parse form", http.StatusBadRequest)
        return
    }

    // ... 处理文件、保存等逻辑
    w.WriteHeader(http.StatusOK)
    w.Write([]byte("Upload received"))
}

⚠️ 关键注意事项

  • Access-Control-Allow-Origin 的值*不可同时设为 `和启用Access-Control-Allow-Credentials: true**,否则浏览器将拒绝请求。若前端需携带 Cookie 或认证头,请明确指定源(如https://www./link/e91d9d8a18bc230d88e9241865958431`);
  • 必须显式处理 OPTIONS 预检请求,返回 200 OK 并带上 CORS 头,否则预检失败,后续 POST 不会发出;
  • 若使用 Nginx 代理 Go 服务,也可在 Nginx 层统一添加 CORS 头(适用于多后端场景),但 Go 层控制更精准、调试更直接;
  • 生产部署时,务必根据实际前端域名(如 https://app.example.com)配置 Allow-Origin,避免过度开放安全策略。

完成上述配置后,重启 Go 服务,刷新页面并重新上传,即可消除 No 'Access-Control-Allow-Origin' header is present 错误,实现跨端口安全通信。


# html  # 前端  # go  # nginx  # cookie  # 处理器  # 浏览器  # app  # access  # 端口  # usb  # 后端  # 跨域  # 开发环境 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程  c++ namespace命名空间用法_c++避免命名冲突  Win11怎么快速锁屏_Win11一键锁屏快捷键Win+L【基础】  php和redis连接超时怎么办_phpredis调试连接问题汇总【指南】  Win11怎么关闭触摸键盘图标_Windows11任务栏系统托盘设置  电脑的“网络和共享中心”去哪了_Windows 11新版网络设置指南【新手】  Windows怎样拦截QQ浏览器广告_Windows拦截QQ浏览器广告方法【方法】  如何在 Django 中修改用户密码后保持会话不丢失  C++如何使用std::optional?(处理可选值)  如何使用Golang开发简单的聊天室消息存储_Golang WebSocket数据持久化方法  Windows服务无法启动错误1067是什么_进程意外终止的解决方法  Win11如何隐藏桌面图标 Win11一键隐藏/显示桌面图标【指南】  Python文件管理规范_工程实践说明【指导】  如何在Golang中使用container/heap实现堆_Golang container/heap最小堆方法  Windows系统被恶意软件破坏后的恢复策略_错误提示修复方式  如何在 Go 中高效缓存与分发网络视频流  如何在 VS Code 中正确配置并使用 NumPy  php485在php5.6下能用吗_php485旧版本兼容性问题说明【详解】  php转exe用什么工具打包快_高效打包软件推荐【汇总】  Python文件和流处理指南_高效读写大体积数据文件  如何诊断并终止卡死的 multiprocessing 子进程  Python日志系统设计与实现_高可观测性架构实战  如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】  如何使用Golang实现Web表单数据绑定_自动映射字段到结构体  php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】  如何解决同一段404代码在不同主机上表现不一致的问题  Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】  Win11怎么设置默认输入法 Win11固定中文输入法【步骤】  Win10闹钟铃声怎么自定义 Win10闹钟自定义铃声教程【方法】  Win11怎么设置环境变量_Win11配置Path路径变量【详解】  Win11怎么关闭通知中心_Windows11系统通知与专注助手设置  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  Win11任务栏颜色怎么改_Win11自定义任务栏配色设置【美化】  Win11声音忽大忽小怎么办 Win11音频增强功能关闭教程【修复】  如何使用Golang实现跨域请求支持_Golang CORS配置与处理方法  Win11怎么设置ip地址_Windows 11手动配置网络IP教程【详解】  php485函数执行慢怎么优化_php485性能提升小技巧【技巧】  Windows10怎么卸载预装软件_Windows10预装软件卸载步骤【教程】  Win11无法安装软件怎么办_Win11解除应用安装限制设置【修复】  Python代码测试策略_质量保障解析【教程】  如何使用Golang搭建Web开发环境_快速启动HTTP服务  Windows10如何更改桌面背景_Win10个性化幻灯片放映设置  Windows怎样关闭锁屏广告_Windows关闭锁屏广告方法【教程】  Win11键盘快捷键大全_Windows 11常用高效快捷键汇总【技巧】  Python随机数生成_random模块说明【指导】  Win11快速助手怎么用_Win11远程协助连接教程【工具】  c++中explicit(bool)的用法 c++条件性explicit【C++20】  Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】  本地php环境出现502错误_nginx或apache502badgateway解决技巧【解答】  如何在Golang中使用time处理时间_Golang time时间解析与格式化方法 

 2026-01-04

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.