背景:
我已经创建了一个基于slim的api,目前正在本地域中运行,例如localhost/api
我有一个使用Ionic框架(基于Angular)的移动应用程序,并有以下代码使用HttpClient作为HTTP:
let accessurl = this.general.apiURL + '/v2/update/status/' + this.machineToChange;
const headers = new HttpHeaders()
.set('Authorization', 'Bearer: ' + this.general.apiKey);
this.http.put(accessurl, {
statusFuelled: 1
}, { headers: headers }).subscribe(result => {
console.log(JSON.stringify(result));
}, err => {
console.log(JSON.stringify(err));
});
我已经尝试过让slim框架禁用cors的每一个堆栈溢出问题,这里只有几个:
$app->options('/update/status/{machineNo}', function ($request, $response) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
return $response->withStatus(200);
});
或:
//http://stackoverflow.com/questions/18382740/cors-not-working-php
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
或:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
header('Content-Type: application/json');
或在.htaccess中:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Header add Access-Control-Allow-Headers: Content-Type
还有更多使用composer的中间产品。
我还运行了
Slim Website
没有成功。
没有起作用,这给我带来了太多的麻烦,所以我只想让cors永久残疾,因为它弊大于利。
我不知道问题的原因是什么,一个错误的httpclient请求或cors是一个正常的疼痛。
如果有人能帮忙,请告诉我。
由于服务器的限制,我正在运行php 5.6,因此tuupola/cors这样的中间件由于是php<7而无法工作
一些错误:
Safari引发:加载资源失败:飞行前响应不成功
chrome throws:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”头。起源
http://localhost:8100
因此不允许访问。响应的http状态代码为405。
chrome也抛出:选项
http://localhost/api/v2/update/status/
{id}405(不允许使用方法)