The Wayback Machine - https://web.archive.org/web/20221028230231/https://baike.sogou.com/kexue/d10182.htm

POST

编辑

在计算中,POST是万维网使用的一种由超文本传输协议(HTTP)支持的请求方法。按照设计,POST请求方法要求网络服务器接受包含在请求消息正文中的数据,最有可能是存储它。[1] 它通常用于上传文件或提交完整的网络表单。

相反,HTTP GET请求方法从服务器检索信息。作为GET请求的一部分,一些数据可以在网址的查询字符串中传递,指定(例如)搜索词、日期范围或定义查询的其他信息。

作为POST请求的一部分,可以在请求消息的正文中向服务器发送任意数量的任何类型的数据。POST请求中的报头字段通常指示邮件正文的互联网媒体类型。

1 POST数据编辑

万维网和超文本传输协议(HTTP)是基于许多请求方法或“动词”,包括POST和GET以及上传(PUT)、删除(DELETE)和其他一些方法。网络浏览器通常只使用GET和POST,但RESTful在线应用程序利用了其他许多方法。POST在超文本传输协议(HTTP)方法中的位置是向服务器发送一个新数据实体的表示,这样它将被存储为由URI标识的资源的一个新的下属。[1] 例如,对于”URI http://example.com/customers“,POST请求可能代表新客户,每个客户都包括他们的姓名、地址、联系方式等。早期的网站设计师在两个重要方面远离了这个最初的概念。首先,URI没有技术上的理由来用文本描述存储POST数据的从属网络资源。事实上,除非做出一些努力,否则URI的最后一部分将更有可能描述网络应用程序的处理页面及其技术,例如http://example.com/applicationform.php。其次,考虑到大多数网络浏览器只使用GET或POST的自然限制,设计者觉得需要重新使用POST来完成许多其他数据提交和数据管理任务,包括更改现有记录和删除它们。

早在1998年,一些有影响力的作家就开始努力纠正第一点。[2] 像Ruby on Rails等网络应用框架使设计者更容易为用户提供语义网址。关于第二点,可以使用客户端脚本,或者编写独立的应用程序,在相关的地方使用其他的超文本传输协议方法,[3] 但是除此之外,大多数提交或更改服务器数据的网络表单仍然使用POST。

这并不是说每个网页表单都应该在其开始标签中指定method="post "。许多表单被用来更精确地指定从服务器检索信息,而没有任何改变主数据库的意图。例如,搜索表单非常适合指定method="get "。[4]

有时,HTTP GET甚至不太适合数据检索。这方面的一个例子是当需要在网址中指定大量数据时。浏览器和网络服务器可以限制它们将处理的网址的长度,而不会截断或出错。网址和查询字符串中保留字符的百分比编码可以显著增加它们的长度,虽然Apache超文本传输协议(HTTP)服务器在一个网址中最多可以处理4,000个字符,[5] 但是微软IE浏览器在任何网址中最多只能处理2,048个字符。[6] 同样,在敏感信息(如用户名和密码)必须与其他数据一起提交才能完成请求的情况下,不应使用HTTP GET。即使使用了HTTPS,为了防止数据在传输过程中被截获,浏览器历史和网络服务器日志很可能包含明文形式的完整网址,如果其中任何一个系统被黑客攻击,这些网址都可能被暴露出来。在这些情况下,应该使用HTTP POST。[7]

2 用于提交网页表单编辑

当网络浏览器从网络表单元素发送POST请求时,默认的互联网媒体类型是“application/x-www-form-urlencoded”。[8] 这是一种用可能重复的键对键值对进行编码的格式。每个键值对由一个“&”字符分隔,每个键与其值由一个“=”字符分隔。通过用“+”字符替换空格,然后对所有其他非字母数字[9] 字符使用百分比编码,键和值都可以转义。

例如,键值对

Name: Gareth Wylie
Age: 24
Formula: a + b == 13%!

编码为

Name=Gareth+Wylie&Age=24&Formula=a+%2B+b+%3D%3D+13%25%21

从HTML 4.0开始,表单也可以提交多部分数据/表单数据,如RFC 2388中所定义的。

3 影响服务器状态编辑

根据RFC 7231,当请求是非等幂的时,应该使用POST方法:也就是说,当它每次执行时应该改变服务器状态,例如向博客帖子提交评论或者在在线投票中投票。GET被定义为无效的,没有副作用,幂等运算“对第二个或未来的请求没有副作用”。[10][11] 因此,像搜索引擎索引器这样的网络爬虫通常只使用GET和HEAD方法,以防止它们的自动请求执行这样的操作。

然而,即使对于幂等请求,也有使用POST的原因,特别是如果请求很长。由于URLs的限制,GET方法生成的查询字符串可能会变得很长,特别是由于百分比编码。[10]

参考文献

  • [1]

    ^"Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content". Retrieved 2014-07-24. The POST method requests that the target resource process the representation enclosed in the request according to the resource's own specific semantics..

  • [2]

    ^Berners-Lee, Tim (1998). "Cool URIs don't change". W3C. Retrieved 17 October 2012..

  • [3]

    ^Friedman, Mike (2009). "Using HTTP PUT and DELETE methods in web applications". Retrieved 17 October 2012..

  • [4]

    ^"Form submission". HTML 4.01 Specification. W3C. 1999. Retrieved 17 October 2012..

  • [5]

    ^Rigsby, Dan (2008). "REST and Max URL Size". Retrieved 17 October 2012..

  • [6]

    ^"Maximum URL length is 2,048 characters in Internet Explorer". Microsoft..

  • [7]

    ^"Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content". RFC 7231. Retrieved 2014-07-25..

  • [8]

    ^Berners-Lee, Tim; Connolly, Dan (22 September 1995). "Hypertext Markup Language - 2.0 - Forms". World Wide Web Consortium. Retrieved 15 January 2011..

  • [9]

    ^"Forms in HTML documents"..

  • [10]

    ^Korpela, Jukka (28 September 2003). "Methods GET and POST in HTML forms - what's the difference?". Tampere University of Technology. Retrieved 15 January 2011..

  • [11]

    ^RFC 7231, 4.2.1 Safe Methods.

阅读 55
版本记录
  • 暂无