2015-11-16 3 views
8

Я вызываю JIRA REST API из JavaScript в Mac пользователя слияния и сталкиваюсь с проблемами CORS, потому что JIRA и Confluence находятся на двух разных доменах и preflight request из браузера не работает. Я пробовал несколько решений CORS, как описано ниже, без каких-либо успехов. Поэтому я умоляю внести некоторые вклад от других, которые, вероятно, решили эту проблему.Включить CORS в API JARA REST

JavaScript фрагмент кода, который не удается:

AJS.$.ajax({ 
      type: "GET", 
      url: "http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)", 
      dataType: "json", 
      contentType: "application/json", 
      async: false 
     }) 

Сообщение об ошибке (с Firefox):

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45). This can be fixed by moving the resource to the same domain or enabling CORS. 

Конфигурация JIRA

  • JIRA Версия: 6.4.12
  • Адрес: http://jira.mydomain.com
  • Запуск Apache в передней (прокси): Да
    • Response Configuration Headers:
      • Access-Control-Allow-Headers:origin, content-type, accept
      • Access-Control-Allow-Methods:POST, GET, OPTIONS
      • Access-Control-Allow-Origin:*
  • Confluence добавил к whitelist: Да

Слияние конфигурации

  • Версия слияния: 5.8.8
  • Адрес: http://confluence.mydomain.com
  • Запуск Apache в передней (прокси): Да
    • отклика Конфигурация Заголовки:
      • Access-Control-Allow-Origin:*
  • JIRA добавлены к whitelist: Да
    • Expression: Confluence (http://jira.mydomain.com)
    • Тип: Application Link
    • Разрешить поступления: Правда

Протестировано с браузерами:

  • Chrome (последний)
  • Safari (последние)
  • Firefox (последняя)

Testing предполетной запрос (ВАРИАНТЫ) с CURL:

ismar.slomic$ curl -X OPTIONS "http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)" -v 
* Trying 10.107.1.24... 
* Connected to jira.mydomain.com (127.0.0.1) port 80 (#0) 
> OPTIONS /rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45) HTTP/1.1 
> Host: jira.mydomain.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> 
* Empty reply from server 
* Connection #0 to host jira.mydomain.com left intact 
curl: (52) Empty reply from server 

Это, кажется, положительный ответ.

Testing предполетной запрос (ВАРИАНТЫ) с CROME расширением Postman:

OPTIONS http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45) 

ошибка Ответ: Could not get any response. This seems to be like an error connecting to http://jira.mydomain.com/rest/api/latest/search/?issue%20in%20linkedIssues(SR-45)

+0

Получаете ли вы то же сообщение об ошибке, которое вы получили для Firefox в Chrome? – rby

+0

Сообщение об ошибке в Chrome: NetworkError: не удалось выполнить 'send' on 'XMLHttpRequest': не удалось загрузить 'http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues. .. –

+0

Похоже, что ваш вызов ajax не проходит. Возможно, вы можете добавить обратный вызов ошибки и посмотреть на статус, который вы получите.Кроме того, вы указываете json как dataType, поэтому убедитесь, что вы действительно отправляете json-данные. – rby

ответ

1

Немного поздно, чтобы ответить на это, но я оставлю его здесь для справки.

В моем макросе я решил эту проблему наоборот. Вместо отправки прямого запроса на сервер JIRA я использовал API, открытый сервером Confluence, чтобы проксировать мой запрос JIRA на связанный экземпляр JIRA.

Я описал эту конечную точку в another answer. Используя этот метод, вы не нарушаете политику перекрестного происхождения. На самом деле это то, что делают JIRA Issues и JIRA Chart макросы для визуализации своих виджетов.

Этот подход требует, чтобы экземпляры JIRA и Confluence были подключены через Application Link. Но я предполагаю, что у вас есть доступ администратора как к JIRA, так и к Confluence, поскольку вы изучаете изменение исходных политик, чтобы он не был блокирующим для вас.

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