我的前端应用程序在端口grunt
上的9100
实时服务器上运行,而我的PHP服务器在端口80
上。主机是相同的,只是端口不同。
当我向POST
发送带有http://dev.site.dev/api/gist
个JSON
数据的404
请求时,我在预检OPTIONS
请求中收到了错误CORS
。
我已经在apache配置中添加了Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "X-Requested-With, accept, content-type"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
标头:
index_option()
``` 并重新启动服务器,但仍然遇到问题。
我应该在gist
控制器中添加{{1}}方法吗?或问题出在其他地方?
答案 0 :(得分:8)
正如我在answer on the CodeIgniter
bug tracker for this "issue" #313中所描述的,有几种解决方案。
我找到了HTTP OPTIONS error in Phil Sturgeon's Codeigniter Restserver and Backbone.js的解决方案,即从otpions
中的值列表中移除$allowed_http_methods
:
// protected $allowed_http_methods = array('get', 'delete', 'post', 'put', 'options', 'patch', 'head');
protected $allowed_http_methods = array('get', 'delete', 'post', 'put', 'patch', 'head');
另一个解决方案是实施index_options()
。
由于拼写错误(它的 OPTIONS
是复数),它第一次对我不起作用。使用此解决方案不再需要使用applications/libraries/REST_Controller.php
:
public function index_options() {
return $this->response(NULL, 200);
}
现在预检OPTION
请求始终为true,因此POST
请求已发送且一切正常:)
答案 1 :(得分:1)
是的,您必须添加index_options()
方法。
我遇到了同样的问题,只有当我使用与POST方法相同的参数添加OPTIONS方法时,它才有效。
答案 2 :(得分:0)
就我而言,这是一个路由问题。
我所做的是覆盖404路由。之后,请求通过路由,其余服务器完成所有其他操作。
这是我在routes.php中的内容:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="./css/custom.css">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<div class="d-flex flex-row my-flex-container">
<div class="p-2 my-flex-item">1</div>
<div class="p-2 my-flex-item">2</div>
<div class="p-2 my-flex-item">3</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>