为了账号安全,请及时绑定邮箱和手机立即绑定

无法访问前端应用程序中的自定义响应标头

无法访问前端应用程序中的自定义响应标头

Go
海绵宝宝撒 2023-07-26 19:50:29
我无法访问后端服务器提供的自定义响应标头。服务器是用 Go 编写的。我正在尝试使用 axios 作为我的 HTTP 客户端来访问它。我可以在 chrome 开发工具控制台中看到标头,但无法通过 axios 访问标头。Chrome 开发工具响应标头。我希望获得底部的 x-***-token我可以通过 axios 访问的标头(启用 cors)但是,当我在禁用 cors 的情况下运行 chrome 时,我可以通过 axios 访问标头:open -n -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir="/tmp/chrome_dev_test" --disable-web-security我可以通过 axios 访问的标头(cors 已禁用)这告诉我这不是 axios 的问题,而是我的标头配置的问题。以下是我们如何配置标头,我正在尝试访问x-custom-token标头:func allowCORS(h http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {    if origin := r.Header.Get("Origin"); origin != "" && contains(cors, origin) {        w.Header().Set("Access-Control-Allow-Origin", origin)    }    if contains(cors, "*") {        w.Header().Set("Access-Control-Allow-Origin", "*")    }    if r.Method == "OPTIONS" || r.Method == "GET" && r.Header.Get("Access-Control-Request-Method") != "" &&        w.Header().Get("Access-Control-Allow-Origin") != "" {        headers := []string{"Content-Type", "Accept-Encoding", "X-CSRF-Token", "Authorization", "accept", "origin", "Cache-Control", "X-Requested-With", "x-custom-token"}        w.Header().Set("Access-Control-Allow-Headers", strings.Join(headers, ","))        methods := []string{"GET", "HEAD", "POST", "PUT", "DELETE"}        w.Header().Set("Access-Control-Allow-Methods", strings.Join(methods, ","))        expose := []string{"x-custom-token"}        w.Header().Set("Access-Control-Expose-Headers", strings.Join(expose, ","))        return    }    h.ServeHTTP(w, r)})}谁能告诉我我设置的标题不正确吗?
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

您的问题是您仅针对 OPTIONS 请求公开。

在您的 if 语句中,您的标准之一是r.Header.Get("Access-Control-Request-Method") != "".

此标头通常仅在飞行前请求中使用,因此您的公开标头不会写入 GET 或其他方法。

此外,您的语句在写入标题后返回。这对于飞行前是正确的,但会导致其他方法无法发送任何内容。

解决方案 - 调整逻辑以将公开标头与飞行前标头分开处理。



查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信