Cors Ajax 请求适用于子域但不适用于主域
Posted
技术标签:
【中文标题】Cors Ajax 请求适用于子域但不适用于主域【英文标题】:Cors Ajax request works on subdomain but not on main domain 【发布时间】:2018-08-10 15:37:41 【问题描述】:我在一个名为 backend.example.com 的子域上使用 laravel 编写了一个 API。如果我尝试从另一个名为 partner.example.com 的子域从我的 API 获取信息,我可以毫无问题地验证自己并获取这些信息。这是 Ajax 请求:
但是,如果我尝试对名为 example.com 的主域执行完全相同的操作,则会收到此错误:
无法加载https://backend.example.com/api/v1/leads/showAdmin: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。 Origin 'https://example.com' 因此不允许访问。
这是主域的 Ajax:
var ajaxArray =
"fromDate": from,
"toDate": to
;
console.log(ajaxArray);
jQuery.ajax(
url: ("https://backend.example.com/api/v1/leads/showAdmin"),
type: "POST",
data: ajaxArray,
crossDomain: true,
headers :
"Authorization": "Basic " + btoa("api@example.com" + ":" + "123456"),
"Accept": "application/json"
,
error: function() alert("Error"); ,
success: function(result)
alert("Working");
);
);
这是我来自 wokring 子域的 Ajax 请求:
var ajaxArray =
"fromDate": from,
"toDate": to,
"table": "no",
"userID": 20
;
console.log(ajaxArray);
jQuery.ajax(
url: ("https://backend.example.com/api/v1/leads/show"),
type: "POST",
data: ajaxArray,
crossDomain: true,
headers :
"Authorization": "Basic " + btoa("api@example.com" + ":" + "123456"),
"Accept": "application/json"
,
error: function() alert("No"); ,
success: function(result)
alert("Working");
);
);
但我不明白,因为我已经允许所有...... 见这里:
<?php
return [
/*
|--------------------------------------------------------------------------
| Laravel CORS
|--------------------------------------------------------------------------
|
| allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
| to accept any value.
|
*/
'supportsCredentials' => false,
'allowedOrigins' => ['*'],
'allowedOriginsPatterns' => [],
'allowedHeaders' => ['*'],
'allowedMethods' => ['*'],
'exposedHeaders' => [],
'maxAge' => 0,
];
不胜感激任何形式的帮助! 亲切的问候
【问题讨论】:
【参考方案1】:没有插件试过吗?添加标头就足够了,只是为了看看它是否有效,您可以尝试修改路由上的返回响应,即
use Illuminate\Http\JsonResponse;
Route::get("/whatever", function()
$response = new JsonResponse(['arr','ay']);
$response->header("Access-Control-Allow-Origin", "http://localhost:3000");
return $response;
你使用的是哪个版本的 Laravel?
【讨论】:
以上是关于Cors Ajax 请求适用于子域但不适用于主域的主要内容,如果未能解决你的问题,请参考以下文章
对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)
CORS 适用于 chrome 但不适用于 firefox、angularjs
多个 CORS 适用于 GET 但不适用于 PUT/POST 与飞行前请求 Web api 2
为啥 CORS 适用于 API 请求,但不适用于我的 Nginx 配置中的媒体文件(例如 mp4、webm)?
Spring Boot - CORS 过滤器适用于 GET,但不适用于其他 HTTP 动词
使用 CORS 与 LocomotiveJs 一起休息 API。适用于本地机器,但不适用于 Amazon 或 Heroku