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

朗福德(J.Langford):

我无法访问后端服务器提供的自定义主叫头。服务器是用Go编写的。我试图使用axios作为我的HTTP客户端访问它。我可以在chrome dev-tools控制台中看到标头,但无法通过axios访问标头。

chrome dev工具的响应标头。我希望在底部获得x-***令牌chrome开发工具。 响应头

我可以通过axios访问的标头(启用cors) 我可以通过axios访问的标题

但是,当我在禁用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)
})}

谁能告诉我我设置的标题错误吗?

PassKit:

您的问题是,您只公开接受OPTIONS请求。

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Ionic Angular应用程序中无法从HttpClient读取HttpResponse中的自定义标头

访问angularjs中的自定义http响应标头

如何在angularjs应用程序中为Bootstrap Popover添加自定义标头

angularjs httpprovider拦截器无法访问自定义http响应标头(CORS请求)的原因是什么?

Flask会话无法在React前端应用程序上创建cookie(使用set-cookie响应标头)

访问自定义模块中的“应用程序”

在ApiController中添加自定义响应标头

从响应中读取自定义标头值

在API中访问自定义标头

在Ruby on Rails中访问自定义标头变量

无法从前端JavaScript访问跨域响应标头

alexa 应用程序无法访问带有 https 端点的自定义技能。它返回“对不起,我不知道”或“对不起,我不确定”

通过webRequest.onBeforeSendHeaders设置自定义标头时,电子应用程序内iframe中的Cookie停止工作

如何为Spring Boot应用程序设置自定义Http标头“服务器”

无法在 React Native 应用程序中删除标头

无法访问自定义MessageBodyWriter中的HttpServletRequest

为什么我无法访问此头盔图表定义的应用程序?(在Minikube中)

如何访问有角$ http响应自定义标头?

tvOS 中的自定义 UIWindow 使应用程序对键盘输入无响应

如何发送自定义HTTP标头作为响应?

自定义响应标头Jersey / Java

从Elm中的HTTP响应中读取自定义标头

将自定义标头添加到.Net中的所有Swagger响应中

从OS X上的Java应用程序中的自定义URI方案访问参数

访问自定义脚本中的应用程序名称

在自定义启动器中访问Spring应用程序名称

如何在所有模板中访问自定义对象表达应用程序?

如何在自定义 Zapier 应用程序中从 Xero 访问特定的订单项值?

无法将自定义应用程序添加到团队管理中的新自定义策略