请求报文的方法及get与post的区别
请求报文的方法及get与post的区别
请求的起始以方法作为开始,方法用来告诉服务器要如何做。
在开发中通常有两种请求方式。
- get方式: 是以实体的方式得到由请求 URI 所指定资源的信息,如果请求 URI 只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
- post方式: 用来想目的服务器发出请求,要求它接收被附在请求后的实体,并把它当作请求队列中请求 URI 所指定资源的附加新子项,所以 post 请求可能会导致新的资源的建立和 / 或已有资源的修改。
除了以上两种常用的请求方式,还有另外五种请求方法。说明如下。
(1) HEAD: 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
(2)DELETE: 请求服务器删除指定的页面。
(3)CONNECT: HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
(4)OPTIONS: 允许客户端查看服务器的性能。
(5)TRACE: 回显服务器收到的请求,主要用于测试或调试。
get与post的区别
图片摘取于百度
接下来,根据百度的答案逐一分析。
(1) get是从服务器上获取数据,post是向服务器传送数据。
看一下HTTP RFC 文档对这两种请求的定义。
根据HTTP规范,get用于信息获取,而且应该是安全的和幂等的。
post表示可能会修改服务器上资源的请求。
通俗的来讲,我们可以从两个角度看待get请求。
-
从发送请求的角度,get请求相当于我们在数据库中做了查询的操作,这样的操作不影响数据库本身的数据。
-
从接收返回数据的角度,幂等的含义简单地说就是发送get请求不改变返回数据的内容。
例如,你发送get请求获取测试论坛的首页信息。首页信息并不会因为你发了请求而改变。因为get用于不改变返回信息内容的请求,所以HTTP规范定义它是安全的,就像对数据库不做增删改操作,只查询数据一样。
而post的用途呢,表示会改变服务器上所返回资源信息的请求,相当于我们在数据库中做了修改的操作,会影响数据库本身的数据。
例如,你在测试论坛网上发了帖子,做了评论,得到了积分等。这种情况下,资源状态被改变了,所以HTTP规范定了post请求是可能会改变服务器资源的请求。
通过HTTP规范的定义,可以看出get和post都是用作传递及获取服务器信息的请求。get请求也可以向服务器传递数据,post请求也需要服务器返回数据。
(2)get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
这个答案是在叙述get和post表现形式的不同
-
get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以 ? 分割URL和传输数据,多个参数用 & 连接。post请求就是把提交的数据放置在HTTP包的 body 中。
这种形式是HTML标准对HTTP协议用法的约定,并不能作为post和get请求的区别。现在也有很多Web Server支持get中包含body的表现形式。
(3)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
-
这个答案有点不知所云,获取请求变量的值是由服务器端的配置所决定的。这些与post和get请求的区别完全没有关系。
(4)get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
在HTTP协议规范中,没有对传输的数据大小进行限制,也没有对URL长度进行限制。
如果说对于用get请求URL上有限制的话,取决于以下两方面。
1.HTTP客户端浏览器自己的限制: 如IE限定URL长度为2083字节,opera是4050,Netscape是8192等。
2.Web服务器为了效率及安全的考虑,,所以修改Apache、IIS的配置对post提交数据大小进行的限制。
限制并不能作为post和get请求的区别,所以这个答案继续是错的。
(5)get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
我们猜测一下这个答案的坐着为何这样说,应该是由于post请求在URL上看不到传输数据吧。