客户端无法接收Go服务器正确响应,点击按钮返回HTML代码求助
问题分析与解决
你遇到的问题根源在于端口冲突和跨域配置不匹配,导致fetch请求并未真正到达Go服务器,反而拿到了Live Server提供的本地HTML文件。
具体原因
- 端口冲突:VS Code的Live Server默认监听
5500端口,而你的Go服务器也配置为监听5500,两者无法同时运行。若先启动Live Server,Go服务器会因端口占用启动失败(可查看Go控制台日志确认);若先启动Go服务器,Live Server会自动切换到其他端口(如5501)。 - 跨域配置错误:Go服务器设置的
Access-Control-Allow-Origin为http://localhost:5500,但如果Live Server实际运行在其他端口,浏览器会因跨域限制拦截请求;更可能的情况是你先启动了Live Server,Go服务器未正常运行,fetch请求直接返回了Live Server的HTML内容。
解决方案
步骤1:修改Go服务器端口
将Go服务器监听端口改为与Live Server不冲突的数值,比如8080:
func main() { http.HandleFunc("/", handler) // 修改监听端口为8080 err := http.ListenAndServe(":8080", nil) if err != nil { log.Println("服务器启动失败:", err) return } log.Println("Server started on port 8080") }
步骤2:更新跨域允许来源
查看Live Server启动后浏览器地址栏的实际地址(如http://localhost:5500或http://localhost:5501),修改Go服务器的Access-Control-Allow-Origin配置:
func handler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") // 替换为Live Server的实际地址 w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5500") fmt.Fprint(w, "Hello from the server!") }
测试阶段可临时用*允许所有来源(生产环境禁止):
w.Header().Set("Access-Control-Allow-Origin", "*")
步骤3:调整JavaScript的fetch目标地址
将fetch请求地址改为Go服务器的新端口8080:
fetch("http://localhost:8080")
步骤4:正确启动服务
- 先启动Go服务器,确认控制台输出
Server started on port 8080。 - 再用Live Server启动客户端HTML页面,确认浏览器地址栏显示正确的客户端地址。
验证
点击按钮后,按钮应显示Hello from the server!。若仍有问题,打开浏览器开发者工具(F12),查看网络标签页,确认fetch请求地址为http://localhost:8080,响应状态为200且内容符合预期。
内容的提问来源于stack exchange,提问作者ac3gbsha7
相关产品推荐
相关产品推荐

