[javascript] 요청 헤더 필드 Access-Control-Allow-Headers는 Access-Control-Allow-Headers에서 허용되지 않습니다.

게시 요청으로 파일을 서버로 보내려고하는데 파일을 보내면 오류가 발생합니다.

요청 헤더 필드 Content-Type은 Access-Control-Allow-Headers에서 허용되지 않습니다.

그래서 오류를 봤고 헤더를 추가했습니다.

$http.post($rootScope.URL, {params: arguments}, {headers: {
    "Access-Control-Allow-Origin" : "*",
    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}

그런 다음 오류가 발생합니다.

요청 헤더 필드 Access-Control-Allow-Origin은 Access-Control-Allow-Headers에서 허용되지 않습니다.

그래서 나는 그것을 구글 검색했고 내가 찾을 수있는 유일한 비슷한 질문은 반 답변을 제공 한 다음 주제로 닫았습니다. 어떤 헤더를 추가 / 제거해야합니까?



답변

POST 요청이 전송 된 서버 는 응답에Access-Control-Allow-Headers 헤더 등 을 포함해야합니다 . 고객의 요청에 넣는 것은 효과가 없습니다.

교차 출처 요청을 수락하고 Content-Type요청 헤더 등을 허용하도록 지정하는 것은 서버에 달려 있기 때문입니다 . 클라이언트는 주어진 서버가 CORS를 허용해야한다고 스스로 결정할 수 없습니다.


답변

나는 같은 문제가 있었다. jQuery 설명서 에서 다음을 발견했습니다.

이외의 다른 콘텐츠 형식을 설정 크로스 도메인 요청을 위해 application/x-www-form-urlencoded, multipart/form-data또는 text/plain프리 플라이트 옵션은 서버에 요청 전송하는 브라우저를 트리거합니다.

따라서 서버는 교차 요청을 허용하지만 허용하지 않지만 Access-Control-Allow-Headers오류가 발생합니다. 기본적으로 각도 콘텐츠 유형은입니다 application/json. 이는 OPTION 요청을 보내려고합니다. 각도 기본 헤더를 덮어 쓰거나 Access-Control-Allow-Headers서버 끝을 허용하십시오 . 다음은 각도 샘플입니다.

$http.post(url, data, {
    headers : {
        'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
    }
});


답변

그것이 누군가에게 도움이된다면 (이것은 dev 목적으로 만 허용해야하기 때문에 열악한 경우에도) 여기 동일한 문제가 발생했을 때 Java 솔루션입니다. [편집] 와일드 카드 *는 나쁜 해결책이므로 사용하지 마십시오. localhost실제로 로컬에서 작동하는 것이 필요한 경우 사용 하십시오.

public class SimpleCORSFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "my-authorized-proxy-or-domain");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    chain.doFilter(req, res);
}

public void init(FilterConfig filterConfig) {}

public void destroy() {}

}


답변

POST 요청이 전송 된 서버 는 응답에 Content-Type 헤더 를 포함해야합니다 .

다음은 하나의 사용자 지정 “X_ACCESS_TOKEN”헤더를 포함하여 포함 할 일반적인 헤더 목록입니다.

"X-ACCESS_TOKEN", "Access-Control-Allow-Origin", "Authorization", "Origin", "x-requested-with", "Content-Type", "Content-Range", "Content-Disposition", "Content-Description"

이것이 귀하의 http 서버 사용자가 요청을 보내는 웹 서버에 대해 구성 해야하는 것입니다.

서버 담당자에게 “Content-Length”헤더를 노출하도록 요청할 수도 있습니다.

그는이를 CORS (Cross-Origin Resource Sharing) 요청으로 인식하고 해당 서버 구성의 의미를 이해해야합니다.

자세한 내용은 다음을 참조하십시오.


답변

다음과 같이 PHP에서 적절한 헤더를 활성화 할 수 있습니다 :

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");


답변

다음은 nodejs에서 작동합니다.

xServer.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", 'http://localhost:8080');
  res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Accept');

  next();
});


답변

설정하려는 헤더 는 응답 헤더입니다. 응답하려는 서버에서 응답을 제공해야합니다.

그들은 클라이언트에 장소가 설정되어 있지 않습니다. 데이터를 소유 한 사이트 대신 권한 을 원하는 사이트에서 권한을 부여 할 수있는 경우 권한을 부여 할 수있는 방법이 의미가 없습니다 .