关于请求方法 “OPTIONS” 的路由处理行为,有些疑惑不解

关于请求方法 “OPTIONS” 的路由处理行为,有些疑惑不解
关于 OPTIONS 请求方法,我的理解是一般遇到特殊请求方法(比如 PUT 请求方法)浏览器会自动发送 OPTIONS 请求方法询问服务器都支持什么请求方法。服务器告诉浏览器,我支持 GETPOSTPUT等方法(上图的中的 Access-Control-Allow-Methods 字段)。

上图的 Access-Control-Allow-Methods 响应头是我自己加的,
Larave 框架添加的响应头是下面的 Allow 字段,
处理位置在 Laravel6 Illuminate/Routing/RouteCollection.php 文件 236 - 240

    protected function getRouteForMethods($request, array $methods)
    {
        if ($request->method() === 'OPTIONS') {
            return (new Route('OPTIONS', $request->path(), function () use ($methods) {
                return new Response('', 200, ['Allow' => implode(',', $methods)]);
            }))->bind($request);
        }

        $this->methodNotAllowed($methods, $request->method());
    }

我比较疑惑的地方是,Laravel 框架为什么用 Allow 而不是直接用 Access-Control-Allow-Methods,这样我就不用自己添加 Access-Control-Allow-Methods 了(浏览器貌似只认 Access-Control-Allow-Methods 字段, Allow 字段并没有什么作用)


一直做接口开发,总觉得要自己添加响应头很不 优雅,觉得既然框架已经在 Allow 中返回了允许的请求方法,为什么不能直接在 Access-Control-Allow-Methods 中返回呢,我忽略了这是一个跨域问题,的确是需要自己手动处理的,现在没有疑问了

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
leo
最佳答案

Access-Control-Allow-Methods 是给 CORS 用的,Laravel 并不知道你的这个路由是否真的要允许 CORS。

从语义上来说,Option 请求就是询问服务器这个接口支持哪些 method,Laravel 通过 Allow 头返回信息。developer.mozilla.org/zh-CN/docs/W...

3年前 评论
sea-robbers 3年前
Sunman (楼主) 3年前
讨论数量: 2
sea-robbers

file

3年前 评论
sea-robbers (作者) 3年前
小李世界 3年前
sea-robbers (作者) 3年前
sea-robbers (作者) 3年前
sea-robbers (作者) 3年前
leo

Access-Control-Allow-Methods 是给 CORS 用的,Laravel 并不知道你的这个路由是否真的要允许 CORS。

从语义上来说,Option 请求就是询问服务器这个接口支持哪些 method,Laravel 通过 Allow 头返回信息。developer.mozilla.org/zh-CN/docs/W...

3年前 评论
sea-robbers 3年前
Sunman (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!