Axios如何获取响应头字段

322

我正在使用React和Redux构建前端应用程序,并使用axios执行请求。我想要访问响应头中的所有字段。在我的浏览器中,我可以检查标头并看到我需要的所有字段都存在(例如令牌,UID等),但是当我调用时...

const request = axios.post(`${ROOT_URL}/auth/sign_in`, props);
request.then((response)=>{
  console.log(response.headers);
});

我只得到

Object {content-type: "application/json; charset=utf-8", cache-control: "max-age=0, private, must-revalidate"}

这是我的浏览器网络标签页,你可以看到所有其他字段都存在。

enter image description here

最好的。


1
如果您打印axios.defaults.headers,是否会显示您缺少的任何内容?某些标头是在该级别配置的,而不是在每个请求的级别上(请参见https://github.com/mzabriskie/axios#global-axios-defaults)。 - Ben Hare
6
是不是axios.defaults.headers用于配置请求头参数?我需要访问响应头。@BenHare - TWONEKSONE
2
顺便提一句,你所谓的“request”并不是请求。它是你响应的承诺。你的请求是你作为参数传递给post()方法的内容。 - Daniel B
17个回答

2

试试这样做

            .then(res =>{
                console.log(res);
                console.log(res.headers['x-total-count']);
                setTotalRecords(res.headers['x-total-count']);
                setTableData(res.data);
            });

2

对于SpringBoot2,只需添加以下内容

httpResponse.setHeader("Access-Control-Expose-Headers", "custom-header1, custom-header2");

将以下内容添加到您的CORS过滤器实现代码中,以使custom-header1custom-header2等被列入白名单。

1
如果您在使用 Django 时没有使用 django-cors-headers,则可以编写自定义中间件。
class CustomCorsMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response['Access-Control-Expose-Headers'] = 'MY-HEADER, ANOTHER-HEADER'

        return response

您还可以在此设置其他CORS头文件。
然后,您应该通过将其插入到项目的settings.py文件中的MIDDLEWARE列表的开头来注册您的中间件。
MIDDLEWARE = [
    'myapp.middleware.CustomCorsMiddleware',
    ...
]

1

寻求 Django 帮助

CORS_EXPOSE_HEADERS = [
        'your header'
    ]

至少对于Flask CORS,您还可以传递一个字典,其中每个键都命名为CORS_<property>(在本例中为expose_headers),并在CORS(app,**cors_config)语句中传递带有所需值的字典。请参见此处的文档。 - cpinamtz

1

对于Spring Boot 2,如果您不想使用全局CORS配置,则可以通过方法或类/控制器级别使用@CrossOrigin注释和exposedHeaders属性来实现。

例如,要为YourController方法添加标题authorization

@CrossOrigin(exposedHeaders = "authorization")
@RestController
public class YourController {
    ...
}

1

[进一步阐述@vladimir所说的内容]

如果你正在使用Django
django-cors-headers 来允许/控制CORS, 你应该在你的settings.py中设置以下内容:

CORS_EXPOSE_HEADERS = ['yourCustomHeader']

0
如果您正在使用Spring Boot 3和Spring Security 6或更高版本,可以尝试以下方法:
在您的@Configuration类中包含以下内容:
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
    
        config.addAllowedOrigin("*");
        config.addAllowedMethod("*");
    
        // 允许多个头部
        config.addAllowedHeader("Authorization");
        config.addAllowedHeader("X-Custom-Header");
        config.addAllowedHeader("Another-Header");
    
        // 公开自定义头部
        config.addExposedHeader("Authorization");
        config.addExposedHeader("X-Custom-Header");
        config.addExposedHeader("Another-Header");
    
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }

请注意,上述配置非常通用,使用时需谨慎。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接