为了账号安全,请及时绑定邮箱和手机立即绑定

如何在HTTPPOST请求中发送参数?

如何在HTTPPOST请求中发送参数?

潇潇雨雨 2019-06-03 14:55:05
如何在HTTPPOST请求中发送参数?在HTTP中到达请求时,参数作为查询字符串:http://example.com/page?parameter=value&also=another在HTTP中岗请求时,参数不会与URI一起发送。价值在哪里?在请求头中?在请求者体内?它长什么样?
查看完整描述

4 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

这些值以内容类型指定的格式在请求正文中发送。

通常内容类型是application/x-www-form-urlencoded,因此请求主体使用与查询字符串相同的格式:

parameter=value&also=another

在窗体中使用文件上载时,可以使用multipart/form-data相反,编码具有不同的格式。它更复杂,但你通常不需要关心它是什么样子,所以我不会给出一个例子,但知道它的存在是好的。


查看完整回答
反对 回复 2019-06-03
?
波斯汪

TA贡献1811条经验 获得超4个赞

简短答覆:在POST请求中,值在请求的“主体”中发送。使用web窗体时,它们最有可能是与以下媒体类型一起发送的:application/x-www-form-urlencodedmultipart/form-data..为处理web请求而设计的编程语言或框架通常对此类请求进行“正确的处理”(™),并为您提供对容易解码的值的轻松访问(如$_REQUEST$_POST在PHP中,或cgi.FieldStorage()flask.request.form在Python中)。


现在让我们离题一点,这可能有助于理解其中的区别;)

.之间的区别GETPOST请求在很大程度上是语义的。它们也被不同地“使用”,这解释了如何传递值的差异。

得到(相关RFC部分)

在执行GET请求时,您向服务器请求一个或一组实体。为了允许客户端过滤结果,它可以使用URL的所谓“查询字符串”。查询字符串是?..这是URI语法.

所以,从您的应用程序代码的角度来看,接收,您将需要检查URI查询部分以获得对这些值的访问。

注意,键和值是URI的一部分。浏览器可以,可能限制URI长度。HTTP标准声明没有限制。但在撰写本文时,大多数浏览器限制URI(我没有特定的值)。GET请求应绝不可能用于向服务器提交新信息。尤其是更大的文件。那是你应该使用的地方POSTPUT.

员额(相关RFC部分)

在执行POST请求时,客户端实际上提交了一个新的文件远程主机。所以,查询字符串(在语义上)没有意义。这就是为什么您无法在应用程序代码中访问它们的原因。

POST有点复杂(而且方式,道路(比较灵活):

当收到POST请求时,您应该总是期望得到一个“有效负载”,或者,用HTTP术语来说:消息体..消息体本身是非常无用的,因为没有标准(据我所知。也许是应用程序/八位流?)格式。主体格式由Content-Type头球。使用HTML时FORM元素method="POST",这通常是application/x-www-form-urlencoded..另一种非常常见的类型是多部分/表格-数据如果你使用文件上传。但可能是什么都行,范围从text/plain,完毕application/json甚至是一种习俗application/octet-stream.

无论如何,如果POST请求是用Content-Type应用程序无法处理的,则应返回415状态码.

大多数编程语言(和/或web-框架)提供了一种方法,可以将消息体从/编码到最常见的类型(如application/x-www-form-urlencodedmultipart/form-dataapplication/json)。所以这很简单。自定义类型可能需要更多的工作。

以标准HTML表单编码文档为例,应用程序应执行以下步骤:

  1. 阅读

    Content-Type

    场域
  2. 如果该值不是受支持的媒体类型之一,则使用

    415

    状态码
  3. 否则,从消息正文中解码这些值。

同样,PHP之类的语言或其他流行语言的web框架可能会为您处理这个问题。这方面的例外是415错误。没有一个框架能够预测应用程序选择支持和/或不支持哪些内容类型。这取决于你。

放(相关RFC部分)

PUT请求的处理方式与POST请求。最大的区别是POST请求应该让服务器决定如何(如果有的话)创建一个新的资源。历史上(从现在过时的RFC 2616开始,它将创建一个新资源,作为发送请求的URI的“从属”(子)。

PUT相反,请求应该准确地“存放”资源。在…那个URI一点儿没错内容。不多也不差。我们的想法是客户负责制作完全资源在“投入”之前。服务器应该接受它。原样在给定的URL上。

因此,POST请求通常不习惯于取代现有的资源。一个PUT请求可以同时创建替换。

旁注

还有“路径参数“这些数据可以用来向远程发送额外的数据,但它们非常少见,所以我不会在这里详细介绍。但是,作为参考,下面是RFC的摘录:

除了层次化路径中的点段之外,一般语法认为路径段是不透明的.URI生成应用程序通常使用段中允许的保留字符来分隔特定于方案或取消引用处理程序的子组件。例如,分号(“;”)和等于(“=”)保留字符通常用于分隔适用于该段的参数和参数值。逗号(“,”)保留字符通常用于类似的目的。例如,一个URI生产者可能使用“name;v=1.1”这样的段来表示对“name”版本1.1的引用,而另一个URI生产者可能使用“name,1.1”这样的段来表示相同的内容。参数类型可以由特定于方案的语义定义,但在大多数情况下,参数的语法特定于URI取消引用算法的实现。


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 2431 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信