为什么在制定HTTP请求的规范时,选择了“获取”和“发布”的名称?我是否希望隐藏参数或者与我是从服务器检索数据还是提交数据无关?
编辑:让我重新制定。我知道GET和POST请求是什么。我想知道的是,为什么我不能提出将数据提交给服务器的请求,以及哪些参数可以在地址栏中看到?答案 0 :(得分:6)
GET首先出现 - 它是original HTTP protocol中唯一支持的动词 - 我们只能推测选择POST的原因。也许是因为它将某些东西(帖子正文)放入信封(HTTP请求)并将其放入邮箱(HTTP服务器!)中是令人回味的。
它不是关于“隐藏参数”,而是区分具有副作用的请求和不具有副作用的请求。
有关详情,请参阅RFC2616 section 9.1,但总结......
特别是,已经建立了GET和GET的惯例 HEAD方法不应该具有采取行动的意义 除了检索。这些方法应该被认为是“安全的”。
因此,虽然您可以提交GET请求提交数据,但重复相同的请求不应该有任何其他副作用,否则您所做的不是HTTP。
您可以使用具有查询字符串(GET参数)的地址作为POST请求的目标 - 完全合法。
答案 1 :(得分:3)
当您发送GET请求时,通常会向服务器发送少量数据并获得大量回报。这是POST请求的另一种方式。这就是为什么你通常不希望看到所有数据。
答案 2 :(得分:2)
当您想要... GET 数据时使用 GET ,并在向服务器发送数据时使用 POST ,就像你会发布给你的老板一封信。
使用Web表单是不可能的,但使用full Http client,您还可以使用动词 DELETE 删除资源, HEAD < / strong>获取元数据标题,可能最差的名称是 PUT 到更新数据。
在所有这些类型的请求中,数据根本不会被隐藏。它们只是在大多数浏览器上都没有显示,但您可以在命令行工具中看到它们,例如 curl 或Web开发工具。
答案 3 :(得分:1)
回答您更新的问题......当然,您可以根据发送请求和接收数据执行任何操作。
关于如何实现服务器代码来处理它的全部内容。使用GET请求(浏览器目的)编写包含查询字符串数据的URL,然后处理要在服务器端创建的任何内容的创建。
这当然违反了HTTP规范,因为这里引用了很多人。
你甚至可以做出一个AJAX请求,它使用POST与正文中的一些数据以及查询字符串,并处理你在服务器端需要做的任何事情。
同样,使用GET
请求可以向服务器提交数据,地址栏可以看到它。您可以选择在服务器代码中使用该数据,而不管您是否要遵守HTTP规范。
修改强> 另外,你在谈论什么样的数据?您想通过地址栏发送文件吗?我不记得URL /查询字符串的长度限制是什么,但我确信二进制数据不会很好用...
答案 4 :(得分:0)
数据是否隐藏是一个特征而不是规范。不要将其与请求规范相关联。它们的设计就是这样,就是这样。只是当你使用GET数据时,不像POST方法那样从URL发送数据。毕竟,程序员的选择和要求决定了他必须使用哪个请求。
获取请求用于从服务器获取数据,其中POST请求用于将数据发布到服务器。
如果你看看维基
GET requests a representation of the specified resource. Note that GET should not be used
for operations that cause side-effects, such as using it for taking actions in web
applications. One reason for this is that GET may be used arbitrarily by robots or
crawlers, which should not need to consider the side effects that a request should cause.
和
POST submits data to be processed (e.g., from an HTML form) to the identified resource.
The data is included in the body of the request. This may result in the creation of a new
resource or the updates of existing resources or both.
所以基本上GET
用于检索远程数据,POST
用于插入/更新远程数据。