为什么阿贾克斯给我一个跨起源错误,当我可以从PHP请求?为什么阿贾克斯给我一个跨起源错误,当我可以从

2019-05-12 03:28发布

I can make a GET request from PHP and get the correct response. This is the function I use:

PHP

function httpGet($url)
{
    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HEADER, false);

    $output=curl_exec($ch);
    curl_close($ch);
    return $output;
}

A simple example:

$fakevalue='iamfake';
$url="http://fakeurl.com?fakeparameter=".$fakevalue;
$jsondata= httpGet($url);
$fake_array = json_decode($jsondata, true);
$weed_var=$fake_array['weeds']; // successfully obtained weed.

This function returns the response from the server.

Now I am trying the same HTTP GET request in AJAX, but I can't get the response.

Initially I thought the problem was with the JavaScript function that I use. Google provided with me lots of JavaScript functions for performing the HTTP GET request but they all had the same problem. The request returns an error instead of the data that I got when I used PHP.

JAVASCRIPT

var fakevalue = "iamfake";

var fake_data = {
    fakeparameter: fakevalue
};

$.ajax({
    url: "http://fakeurl.com",
    data: fake_data,
    type: "GET",
    crossDomain: true,
    dataType: "json",
    success: function(a) {
        $("#getcentre").html(a);
    },
    error: function() {
        alert("Failed!");
    }
});

Error from JavaScript

XMLHttpRequest cannot load http://fakeurl.com?fakeparameter=fakevalue. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.`

I know you are going to tell me to use CORS, but if it was because of the absence of 'Access-Control-Allow-Origin' header, then how did I get response for the same service in PHP?

Answer 1:

用PHP(或任何其他服务器上运行,或者独立的应用程序(包括已安装的浏览器扩展的)), 是从Bob的服务器使用您的凭证请求数据(你的cookies,你的IP地址,你的一切)。

使用Ajax, Alice的浏览器请求使用她的凭据,从Bob的服务器的数据,然后使可用的数据,你的JavaScript(然后可以发送回服务器,所以你可以看到自己的话)。

鲍勃可能给不同的数据爱丽丝然后他会给你。 例如:鲍勃可能运行Alice的电子银行系统或公司内部网。

因此,除非Bob的服务器告诉Alice的浏览器,它是确定提供给您(CORS)的数据,浏览器会阻止你的JavaScript访问这些数据。

还有其他选择CORS,但它们涉及要么使用不设计成一个数据格式(JSONP)(这也需要Bob的服务器配合)的文件类型分发数据或者将您的服务器从鲍勃获取数据,然后使其可以通过您的服务器上的URL(或两个类似YQL做的一些组合)(这意味着你得到的数据Bob将提供给你,而不是数据鲍勃会给爱丽丝)。



Answer 2:

答案很简单:PHP不受CORS。 它是在客户端代码放置在由浏览器的限制,从而使访问URL获取,以允许或拒绝该请求。



Answer 3:

您正在运行到CORS,因为你是从你的浏览器做不同的域一个XMLHttpRequest请求比你的页面上 。 浏览器阻止它,因为它通常允许出于安全原因,同一产地的请求。 当你想要做跨域请求需要做不同的事情。 试试这个: http://www.html5rocks.com/en/tutorials/cors/

如果你只是想发起一个GET请求,您可以尝试使用JSONP datatype="jsonp" 。 例子: http://www.sitepoint.com/jsonp-examples/



文章来源: Why does Ajax give me a cross origin error when I can make the request from PHP?