到目前为止,我只使用 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 文件进行一些更改。我认为原因是第二个。
我了解到 PUT 和 DELETE 并不安全。
我了解到 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
关于您(可能)最重要的问题:
- 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例如。至于为什么它不是默认的,我只能假设在许多情况下它不会被使用,并且会减少已处理但不需要的请求的数量。
现在关于
- 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的原因。 两个要点:
- 缓存是一个问题,因为 POST 和 GET 应该是可缓存的,但 PUT 和 DELETE 则不应缓存
- 没有人费心去全面地说明它。
长话短说
使用 PUT 和 DELETE 可以帮助您编写干净的代码和 Web 界面。通过为请求添加更多语义来帮助您。 是否使用它们取决于您。忽略它们的网站可能比使用它们的网站多,但随着规模的增加,好处也会增加。
关于php - 我应该使用Put、Patch 和Delete 吗?我正在读一些东西,这让我想知道使用它们是否符合惯例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682513/