2015-11-25 2 views
2

Я вызываю один из моих API, используя curl следующим образом (cross origin).Перекрестные обратные вызовы из curl, работающие без необходимых заголовков

curl -H "Origin: foo.com" -H "Content-Type: application/json" -H "Authorization: Basic YWRtaW46YWRtaW4=" -v https://localhost:9443/api/v10/configs -k 

Я не установил необходимые крестовые заголовки на стороне сервера. Но работает API-вызов. Почему это?

на стороне API-интерфейса на стороне сервера, в вызове параметров Я устанавливаю только заголовок Разрешить.

@OPTIONS 
    public Response options() { 
     return Response.ok().header(HttpHeaders.ALLOW, "GET").build(); 
    } 

Следующие заголовки не установлены.

Access-Control-Allow-Methods: 
Access-Control-Allow-Origin: 
Access-Control-Allow-Headers: 

ответ

0

Вы можете прочитать HTTP access control (CORS), чтобы получить лучшее понимание того, как это работает, и основной цели она служит.

Просто некоторые в SNIPPET

По соображениям безопасности, браузеры ограничивают кросс-происхождения HTTP запросы инициируемые в скриптах. Например, XMLHttpRequest следует политике того же происхождения. Таким образом, веб-приложение, использующее XMLHttpRequest, могло только делать HTTP-запросы в своем собственном домене. Чтобы улучшить веб-приложения, разработчики попросили поставщиков браузеров разрешить XMLHttpRequest выполнять междоменные запросы.

Рабочая группа W3C Web Applications рекомендует новый механизм совместного использования ресурсов (CORS). CORS предоставляет межсерверным средствам управления доступом к веб-серверам, которые обеспечивают безопасные междоменные передачи данных. Современные браузеры используют CORS в контейнере API - например, XMLHttpRequest - для уменьшения рисков HTTP-запросов кросс-origin.

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

Как в стороне, я бы избегал реализации поддержки CORS в методах ресурсов. Вместо этого я использовал механизм фильтрации, чтобы все запросы обрабатывались в фильтре, вместо того, чтобы внедрять метод @OPTIONS для всех конечных точек.

1

CORS - это механизм, позволяющий выполнять запросы на междоменные запросы, но в браузере с использованием AJAX. Если вы используете завиток, вы можете делать то, что хотите ;-)

Итак, в вашем случае (с помощью curl) вы пытаетесь выполнить запрос за пределами браузера. Таким образом, вы можете делать то, что хотите! С curl запрос всегда будет выполняться, и вы увидите, например, обменянные заголовки. Это может быть что-то полезно, чтобы увидеть, если у вас есть ожидаемые заголовки CORS ...

Надеется, что это помогает вам, Тьерри

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