CORS、laravel和POST&x27;数据挖掘

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特有

我正在编写一个vue应用程序,使用axios将数据发布到由laravel支持的API中。API有一个POST路由,用于创建资源。我已经建立了CORS,可以成功获取数据。但是,当我尝试发布数据时,网络选项卡显示一个选项请求,但没有返回任何内容,随后也没有发布请求

使用axios:POST请求是通过:
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路由