当我执行php artisan routes
时,我的应用的GET
请求有一个|HEAD
。拥有|HEAD
的目的是什么?
routes.php文件
+--------+----------------------------------+------------------------------+--------------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+----------------------------------+------------------------------+--------------------------------------+----------------+---------------+
| | GET|HEAD / | home | HomeController@home | | |
| | GET|HEAD user/{username} | profile-user | ProfileController@user | | |
| | GET|HEAD account/change-password | account-change-password | AccountController@getChangePassword | auth | |
| | GET|HEAD asset/encode-file/{id} | encode-file | EncodeController@getEncode | auth | |
| | GET|HEAD asset/edit-file/{id} | edit-file | AssetController@getEdit | auth | |
| | GET|HEAD asset/delete-file/{id} | delete-file | AssetController@deleteDestroy | auth | |
| | GET|HEAD asset/upload-file-form | upload-file-form | AssetController@getUploadCreate | auth | |
| | GET|HEAD asset/library | asset-library | AssetController@getAssetLib | auth | |
| | GET|HEAD account/sign-out | account-sign-out | AccountController@getSignOut | auth | |
| | GET|HEAD account/activate/{code} | account-activate | AccountController@getActivate | guest | |
| | GET|HEAD account/forgot-password | account-forgot-password | AccountController@getForgotPassword | guest | |
| | GET|HEAD account/recover/{code} | account-recover | AccountController@getRecover | guest | |
| | GET|HEAD account/sign-in | account-sign-in | AccountController@getSignIn | guest | |
| | GET|HEAD account/create | account-create | AccountController@getCreate | guest | |
+--------+----------------------------------+------------------------------+--------------------------------------+----------------+---------------+
答案 0 :(得分:3)
以下函数来自Laravel'
Illuminate\Routing\Router.php
类,当您使用Route::get()
方法为您的网站/应用添加路由时,Laravel
会添加两种方法url
,这意味着,可以使用url
和get
GET
方法访问使用HEAD
方法注册的这些HTTP
,并且HEAD只是另一个HTTP
动词/方法,用于发出HEAD
请求。
/**
* Register a new GET route with the router.
*
* @param string $uri
* @param \Closure|array|string $action
* @return \Illuminate\Routing\Route
*/
public function get($uri, $action)
{
return $this->addRoute(array('GET', 'HEAD'), $uri, $action);
}
答案 1 :(得分:3)
HEAD
请求几乎与GET
请求完全相同,它们只有一个基本方面不同: HEAD
响应不应包含有效负载(实际数据) )。强>
这使得 HEAD HTTP动词成为管理当前缓存数据有效性的基础。
如果您的数据不是最新的,HEAD
请求的响应中的标题字段的值将发出警告。之后,您可以发出正确的GET
请求来检索更新的数据。
例如,可以通过观察Content-Length
字段或Last-Modified
字段来实现此目的。
使用大型有效负载时,缓存数据并在实际HEAD
之前发出GET
请求以检查当前数据的有效性,这可以为您节省大量资金消耗。
您将准确了解何时检索完整的有效负载。
最大的问题是:当您使用HEAD
时,为什么Laravel会合并GET
和Route::get()
个HTTP动词?
您可以使用Route::match('HEAD')
注册您的HEAD请求,但我觉得很奇怪,我们没有Route::head()
。
来自HTTP RFC:
HEAD方法与GET相同,只是服务器不能在响应中返回消息体。响应HEAD请求的HTTP头中包含的元信息应该与响应GET请求时发送的信息相同。该方法可用于获得关于请求所暗示的实体的元信息,而无需转移实体主体本身。此方法通常用于测试超文本链接的有效性,可访问性和最近的修改。
对HEAD请求的响应可以是可缓存的,因为响应中包含的信息可用于从该资源更新先前缓存的实体。如果新字段值指示缓存的实体与当前实体不同(如Content-Length,Content-MD5,ETag或Last-Modified中的更改所示),则缓存必须将缓存条目视为陈旧。