根据HTTP/1.1规范:
该
POST
方法用来请求原始服务器接受被附在请求由标识的资源的新下属实体Request-URI
的Request-Line
换句话说,POST
用于创建.
该
PUT
方法请求将所包含的实体存储在提供的实体下Request-URI
.如果Request-URI
引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI
未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
也就是说,PUT
用于创建或更新.
那么,应该使用哪一个来创建资源?或者需要支持两者?
我在这里看到了几个问题,例如如何调试RESTful服务,其中提到:
不幸的是,相同的浏览器不允许我测试HTTP PUT,DELETE,甚至在某种程度上测试HTTP POST.
我也听说过浏览器只支持GET和POST,来自其他一些来源:
但是,Firefox中的一些快速测试显示发送PUT
和DELETE
请求按预期工作 - XMLHttpRequest
成功完成,并且请求以正确的方法显示在服务器日志中.我是否缺少某些方面,例如跨浏览器兼容性或非明显的限制?
假设我的Web应用程序在服务器端完全支持PUT和DELETE,我应该使用它们吗?
基本上我的问题是有多少浏览器支持这个:
<form method="PUT">
Run Code Online (Sandbox Code Playgroud)
要么
<form method="DELETE">
Run Code Online (Sandbox Code Playgroud)
除了兼容REST之外,使用这两种HTTP方法有什么好处吗?(假设替换这两种方法是常用的POST)
我有这条路线的路线
/**
* @Method({"DELETE"})
* @Route("/secure/users")
*/
Run Code Online (Sandbox Code Playgroud)
当我尝试做一个cUrl
<html>
<head>
<meta charset="UTF-8" />
<title>An Error Occurred: Method Not Allowed</title>
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "405 Method Not Allowed".</h2>
<div>
Something is broken. Please let us know what you were doing when this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience caused.
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我也尝试启用
Request::enableHttpMethodParameterOverride();
Run Code Online (Sandbox Code Playgroud)
在app.dev和app_dev.php中,我可以处理PUT
请求.
下面是我用于获取和发布 HTTP 请求的代码。我想知道的是如何执行删除和放置的 HTTP 请求。我已经让 get 和 post 工作成为可能。我想知道如何根据下面的代码删除和放置。当我想将其更改为删除时,在我的邮政编码中更改什么?缺少什么?我想使用 ID 删除,例如“id”:16,
let parameters = ["name": "test", "desc": "test" , "reward":"1.00" , "sched":"2018-04-05T11:49:51+08:00", "occurrence":["name": "once"]
, "status": "created", "created_by": "test@gmail.com","created_for": "test.com"] as [String : Any]
guard let url = URL(string: "http://test.tesst.eu:8000/api/v1/test/") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
request.httpBody = httpBody
let session = URLSession.shared
session.dataTask(with: request) { (data, response, …
Run Code Online (Sandbox Code Playgroud) 我从来没有真正理解为什么我需要 PUT 和 Delete 请求方法。
在我的代码中,我一直在使用post
,只是执行后端代码来添加/删除某些内容。
我这样做是错误的还是可以一直使用POST?
我的例子:
@RequestMapping(value = "/delete-images", method = RequestMethod.POST)
public @ResponseBody void deleteImages(@RequestParam("imageIDs") String[] imageIDs) {
Docker.deleteImages(imageIDs);
}
Run Code Online (Sandbox Code Playgroud)