Содержание
- 1 Шаг 1:
- 2 Шаг 2:
- 3 Шаг 3:
- 4 Пример 1: веб-сервер Java-Джерси
- 5 Чтобы это исправить, давайте попробуем добавить ниже 4 заголовка в ответ сервера:
- 6 Код фильтра CORS:
- 7 Результат:
- 8 Пример 2: HTTP-сервер Apache
- 9 Пример 3: сервер .NET может настроить это в web.config, как показано ниже
- 10 Пример 4: для причала (7 и выше)
- 11 Пример 5: сервер Apache Tomcat (версия 7.0.41 +)
- 12 Пример 6: в PHP
Как исправить эту ошибку во время client-server связь? Сервер отправляет данные в формате JSON или XML, и клиент создает исключение ниже указанного.
|
1
2
3
|
XMLHttpRequest не может загрузить https : //crunchify.com/api/test.
нет 'Access-Control-Allow-Origin' заголовок представить на запрошенный ресурс.
происхождения 'ноль' является поэтому нет разрешенный доступ .
|
Обычные веб-страницы могут использовать объект XMLHttpRequest для отправки и получения данных с удаленных серверов, но они ограничены одной и той же политикой происхождения. Расширения не так ограничены. Расширение может общаться с удаленными серверами за пределами своего источника, если оно сначала запрашивает разрешения между источниками.
Кроме того, если у вас есть вопросы ниже, то вы находитесь в правильном месте:
- Общие сведения о распределении ресурсов между источниками (фильтры CORS)
- Могу ли я использовать общий доступ к ресурсам
- Как включить обмен ресурсами между источниками
- Что такое междоменный Ajax с распределением ресурсов между источниками
- Что такое контроль доступа 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. Интерфейс реализован фильтрами ответа контейнера. По умолчанию, т.е. если к классу реализации фильтра не применяется привязка имени, экземпляр фильтра применяется глобально к любому исходящему ответу.
Чтобы это исправить, давайте попробуем добавить ниже 4 заголовка в ответ сервера:
- Access-Control-Allow-Origin
- Access-Control-Allow-методы
- Access-Control-Max-Age
- Access-Control-Allow-Headers
Код фильтра CORS:
|
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 файл.
|
1
2
3
|
< IfModule mod_headers . с >
Заголовок установлен Access — Control — Allow — Origin *
< / IfModule >
|
Пример 3: сервер .NET может настроить это в 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.
|
1
2
3
4
5
6
7
8
|
< фильтр >
< filter — name > cross — origin < / filter — name >
< фильтр — класс > орг . затмение. Пристань. сервлеты . CrossOriginFilter < / filter — class >
< / filter >
< фильтр — отображение >
< filter — name > cross — origin < / filter — name >
< url — шаблон > / * < / url — шаблон >
< / filter — mapping >
|
Пример 5: сервер Apache Tomcat (версия 7.0.41 +)
|
1
2
3
4
5
6
7
8
|
< фильтр >
< filter — name > CorsFilter < / filter — name >
< фильтр — класс > орг . апач . каталина . фильтры . CorsFilter < / filter — class >
< / filter >
< фильтр — отображение >
< filter — name > CorsFilter < / filter — name >
< url — шаблон > / * < / url — шаблон >
< / filter — mapping >
|
Пример 6: в PHP
|
1
2
3
|
PHP
заголовок ( «Access-Control-Allow-Origin: *» ) ;
?>
|
Пожалуйста, дайте мне знать, если у вас есть еще вопросы по этому поводу. Список всех учебных пособий по Java можно найти здесь .
0.00 (0%) 0 votes












