我在localhost(xampp)/ codeigniter上有api,我试图通过角度4访问它,浏览器一直在控制台中显示此错误。 api在邮递员工作正常。
[火狐]:
阻止跨源请求:同源策略禁止在http://lvh.me/ci-abc/api/get_alltasks读取远程资源。 (原因:缺少CORS标题'Access-Control-Allow-Origin'。
[铬]:
无法加载http://lvh.me/ci-abc/api/get_alltasks:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://localhost:4200” 访问。
我已尝试将API网址更改为localhost和127.0.0.1,但无效。我是一名初学者,如果我错过了什么,请原谅我。
Angular 4中的服务功能
gettasks()
{
return this.http.get('http://lvh.me/ci-abc/api/get_alltasks')
.map(res=>res.json());
}
codeigniter中的API函数
function get_alltasks_get()
{
{
$result = $this->todo_model->get_alltasks();
if ($result) {
$this->response($result, 200);
} else {
$this->response("No record found", 404);
}
}
}
答案 0 :(得分:1)
这不是Angular问题,因为您与服务器不在同一个域中而导致的问题,例如,如果您尝试从{example.com
向johndoe.com
发送请求1}}您将收到错误,它会阻止请求的浏览器!
浏览器首先发出header
请求,如果允许请求,将发出具有真实方法类型的下一个请求。
对于CodeIgniter,尝试将OPTIONS添加到允许的方法中。
header("Access-Control-Allow-Methods: GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding");
看看这个answer
答案 1 :(得分:0)
关于PHP的CORS
浏览器会针对跨网站请求发送特定HTTP headers 从
XMLHttpRequest
或Fetch API开始。它 还希望看到使用跨站点发回的特定HTTP标头 响应。这些标头的概述,包括示例JavaScript代码 发起请求并处理来自服务器的响应,以及 讨论每个标题can be found in the HTTP Access Control (CORS)文章,并应作为相关文章阅读 之一。
应该作为本文的配套文章阅读。 This article涵盖处理访问控制请求和 在PHP中制定访问控制响应。
如果您无权配置Apache,您仍然可以从PHP脚本发送标头。这是在PHP脚本中添加以下内容的一种情况:
<?php
header("Access-Control-Allow-Origin: *");