到目前为止,我几乎只使用GET和POST来做任何事情,但是,引起我注意的是,如果我也使用Put,Patch和Delete会更好。我已经超越了他们,意识到他们将如何帮助我。例如,我的路线看起来会更好,因为这样:
Route::get('/image/{id}', 'PagesController@specificImage')->name('specificImage');
Route::delete('/image/{id}', 'ArtworkController@deleteImage')->name('deleteImage');
代替此:
Route::get('/image/{id}', 'PagesController@specificImage')->name('specificImage');
Route::get('/deleteImage/{id}', 'ArtworkController@deleteImage')->name('deleteImage');
但是,我读了一些使我感到疑惑的东西。
我读到Apache(我正在使用)不允许PUT和DELETE,除非您对htaccess文件进行了一些更改。我认为原因是数字2。
我已阅读到PUT和DELETE不安全。
我已阅读HTML表单仅允许GET和POST。我确实知道您可以使用隐藏的输入字段来绕过它,该字段具有您想要在其值中使用的方法,但是我仍然要问自己为什么默认情况下禁止使用PUT和DELETE。
答案 0 :(得分:2)
最后,您应该或不应该使用的内容取决于您的偏好。 HTTP方法的使用可以说是很有道理的。另外,那里还有很多问题和资源。
但是,请允许我尽我所能回答您的问题。
请求方法在RFC 7231, section 4: Request methods
中指定请求方法令牌是请求的主要来源 语义它表明了客户的目的 该请求以及客户对成功的期望 结果。
如上所述,您可以忽略它们并将其目的绑定到URL。是否评估请求方法并对其采取行动取决于服务器端实现,但正如您所述
例如我的路线看起来会更好
关于(可能是)最重要的问题:
- 我已经了解到PUT和DELETE是不安全的。
我无法验证该声明。 request方法只是HTTP请求的简单标头令牌,不会改变请求的行为,如果响应者不对其进行评估,也不会影响响应者。
根据我的个人经验,许多小型公司和开发人员不使用http方法,而只使用get和post方法,因为它们是默认html表单支持的唯一方法。这意味着,如果要发送PUT或DELETE,则必须通过javascript采取其他措施。
我读到Apache(我正在使用)不允许PUT和DELETE,除非您对htaccess文件进行了一些更改。我认为原因是数字2。
在某些Apache默认安装中,需要明确允许PUT和DELETE。例如,请参见this question。至于为什么它不是默认值,我只能假设在许多情况下都不会使用它,这样会减少已处理但不希望的请求的数量。
现在关于
- 我已阅读HTML表单仅允许GET和POST。我确实知道您可以使用隐藏的输入字段来绕过它,该字段具有您想要在其值中使用的方法,但是我仍然要问自己为什么默认情况下禁止使用PUT和DELETE。
HTML表单仅支持GET和POST。要绕过此操作,您不能使用隐藏的输入字段,该字段只能填充请求正文,而必须使用javascript并显式设置请求方法。 我发现这个really good answer是关于HTML不支持PUT和DELETE的原因。 两个要点: 1.缓存是一个问题,因为POST和GET应该是可缓存的,但PUT和DELETE不应 2.没有人愿意全面指定它。
长话短说
使用PUT和DELETE可以帮助您编写简洁的代码和Web界面。通过为请求提供更多语义来帮助您。 是否使用它们取决于您。忽略它们的网站可能比使用它们的网站更多,但是随着规模的扩大,收益会增加。