【傻傻分不清楚】 一 Get和Post

废话:面试的时候经常会被问到这样的问题,说说**和**的区别...而且做项目也会被这个问题困扰,解决办法无非就是在网上搜搜人家怎样谈区别的,但是自己并没有真正理解,只知其一,下次再遇到,又去百度,周而复始,事倍功半,索性写一个系列来仔细分析下这些数据结构,嗯,开始吧!

写这篇博客之前,看了博客园里一位前辈写的关于get、post区别的文章,更是一头雾水,原文:GET和POST有什么区别?及为什么网上的多数答案都是错的。瞬间颠覆我之前的观点,于是各种找资料,参考浅谈HTTP中Get与Post的区别,总算有了一点眉目,get和post是http协议传送数据的两种方式,那就先来看看http是怎样工作的。http工作原理非常详细的分析了http通信的工作流程。简单总结了下,Http工作步骤:


1.建立连接

浏览器(客户端)通过网络,用tcp建立与服务器的连接,默认端口为80.

2.打包数据

浏览器分析请求地址,从中分解出协议名(http)、主机名(www.baidu.com)、端口、对象路径,这个过程需要DNS解析域名得到主机IP.(这就是为什么很多时候能上QQ,但是不能刷网页的原因,因为dns解析出的ip地址是错误的),然后将分解出的各个部分,结合主机信息打包为请求报文。

3.发送请求报文

请求报文由请求行、请求头部、空行和请求数据4部分组成。

4.服务器接收请求并响应

一个响应由状态行、响应头部、空行和响应数据4部分组成。状态行包含(信息的协议版本号、成功or错误代码、mime信息),响应信息发送完毕后,服务器会发送一段空白行,表示响应头部结束,然后再发送实际请求数据。

5.断开连接

服务器主动关闭tcp,如果浏览器在请求头信息中加入connection:keep-alive,那么tcp始终保持打开,浏览器可继续发送请求。

6.客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。


至此,http工作流程弄清楚了,再回到get和post上就比较容易分析,Get/Post是http协议同服务器交互的多种方法之二,最基本的还有两种put、delete,四种方法对应增、删、改、查,所以Get用于提交资源,Post用于更新资源

感官上来说,Get请求参数跟在URL地址后,以?-&的形式传递,字符转义引用一下前辈的话“如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII”。Post则是以数据包的形式

安全性来说,Get请求的数据,即使敏感参数也会明文出现在URL中,Post则不会。

服务器端来说,获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form,至于这两种获取数据的方式异同和优先级,我会以本系列另一篇博文在说明。

发送数据大小来说,GET方式提交的数据最多只能是1024字节,Post则没有限制,这个说法,其实存在质疑,Get提交数据大小受限,无非是URL长度受限,而Http并没有对URL长度作出限制,只是不同的浏览器会有限制。


说了这么多,如果以后再被问到这个问题,就用上面黑体字回答他。

有大神针对Get、Post专门做过实验,参考ASP.NET MVC3中关于httppost提交



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值