Домой Учебники по Java и J2EE Что такое перекрестное распределение ресурсов (CORS) — как добавить его на свой...

Что такое перекрестное распределение ресурсов (CORS) — как добавить его на свой веб-сервер в Джерси?

390
0

Как исправить эту ошибку во время client-server связь? Сервер отправляет данные в формате JSON или XML, и клиент создает исключение ниже указанного.

1
2
3
XMLHttpRequest не может загрузить https : //crunchify.com/api/test.
нет 'Access-Control-Allow-Origin' заголовок представить на запрошенный ресурс.
происхождения 'ноль' является поэтому нет разрешенный доступ .

Обычные веб-страницы могут использовать объект XMLHttpRequest для отправки и получения данных с удаленных серверов, но они ограничены одной и той же политикой происхождения. Расширения не так ограничены. Расширение может общаться с удаленными серверами за пределами своего источника, если оно сначала запрашивает разрешения между источниками.

Кроме того, если у вас есть вопросы ниже, то вы находитесь в правильном месте:

  1. Общие сведения о распределении ресурсов между источниками (фильтры CORS)
  2. Могу ли я использовать общий доступ к ресурсам
  3. Как включить обмен ресурсами между источниками
  4. Что такое междоменный Ajax с распределением ресурсов между источниками
  5. Что такое контроль доступа HTTP (CORS)

CORS (Cross Origin Resource Sharing) — это механизм, поддерживаемый W3C для включения запросов к перекрестным источникам в веб-браузерах. Для работы CORS требуется поддержка как браузера, так и сервера. Это реализация фильтра веб-сервера Java Jersey для серверного CORS для веб-контейнеров, таких как Apache Tomcat и другие встроенные веб-серверы .

Шаг 1:

Ответ может включать в себя заголовок Access-Control-Allow-Origin с источником источника запроса в качестве значения, чтобы разрешить доступ к содержимому ресурса. Пользовательский агент проверяет, совпадают ли значение и происхождение источника запроса.

Шаг 2:

Пользовательские агенты могут определить с помощью предварительного запроса, готов ли ресурс с несколькими источниками для приема запросов, используя непростой метод, от данного источника. Это снова подтверждено пользовательским агентом.

Шаг 3:

Серверные приложения могут обнаруживать, что пользовательский агент считал HTTP-запрос перекрестным источником через заголовок Origin. Это расширение позволяет приложениям на стороне сервера применять ограничения (например, ничего не возвращать) к запросам разных источников, которые они готовы обслуживать.

Теперь давайте начнем с примеров.

Пример 1: веб-сервер Java-Джерси

Пару недель назад я написал статью о том, как запустить встроенный HTTP-сервер Джерси во время запуска Java-приложения . В этом посте будут описаны действия по добавлению фильтра CORS на тот же сервер Джерси.

Нам нужно расширить ContainerResponseFilter. Интерфейс реализован фильтрами ответа контейнера. По умолчанию, т.е. если к классу реализации фильтра не применяется привязка имени, экземпляр фильтра применяется глобально к любому исходящему ответу.

ЧИТАТЬ ТАКЖЕ:  Как читать файл в Java и подсчитывать общее количество символов, слов и строк

Чтобы это исправить, давайте попробуем добавить ниже 4 заголовка в ответ сервера:

  1. Access-Control-Allow-Origin
  2. Access-Control-Allow-методы
  3. Access-Control-Max-Age
  4. Access-Control-Allow-Headers

Код фильтра CORS:

