我应该使用放置,修补和删除吗?我正在阅读一些东西,这使我想知道使用它们是否常规

时间:2018-12-08 12:25:30

标签: php laravel

到目前为止,我几乎只使用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');

但是,我读了一些使我感到疑惑的东西。

  1. 我读到Apache(我正在使用)不允许PUT和DELETE,除非您对htaccess文件进行了一些更改。我认为原因是数字2。

  2. 我已阅读到PUT和DELETE不安全。

  3. 我已阅读HTML表单仅允许GET和POST。我确实知道您可以使用隐藏的输入字段来绕过它,该字段具有您想要在其值中使用的方法,但是我仍然要问自己为什么默认情况下禁止使用PUT和DELETE。

1 个答案:

答案 0 :(得分:2)

最后,您应该或不应该使用的内容取决于您的偏好。 HTTP方法的使用可以说是很有道理的。另外,那里还有很多问题和资源。

但是,请允许我尽我所能回答您的问题。

请求方法在RFC 7231, section 4: Request methods

中指定
  

请求方法令牌是请求的主要来源   语义它表明了客户的目的   该请求以及客户对成功的期望   结果。

如上所述,您可以忽略它们并将其目的绑定到URL。是否评估请求方法并对其采取行动取决于服务器端实现,但正如您所述

  

例如我的路线看起来会更好

关于(可能是)最重要的问题:

  
      
  1. 我已经了解到PUT和DELETE是不安全的。
  2.   

我无法验证该声明。 request方法只是HTTP请求的简单标头令牌,不会改变请求的行为,如果响应者不对其进行评估,也不会影响响应者。

根据我的个人经验,许多小型公司和开发人员不使用http方法,而只使用get和post方法,因为它们是默认html表单支持的唯一方法。这意味着,如果要发送PUT或DELETE,则必须通过javascript采取其他措施。

  

我读到Apache(我正在使用)不允许PUT和DELETE,除非您对htaccess文件进行了一些更改。我认为原因是数字2。

在某些Apache默认安装中,需要明确允许PUT和DELETE。例如,请参见this question。至于为什么它不是默认值,我只能假设在许多情况下都不会使用它,这样会减少已处理但不希望的请求的数量。

现在关于

  
      
  1. 我已阅读HTML表单仅允许GET和POST。我确实知道您可以使用隐藏的输入字段来绕过它,该字段具有您想要在其值中使用的方法,但是我仍然要问自己为什么默认情况下禁止使用PUT和DELETE。
  2.   

HTML表单仅支持GET和POST。要绕过此操作,您不能使用隐藏的输入字段,该字段只能填充请求正文,而必须使用javascript并显式设置请求方法。 我发现这个really good answer是关于HTML不支持PUT和DELETE的原因。 两个要点:  1.缓存是一个问题,因为POST和GET应该是可缓存的,但PUT和DELETE不应  2.没有人愿意全面指定它。

长话短说

使用PUT和DELETE可以帮助您编写简洁的代码和Web界面。通过为请求提供更多语义来帮助您。 是否使用它们取决于您。忽略它们的网站可能比使用它们的网站更多,但是随着规模的扩大,收益会增加。