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"}
다른 모든 필드가 표시되는 것처럼 여기 내 브라우저 네트워크 탭.
최고.
답변
CORS 요청의 경우 브라우저는 기본적으로 다음 응답 헤더에만 액세스 할 수 있습니다.
- 캐시 제어
- 내용 언어
- 컨텐츠 타입
- 만료
- 마지막 수정
- 프라 그마
클라이언트 앱이 다른 헤더에 액세스 할 수있게 하려면 서버 에서 Access-Control-Expose-Headers 헤더를 설정해야합니다.
Access-Control-Expose-Headers: Access-Token, Uid
답변
귀하의 답변에 대한 Nick Uraltsev에게 감사드립니다.
당신이 사용하는 사람들을 위해 nodejs을 함께 고르 :
...
const cors = require('cors');
const corsOptions = {
exposedHeaders: 'Authorization',
};
app.use(cors(corsOptions));
...
당신이 방법으로 응답을 보내는 경우 res.header('Authorization', `Bearer ${token}`).send();
답변
나는 같은 문제에 직면했다. 나는 “WebSecurity.java”에서 이것을 수행했다. cors 구성의 setExposedHeaders 메소드에 관한 것이다.
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowCredentials(true);
configuration.setAllowedOrigins(Arrays.asList(FRONT_END_SERVER));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
configuration.setAllowedHeaders(Arrays.asList("X-Requested-With","Origin","Content-Type","Accept","Authorization"));
// This allow us to expose the headers
configuration.setExposedHeaders(Arrays.asList("Access-Control-Allow-Headers", "Authorization, x-xsrf-token, Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, " +
"Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
나는 그것이 작동하기를 바랍니다.
답변
asp.net 코어에서 동일한 문제에 직면했습니다.
public static class CorsConfig
{
public static void AddCorsConfig(this IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.WithExposedHeaders("X-Pagination")
);
});
}
}
답변
공식 문서 에 따르면 :
서버가 응답 한 HTTP 헤더를 원하는 경우 도움이 될 수 있습니다 . 모든 헤더 이름은 소문자이며 대괄호 표기법을 사용하여 액세스 할 수 있습니다. 예 : response.headers['content-type']
헤더 : {},
답변
SpringBoot2의 경우 다음을 추가하십시오.
httpResponse.setHeader("Access-Control-Expose-Headers", "custom-header1, custom-header2");
당신의 CORS 필터 구현 코드에 허용 된 것으로 custom-header1
및 custom-header2
등
답변
장고의 도움
CORS_EXPOSE_HEADERS = [
'your header'
]