CrunchifyCORSFilter.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
пакет ком . crunchify. учебник ;
/ **
*
* @author Crunchify.com
* /
импорт ком . солнце. Джерси. spi . контейнер . ContainerRequest ;
импорт ком . солнце. Джерси. spi . контейнер . ContainerResponse ;
импорт ком . солнце. Джерси. spi . контейнер . ContainerResponseFilter ;
импорт javax . WS. RS. ядро. Ответ ;
импорт javax . WS. RS. ядро. Ответ . ResponseBuilder ;
общественности учебный класс CrunchifyCORSFilter инвентарь ContainerResponseFilter {
     общественности Фильтр ContainerResponse ( Требование ContainerRequest , ContainerResponse crunchifyContainerResponse ) {
         ResponseBuilder crunchifyResponseBuilder знак равно Ответ . fromResponse ( crunchifyContainerResponse . getResponse ( ) ) ;
        
         // * (разрешить со всех серверов) ИЛИ https://crunchify.com/ ИЛИ http://example.com/
         crunchifyResponseBuilder . заголовок ( «Access-Control-Allow-Origin» , https://crunchify.com/ )
        
         // Как часть ответа на запрос, какие методы HTTP могут использоваться во время фактического запроса.
         , заголовок ( «Access-Control-Allow-Methods» , «API, CRUNCHIFYGET, GET, POST, PUT, UPDATE, OPTIONS» )
        
         // Как долго результаты запроса могут быть кэшированы в кеше результатов.
         , заголовок ( «Access-Control-Max-Age» , 151200 )
        
         // Как часть ответа на запрос, какие заголовки HTTP можно использовать во время фактического запроса.
         , заголовок ( «Access-Control-Allow-Headers» , х-запрошенный-с-тип-контента ) ;
         строка crunchifyRequestHeader знак равно REQ. getHeaderValue ( Access-Control-Request-Headers ) ;
         если ( ноль ! знак равно crunchifyRequestHeader &&! crunchifyRequestHeader.equals (null)) {
crunchifyResponseBuilder.header («Access-Control-Allow-Headers», crunchifyRequestHeader);
         }
         crunchifyContainerResponse . setResponse ( crunchifyResponseBuilder . build ( ) ) ;
         вернуть crunchifyContainerResponse ;
     }
}

Модификация в JerseyEmbeddedHTTPServerCrunchify.java из предыдущего урока .

Просто добавьте строку ниже в createHttpServer () и перезапустите сервер .

1
crunchifyResourceConfig . getContainerResponseFilters ( ) . add ( CrunchifyCORSFilter . class ) ;

Результат:

HTTP: // локальный: 8085 / апи

Вот подробности заголовков.

Пример 2: HTTP-сервер Apache

Чтобы открыть заголовок, вы можете добавить следующую строку в разделы , и или внутри .htaccess файл.

файл .htaccess

1
2
3
< IfModule mod_headers . с >
   Заголовок установлен AccessControlAllowOrigin *
< / IfModule >

Пример 3: сервер .NET может настроить это в web.config, как показано ниже

web.config

1
2
3
4
5
6
< система . webServer >
   < httpProtocol >
     < customHeaders >
       < add name = Access-Control-Allow-Origin value = your_clientside_websiteurl / >
     < / customHeaders >
< система . webServer >

Пример 4: для причала (7 и выше)

Включите JAR-серверы Jetty в ваш WEB-INF / lib и объедините его с вашим WEB-INF / web.xml.

web.xml

1
2
3
4
5
6
7
8
   < фильтр >
       < filtername > crossorigin < / filtername >
       < фильтркласс > орг . затмение. Пристань. сервлеты . CrossOriginFilter < / filterclass >
   < / filter >
   < фильтротображение >
       < filtername > crossorigin < / filtername >
       < urlшаблон > / * < / urlшаблон >
   < / filtermapping >

Пример 5: сервер Apache Tomcat (версия 7.0.41 +)

web.xml

1
2
3
4
5
6
7
8
< фильтр >
   < filtername > CorsFilter < / filtername >
   < фильтркласс > орг . апач . каталина . фильтры . CorsFilter < / filterclass >
< / filter >
< фильтротображение >
   < filtername > CorsFilter < / filtername >
   < urlшаблон > / * < / urlшаблон >
< / filtermapping >

Пример 6: в PHP

1
2
3
заголовок ( «Access-Control-Allow-Origin: *» ) ;
?>

Пожалуйста, дайте мне знать, если у вас есть еще вопросы по этому поводу. Список всех учебных пособий по Java можно найти здесь .

Что такое перекрестное распределение ресурсов (CORS) — как добавить его на свой веб-сервер в Джерси?

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь