<Basic>数据提交方式:post和get

本文详细解释了B/S架构中GET和POST两种数据传输方式的区别,包括它们的应用场景、安全性考量及数据大小限制等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的。而Form提供了两种数据传输的方式——get和post。       
   Get请求表示客户端请求一个uri,服务器返回客户端请求的uri,post请求表示客户端请求的时候还要提交数据,比喻提交form表单,要提交的数据会放到请求报文的body部分。服务器收到后这样的请求后通常需要来处理这些数据。
   事实上,Get适用于多数请求,而保留 POST仅用于更新站点。根据 HTTP 规范,Get用于信息获取,而且应该是 安全的和 幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解); 
在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“ “号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; 
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。    
   Form中的Get和POST方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如[url]http://www.mdm.com/test.asp?name=asd&password=sad[/url],数据都会 直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理
3、Get 方式需要使用 Request.QueryString 来取得变量的值;而 Post 方式通过 Request.Form 来访问提交的内容
4、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
5、Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;而 Post 方式传递的数据量相对较大,它是等待服务器来读取数据,不过也有字节限制,这是为了避免对服务器用大量数据进行恶意攻击,根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节
 建议:除非你肯定你提交的数据可以一次性提交,否则请尽量用 Post 方法
6、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
7、Get是Form的默认方法。

 建议:出于安全性考虑,建议最好使用 Post 提交数据


转自:http://blog.youkuaiyun.com/thunderous/article/details/1890391

./http_auth == Info: Trying 192.168.1.31... == Info: TCP_NODELAY set == Info: Connected to 192.168.1.31 (192.168.1.31) port 80 (#0) == Info: Server auth using Basic with user 'config' >> Header Out: POST /login.cgi HTTP/1.1 Host: 192.168.1.31 Authorization: Basic Y29uZmlnOmNvbmZpZw== Accept: */* Content-Type: application/x-www-form-urlencoded Content-Length: 31 username=config&password=config?>> Data Out: username=config&password=config?== Info: upload completely sent off: 31 out of 31 bytes << Header In: HTTP/1.1 200 OK << Header In: pires: Thu, 01 Jan 1970 00:00:00 GMT == Info: no chunk, no close, no size. Assume close to signal end << Header In: <!DOCTYPE html><html><head><!-- HTML meta refresh URL redirection --><meta http-equiv="refresh" content="0; url=/index.shtml"></head><body><p>Loading page, please wait: <a href="/index.shtml">Link to page</a></p></body></html><< Data In: <!DOCTYPE html><html><head><!-- HTML meta refresh URL redirection --><meta http-equiv="refresh" content="0; url=/index.shtml"></head><body><p>Loading page, please wait: <a href="/index.shtml">Link to page</a></p></body></html> == Info: Closing connection 0 write_callback:<!DOCTYPE html><html><head><!-- HTML meta refresh URL redirection --><meta http-equiv="refresh" content="0; url=/index.shtml"></head><body><p>Loading page, please wait: <a href="/index.shtml">Link to page</a></p></body></html>Response 222 from login: <!DOCTYPE html><html><head><!-- HTML meta refresh URL redirection --><meta http-equiv="refresh" content="0; url=/index.shtml"></head><body><p>Loading page, please wait: <a href="/index.shtml">Link to page</a></p></body></html> [makelink]/tmp/so/http-hzm#
最新发布
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值