get和post请求的详解分析与比较

method中get和post解析,form表单中get和post的区别

get和post的定义

采用URL请求路径传输参数。参数拼接在URL后面。
URL,全称Uniform Resource Locator,中文解释为统一资源定位符
是因特网的万维网服务程序上用于指定信息位置的表示方法,是互联网上标准资源的地址。
URL中不拼接参数信息,参数在传输过程中不可见。

get

参数传输过程中隐私性较差,直接在URL后面。
路径可以容纳的数据有限,只能传递少量参数。
所有请求默认就是get。
Get方式传参,不是非得在form表单里面,可以手动写,在超链接的href里面直接在地址后面加?id=2。
http://localhost:8080/JavaWeb/student?method=deleteById&id=23
http://localhost:8080/JavaWeb/student?name=zhangsan&age=12&gender=男

post

采用实体内容传参数。
参数在传输过程中不可见,隐私性好。
实体内容专门用来传输数据,大小没有限制。
使用:在form上加method="post
get与post的联系
get和post都是提供信息传输,都能够在浏览器和服务器之间进行信息的传输。

get和post传输的信息都是由浏览器通过request参数进行获取的。

get与post的区别

1、缓存

Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;由于一个get得到的结果直接对应到一个URL,所以get的结果页面有可能被浏览器缓存,而post一般不能。

Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

2、安全性

Get是不安全的,因为在传输过程,数据被存放在请求的URL地址中,这样就可能会有一些隐私的信息被第三方看到。所以在对安全性有要求的情况下,应该使用post

3、提交数据长度

Get方式传输的数据量非常小,一般限制在 2KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击,根据微软方面的说法,微软对用 Request.Form()可接收的最大数据有限制,IIS4中为 80KB 字节,IIS5 中为 100KB 字节。

IE将请求的URL长度限制为2083个字符,从而限制了get提交的数据长度,如果URL超出了这个限制,提交form时IE不会有任何反映。

4、编码

get只能向服务器发送ASCII字符,而post则可以发送整个ISO 10646中的字符。

get和post对应的enctype属性有区别。enctype有两个值,默认值为application/x-www-form-urlencoded(在发送前编码所有字符)

另一个是multipart/form-data(用于文件上传)只能用于post

get和post本质区别

1、Get是用来从服务器上获得数据,而post是用来向服务器上传递数据
如果采用Post方法,浏览器将会按照下面两步来发送数据。

首先浏览器将action属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。

在服务器端,一旦Post样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码,用户特定的服务器会明确指定应用程序应该如何接受这些参数。

采用Get方法:

浏览器会直接与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据,然后直接在一个传输步骤中发送所有的表单数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

请求过程比较

post请求的过程:

1.浏览器请求tcp连接(第一次握手)

2.服务器答应进行tcp连接(第二次握手)

3.浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)

4.服务器返回100 continue响应

5.浏览器开始发送数据

6.服务器返回200 ok响应

get请求的过程

1.浏览器请求tcp连接(第一次握手)

2.服务器答应进行tcp连接(第二次握手)

3.浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)

4.服务器返回200 ok响应

也就是说,目测get的总耗是post的2/3左右

如何正确选择get和post

当且仅当form是幂等的时候,使用get。

幂等:多次相同的请求产生的副作用,和一次请求的副作用相同。

如果提交请求纯粹只是从服务器端获取数据而不是进行其他操作,并且多次提交不会有明显的副作用,应该使用get。

比如:搜索引擎的查询(http://www.google.com/search?q=abc)和分页(user.do?page=1)

如果提交这个请求会产生其他操作和影响,就应该使用post。

比如:修改服务器上数据库中的数据;发送一封邮件;删除一个文件等

另一个要考虑因素是安全性。

若符合下列任一情况,则用post方法:

a.请求的结果有持续性的副作用,例如:数据库内添加新的数据行。

b.若使用get方法,则表单上收集的数据可能让URL过长。

c.要传送的数据不是采用ASCII编码。

若符合下列任一情况,则用get方法:

a.请求是为了查找资源,html表单数据仅用来搜索。

b.请求结果无持续性的副作用。

c.收集的数据及html表单内的输入字段名称的总长不超过1024个字符。

本文整理自其他博主

method中get和post的解析
form表单中method的get和post区别
http中get和post性能对比

猜你喜欢

转载自blog.csdn.net/mfysss/article/details/128925457