CORS(Cross-Origin Resource Sharing)란 무엇입니까? Java Jersey 웹 서버에 추가하는 방법은 무엇입니까?

게시 됨: 2014-07-19

Crunchify의 CORS(Cross-Origin Resource Sharing) 자습서

client-server 통신 중에 이 오류를 수정하는 방법은 무엇입니까? 서버는 JSON 또는 XML 형식으로 데이터를 보내고 클라이언트는 예외 아래에 throw합니다.

일반 웹 페이지는 XMLHttpRequest 개체를 사용하여 원격 서버에서 데이터를 보내고 받을 수 있지만 동일한 원본 정책에 의해 제한됩니다. 확장은 그렇게 제한되지 않습니다. 확장은 먼저 교차 출처 권한을 요청하는 한 원본 외부의 원격 서버와 통신할 수 있습니다.

또한 아래 질문이 있는 경우 올바른 위치에 있는 것입니다.

  1. 교차 출처 리소스 공유 이해(CORS 필터)
  2. 교차 출처 리소스 공유를 사용할 수 있습니까?
  3. 교차 출처 리소스 공유를 활성화하는 방법
  4. Cross-Origin 리소스 공유를 사용하는 Cross-domain Ajax란 무엇입니까?
  5. CORS(HTTP 액세스 제어)란 무엇입니까?

CORS(교차 출처 리소스 공유)는 웹 브라우저에서 교차 출처 요청을 가능하게 하기 위해 W3C에서 지원하는 메커니즘입니다. CORS가 작동하려면 브라우저와 서버 모두의 지원이 필요합니다. 이것은 Apache Tomcat 및 기타 내장 웹 서버와 같은 웹 컨테이너에 대한 서버 측 CORS의 Java Jersey 웹 서버 필터 구현입니다.

Crunchify CORSFilter 저지 서버 예

1 단계:

응답에는 리소스 콘텐츠에 대한 액세스를 허용하기 위해 요청이 시작된 출처를 값으로 하는 Access-Control-Allow-Origin 헤더가 포함될 수 있습니다. 사용자 에이전트는 요청이 시작된 곳의 값과 출처가 일치하는지 확인합니다.

2 단계:

사용자 에이전트는 프리플라이트 요청을 통해 교차 출처 리소스가 주어진 출처에서 간단하지 않은 방법을 사용하여 요청을 수락할 준비가 되었는지 확인할 수 있습니다. 이것은 사용자 에이전트에 의해 다시 확인됩니다.

3단계:

서버 측 애플리케이션은 HTTP 요청이 Origin 헤더를 통해 사용자 에이전트에 의해 교차 출처 요청으로 간주되었음을 발견할 수 있습니다. 이 확장을 통해 서버 측 응용 프로그램은 서비스할 의향이 있는 교차 출처 요청에 제한(예: 아무것도 반환하지 않음)을 적용할 수 있습니다.

이제 예제를 시작하겠습니다.

예-1: 자바 저지 웹 서버

몇 주 전에 저는 Java Application Startup 동안 Embedded HTTP Jersey 서버를 시작하는 방법에 대한 기사를 썼습니다. 이 게시물에서는 동일한 Jersey 서버에 CORS 필터를 추가하는 방법에 대한 단계를 다룹니다.

ContainerResponseFilter를 확장해야 합니다. 컨테이너 응답 필터에 의해 구현된 인터페이스입니다. 기본적으로, 즉 필터 구현 클래스에 이름 바인딩이 적용되지 않은 경우 필터 인스턴스는 나가는 응답에 전역적으로 적용됩니다.

이 문제를 해결하기 위해 서버 응답에 4개의 헤더를 추가해 보겠습니다.

  1. 접근-제어-허용-원점
  2. 액세스 제어 허용 방법
  3. 액세스 제어 최대 연령
  4. 액세스 제어 허용 헤더

CORS 필터 코드:

이전 튜토리얼에서 JerseyEmbeddedHTTPServerCrunchify.java를 수정했습니다.

createHttpServer()에 아래 줄을 추가하고 서버를 다시 시작하십시오.

결과:

http://localhost:8085/api

CORS 필터를 사용하여 응답 헤더를 Crunchify

다음은 헤더 세부정보입니다.

CORS 필터가 없는 Crunchify 응답 헤더

예-2: Apache HTTP 서버

헤더를 표시하려면 <Directory>, <Location> 및 <Files> 섹션 또는 .htaccess 파일 내에 다음 줄을 추가할 수 있습니다.

예-3: .NET 서버는 web.config에서 아래와 같이 구성할 수 있습니다.

예-4: Jetty(7 이상)의 경우

jetty-servlets JAR을 WEB-INF/lib에 포함하고 이것을 WEB-INF/web.xml에 병합합니다.

예-5: Apache Tomcat 서버(v 7.0.41 이상)

예-6: PHP에서

이에 대해 더 궁금한 사항이 있으면 알려주세요. 모든 Java 자습서 목록은 여기에서 찾을 수 있습니다.