php - 我应该使用Put、Patch 和Delete 吗?我正在读一些东西,这让我想知道使用它们是否符合惯例

标签 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. 我了解到 PUT 和 DELETE 并不安全。

  3. 我了解到 HTML 表单仅允许 GET 和 POST。我确实知道您可以使用隐藏输入字段绕过它,这些输入字段的值中包含您想要使用的方法,但我仍然要问自己为什么默认情况下禁止使用 PUT 和 DELETE。

最佳答案

您应该或不应该使用什么最终取决于您的喜好。 HTTP 方法的使用可以说是相当固执己见。此外,还有很多问题和资源。

但是让我尝试尽我所知回答您的问题。

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

The request method token is the primary source of request semantics; it indicates the purpose for which the client has made this request and what is expected by the client as a successful result.

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

For example my routes would look better as I'll have this

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

  1. I've read that PUT and DELETE are not secure.

我无法验证该说法。请求方法只是 HTTP 请求的一个简单 header 标记,不会改变请求的行为,如果响应者不对其进行评估,也不会影响响应者。

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

I've read that Apache ( which I'm using ) doesn't allow PUT and DELETE unless you make some changes to the htaccess file. I assume the reason for that is number 2.

在某些 apache 默认安装中,需要显式允许 PUT 和 DELETE。请参阅this question例如。至于为什么它不是默认的,我只能假设在许多情况下它不会被使用,并且会减少已处理但不需要的请求的数量。

现在关于

  1. I've read that HTML forms only allow GET and POST. I do know that you can bypass that using hidden input fields which have the method you want to use in their value but I still have to ask myself why is it forbidden to use PUT and DELETE by default.

HTML 表单仅支持 GET 和 POST。要绕过这个问题,您不能使用隐藏的输入字段,它只会填充请求正文,而必须使用 JavaScript 并显式设置请求方法。 我找到了这个really good answer关于HTML不支持PUT和DELETE的原因。 两个要点:

  1. 缓存是一个问题,因为 POST 和 GET 应该是可缓存的,但 PUT 和 DELETE 则不应缓存
  2. 没有人费心去全面地说明它。

长话短说

使用 PUT 和 DELETE 可以帮助您编写干净的代码和 Web 界面。通过为请求添加更多语义来帮助您。 是否使用它们取决于您。忽略它们的网站可能比使用它们的网站多,但随着规模的增加,好处也会增加。

关于php - 我应该使用Put、Patch 和Delete 吗?我正在读一些东西,这让我想知道使用它们是否符合惯例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682513/

相关文章:

php - html、css 和 php 网站容器 div 不包含

php - 编写双连接来获取产品的子类别

php - Android 本地数据库通过 PHP 转换为 XML 到 mySql。

php - CakePHP 表关系 $belongsTo 在添加操作中的下拉菜单中不显示任何记录

php - 关于如果在 while 数组中找到空值则添加零

php - Auth::check() 不持久 Laravel 5.2

php - 在 Laravel 部署到 Heroku 时查看未找到错误

html - 如何将多个类放在 <li> 元素中?

php - 无法解析的依赖解析 [Parameter #0 [ <required> $name ]]

php - 向 Laravel 5.3 注册添加字段