Я сделал веб-приложение, работающее на домене http://app.mydomain.tld
и у меня есть API на https://api.mydomain.tld (API не разработаны мной).
Я выполняю вызов GET AJAX HTTPs с помощью jQuery, используя этот метод:
$.ajax({
url: "https://api.mydomain.tld/GetSomething/read.php",
method: "GET",
contentType:"application/json; charset=utf-8",
dataType:"json",
async:false,
headers: {"Accept": "application/json; odata=verbose" },
success: function (data) { doSomething(); },
error: function (data) { showError(); }
});
Этот вызов возвращает ошибку типа NetworkError: failed to execute 'send' on 'XMLHttpRequest': Failed to load 'https://api.mydomain.tld/GetSomething/read.php'
.
Я добавил расширение Access-Control-Allow-Origin для Chrome, и вызов работает нормально.
Итак, я проверил заголовки ответа. Когда расширение Chrome НЕ включено, у меня есть следующие заголовки ответа:
Access-Control-Allow-Origin: *
Когда расширение включено, у меня есть следующие заголовки:
Access-Control-Allow-Headers: access-control-allow-methods,access-control-allow-origin
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Allow-Origin: *
Итак, мой вопрос, который мог бы дать очевидный ответ: нужны ли эти заголовки для правильных междоменных вызовов?
Если да, нужен ли моим API приведенный ниже дополнительный код?
<?php
header("Access-Control-Allow-Origin","*");
header("Access-Control-Allow-Methods","GET, PUT, POST, DELETE, HEAD, OPTIONS");
header("Access-Control-Allow-Headers","access-control-allow-methods,access-control-allow-origin");
?>
Верно ли то, что я сказал, или я что-то упускаю, чтобы мой звонок работал без изменения кода API?
PS: если возможно, я бы не использовал JSONP.