jQuery AJAX http GET跨域-响应中必需的标头

时间:2019-07-09 11:07:11

标签: php jquery ajax cross-domain

我已经制作了一个在域http://app.mydomain.tld上运行的Web应用程序 并且我在https://api.mydomain.tld上有API(API不是我开发的)。

我正在使用jQuery使用此方法进行AJAX HTTPs GET调用:

$.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'的错误。

我为Chrome添加了Access-Control-Allow-Origin扩展程序,通话正常。

所以我检查了响应头。如果未启用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。

0 个答案:

没有答案