2016-12-23 2 views
3

Я борюсь с реализацией CORS в моем проекте клиент-сервер. CORS означает, что вызовы из другого источника (например, другого домена) разрешены только в том случае, если заголовок содержит значение CORS.Нужен ли RESTful API для реализации CORS в любое время?

Так, например, если я размещаю сайт на www.domain.com и вызываю RESTful API в том же домене, все в порядке.

Но если я разрабатываю API для мобильного приложения, например, мобильный телефон не имеет того же домена API. Как это могло бы работать вместе? Нужно ли мне каждый раз выполнять CORS в моем сервисе?

Вопрос возникает, так как я разрабатываю приложение Angular 2, которое работает в dev на localhost: 4200, а мой API работает на localhost: 8080 (build with Spring Boot). Таким образом, клиент выдает исключение, потому что это не то же самое происхождение (другой порт).

Цель состоит в том, чтобы разместить мой API на корневом сервере где-то в Интернете, а клиент на другом провайдере веб-пространства (потому что это всего лишь одно приложение страницы). Api работает с http://1.2.3.4:8080/api/v1, а клиент с http://www.example.com:80/myPage

Итак, нужно ли каждый раз внедрять Cross-Origin? Или есть другой способ понять это?

+1

Да, если вы работаете в угловом 2 приложения на другом домене сервер должен быть CORS -aware. К счастью, это довольно легко с Spring Boot: https://spring.io/guides/gs/rest-service-cors/ – jonrsharpe

+0

@jonrsharpe Спасибо за ссылку! но почему мобильное устройство НЕ имеет другое происхождение? – Surras

+2

@Surras Поскольку CORS - это проверка браузера, ваш мобильный телефон не использует браузер для рендеринга вашего приложения, по крайней мере, не полный. – Supamiu

ответ

1

Из-за соображений безопасности браузеров применять политики ИЭ тот же происхождения, сценарий (обычно AJAX звонки) работает в веб-страницы не могут получить доступ к данным с другой страницы, проживающих в другой домен. В некоторых случаях это может быть ограничительным. CORS (Совместное использование ресурсов Cross Origin) - это спецификация W3C, поддерживаемая большинством современных браузеров, чтобы указать, когда можно безопасно разрешать запросы на кросс-поиск.

В пружинной ботинок, позволяя CORS так же просто, как adding the @CrossOrigin annotation. Эта аннотация может быть добавлена ​​на уровне метода, чтобы включить только для этого конкретного сопоставления запросов или на уровне класса для включения для всего контроллера.

Вы можете указать домен и порт, разрешенные добавлением атрибута «originins» в аннотацию. Если он не указан, все источники разрешены по умолчанию (лучше избегать этого по соображениям безопасности).

Ниже приведен пример для того, чтобы CORS для домена example.com и порт 80 на уровне контроллера

@CrossOrigin(origins = "http://www.example.com:80") 
@RestController 
@RequestMapping("/yourmapping") 
public class YourController { 

} 
1

Да, вы разрабатываете API и хотите сделать его общедоступным и хотите, чтобы пользователи мобильных или других пользователей использовали его, вы должны всегда устанавливать CORS для любого сайта (*). Здесь вы можете прочитать больше информации:

https://spring.io/understanding/CORS

Смежные вопросы