关于请求方法 “OPTIONS” 的路由处理行为,有些疑惑不解
关于 OPTIONS
请求方法,我的理解是一般遇到特殊请求方法(比如 PUT
请求方法)浏览器会自动发送 OPTIONS
请求方法询问服务器都支持什么请求方法。服务器告诉浏览器,我支持 GET
、POST
、PUT
等方法(上图的中的 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
中返回呢,我忽略了这是一个跨域问题,的确是需要自己手动处理的,现在没有疑问了
推荐文章: