CORS、laravel和POST&x27;数据挖掘
我正在编写一个vue应用程序,使用axios将数据发布到由laravel支持的API中。API有一个POST路由,用于创建资源。我已经建立了CORS,可以成功获取数据。但是,当我尝试发布数据时,网络选项卡显示一个选项请求,但没有返回任何内容,随后也没有发布请求 使用axios:POST请求是通过:CORS、laravel和POST&x27;数据挖掘,laravel,rest,api,cors,Laravel,Rest,Api,Cors,我正在编写一个vue应用程序,使用axios将数据发布到由laravel支持的API中。API有一个POST路由,用于创建资源。我已经建立了CORS,可以成功获取数据。但是,当我尝试发布数据时,网络选项卡显示一个选项请求,但没有返回任何内容,随后也没有发布请求 使用axios:POST请求是通过:axios.POST(url)发出的 但实际上没有发出POST请求,只有选项请求:axios.POST(url,数据) 我用slim做了一个简单的api,没有类似的问题,所以我假设这是laravel特有
axios.POST(url)发出的代码>
但实际上没有发出POST请求,只有选项请求:axios.POST(url,数据)
我用slim做了一个简单的api,没有类似的问题,所以我假设这是laravel特有的
没有服务器日志错误,laravel日志也没有显示错误。浏览器控制台中的错误是:跨源请求被阻止:同源策略不允许在http://api/api/zones/save. (原因:缺少CORS标题“访问控制允许原点”。
更新
以下是作为请求发送的标头:
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
我了解飞行前的情况,但我用slim制作的API使用相同的axios代码通过了飞行前的测试,并发出了post请求。我不知道为什么LaravelAPI没有这样做
更新2
这些是选项响应的标题
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”键下选项请求是CORS飞行前请求。发送此邮件是因为您的POST请求不简单。(我关于以下主题的回答:,下半部分涉及非简单请求)如果您想为您的案例提供更具体的答案(即,是什么导致您的请求不简单?),您需要查看浏览器的网络控制台,并向我们显示正在发出的HTTP请求的标题。我理解,但是我不明白为什么这些选项不返回中间件中已经存在的头(适用于简单请求)。我已经用ajax请求的标题更新了原始问题。您是否也可以显示选项响应?我很好奇,是否有一个失败的起源或允许的标题。这可能只是CORS中间件中的一个问题,在这种情况下,还需要显示一些服务器代码。另外,您的请求中是否真的没有内容类型
?添加了选项响应headers@WebDevweb和api的$middleware不是吗?通过将其仅放在“api”键中,中间件仅分配给api路由选项请求是CORS飞行前请求。发送此邮件是因为您的POST请求不简单。(我关于以下主题的回答:,下半部分涉及非简单请求)如果您想为您的案例提供更具体的答案(即,是什么导致您的请求不简单?),您需要查看浏览器的网络控制台,并向我们显示正在发出的HTTP请求的标题。我理解,但是我不明白为什么这些选项不返回中间件中已经存在的头(适用于简单请求)。我已经用ajax请求的标题更新了原始问题。您是否也可以显示选项响应?我很好奇,是否有一个失败的起源或允许的标题。这可能只是CORS中间件中的一个问题,在这种情况下,还需要显示一些服务器代码。另外,您的请求中是否真的没有内容类型
?添加了选项响应headers@WebDevweb和api的$middleware不是吗?通过将其仅放在“api”键中,中间件仅分配给api路由