我正在编写一个vue应用程序,使用axios将数据发布到由laravel支持的API。 API具有POST路由,用于创建资源。我有CORS设置,允许成功获取数据。但是,当我尝试POST数据时,网络选项卡显示一个OPTIONS请求,没有返回任何内容,也没有POST请求。
使用axios:POST请求使用:axios.post(url);
但实际上没有发出POST请求,只有OPTIONS请求:axios.post(url,data)
。
我做了一个简单的api,并且没有类似的问题,所以我假设这是特定的laravel?
没有服务器日志错误,laravel日志也没有显示任何错误。浏览器控制台中的错误是:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://api/api/zones/save. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
更新
这些是作为请求发送的标头:
Host: apiurl
User-Agent: ....
Accept: text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin:null
DNT: 1
Connection: keep-alive
我了解飞行前的情况,但是我用飞机制作的API使用相同的axios代码通过了飞行前,并且发出了邮件请求。我不确定为什么laravel API没有这样做。
更新2 这些是OPTIONS响应的标题
Server nginx/1.10.3 (Ubuntu)
Content-Type text/html; charset=UTF-8
Transfer-Encoding chunked
Connection keep-alive
Allow GET,HEAD,POST
Cache-Control no-cache, private
Date Fri, 03 Nov 2017 20:46:47 GMT
Content-Encoding gzip
这是我用于laravel中间件的代码:
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization')
;
}
}
我将此代码包含在'api'键
下的内核中