【发布时间】:2019-01-01 09:46:26
【问题描述】:
我正在创建一个 Angular 应用程序 6 和 php 中的 api rest。
当我的 Angular 应用程序尝试执行以下 url 请求时:http://localhost/bdevApi/api/index/categoryexame?page=1
加载如下错误:
未能加载对预检请求的响应未通过访问 控制检查:不存在“Access-Control-Allow-Origin”标头 请求的资源。因此,原点 '
http://localhost:4200' 是 不允许访问。
角度在4200端口,我的api在80
我可视化了一些教程并将以下标题添加到我的 api 中
api/index.php
<?php
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');
include("config/config.php");
include("import/Interpreter.php");
include("import/SendJson.php");
include("database/Connection.php");
include("import/AuthToken.php");
$db = Connection::getInstance();
if( $db->getStateConnection() )
{
$arrayHeader = getallheaders();
$token = isset($arrayHeader["token"]) ? $arrayHeader["token"] : "";
// Recupera dados via Json
$strJson = file_get_contents('php://input'); //echo $strJson;
$jsonObject = json_decode($strJson); //var_dump($strJson);
$Interpreter = new Interpreter(
"http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]",
$_SERVER['REQUEST_METHOD'],
$jsonObject
);
if(AuthToken::validateToken($token))
$Interpreter->initializes(true);
else
{
if($token == "")
$Interpreter->initializes(false);
else
{
$S = new SendJson();
$S->Send("200", "1", "Token não autenticado", null);
}
}
$db->closeConnection();
}
?>
如何让我的应用程序接受这些标头而不显示此错误?
[编辑] []1
新错误
加载失败 http://localhost/bdevApi/api/index/categoriaexame?page=1:没有 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 访问。
【问题讨论】:
-
您是否在 chrome 调试器中检查了 OPTIONS 请求的响应正文和标头?如果是选项,您的服务器应该立即返回 200。也许它正在遍历其余代码并返回其他内容
-
这个我不是很懂,我刚上Network Headers 那里是Request Method: OPTIONS, Status Code: 200 OK
-
这是一个好的开始。通常还有一个响应正文选项卡。 OPTIONS 请求中没有任何内容?
-
在我的响应标头中显示状态为 200,但我找不到任何与选项有关的内容
-
是的,如果你能做到的话。显示请求和响应标头