Http协议中Get和Post的浅谈

简介:

起名困难户,每次写文章最愁的就是不知道该如何起个稍具内涵的名字,如果这篇文章我只是写写Get和Post的区别,我可以起个名字“Get和Post的那点事”,如果打算阐述一下Http协议原理性内容,那该叫“Http中你不知道的那些事”,两者都不是我想要的,前者太过浅薄,后者太过深奥,已超出本人的能力范围,于是我只能写点Http,Get,Post和个稀泥大家就将就着看一下,开头很多废话的毛病我发现我是越来越难改了,进入正题吧~

Http

HTTP(Hypertext transfer protocol),先说下着几个单词,Hypertext是超文本(除了HTML外,也可以是带有超链接的XML或JSON),protocol是协议,transfer翻译应该是移交(也可以翻译成传输,运输,还有一个更具体的词是transport),最开始学校学习Http的所有市面能见到的书籍都翻译成超文本传输协议,Http设计的本身是为了移交和操作资源,并不是为了传输资源.最开始的的网站都是静态内容类似今天云盘,实现了资源共享,URL(Uniform Resoure Locator:统一资源定位符)用来映射网上的资源,为了大家能统一的访问web资源,Http提供了几种方法访问资源.

Http协议中定义了与服务器之间交互的八个方法:get(获取资源),post(向指定资源提交数据进行处理请求,增加或者更新资源),put(向指定资源位置上传其最新内容 ),delete(请求服务器删除Request-URI所标识的资源);

head(主机端响应Client端的一些数据文件头),options(主机端响应Client端的一些允许的功能与方法。返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性),trace(回显服务器收到的请求,主要用于测试或诊断),connect(HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器)。以前出去面试的时候只知道有get和post请求,对于其他一概不知,现在想来有点惭愧。

Get和Post的基础概念

HTTP协议本身是一种面向资源的应用层协议,但对HTTP协议的使用实际上存在着两种不同的方式:一种是RESTful的,它把HTTP当成应用层协议,比较忠实地遵守了HTTP协议的各种规定;另一种是SOA的,它并没有完全把HTTP当成应用层协议,而是把HTTP协议作为了传输层协议,然后在HTTP之上建立了自己的应用层协议。

说到这里不得不说到一个大神级的人Roy Thomas Fielding,维基上有详细英文介绍,我说下中文介绍,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。基于以上的工作经历他写了一个篇让人惊叹的博士论文Architectural Styles and the Design of Network-based Software Architectures,中文名叫架构风格与基于网络应用软件的架构设计(下载链接:http://pan.baidu.com/s/1bnGQUsv).

论文中提出了一个REST(REpresentational State Transfer即表现层状态转移)架构。对应的就是上面的RESTFUL的使用方式,项目中没有用到过,看过一点一点皮毛,园友有兴趣的可以自己研究一下~Get和Post这两哥们用的太广泛了,而且面试的时候基本上跟递归一样是打开共同话题的谈资,还是看概念吧~

1.按照最开始Http协议的设计,,GET用于获取资源,而且应该是安全的和幂等的。

安全和幂等属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它。按照规范讲get只用于获取服务器资源,但是你用get执行了其他操作,虽然违反了规范,也不会有影响。幂等属于数学中的概念,简单说下吧:

一元运算时,其作用在任一元素两次后会和其作用一次的结果相同。例如,a的绝对值的绝对值等于a,abs(a)=abs(abs(a))。
二元运算时,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1,0*0=0。
 2.按照最开始Http协议的设计,post用于增加资源或者更新资源。 

Get和Post异同点

异同点网上随便找找,满大街都是,既然要写了,我还是免不了俗,尽量按照自己理解的方式去比较:

1.可见性,get访问时URL是所有人都可见的,post则是不可见的.

2.长度限制,get和post传递长度都是是没有限制的(不知道是自己当时没学好还是老师误人子弟说get是有长度限制的,很长一段时间以为get请求长度为1kb),get是放在URL一起去请求的,浏览器限制了URL的长度,导致get传递的参数不能太长.URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。只是浏览器上有限制,不同浏览器限制不一样,IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。Safari中url最大长度限制为 80,000个字符。OperaURL最大长度限制为190,000个字符。Chrome对url长度限制为8182个字符。

POST是请求大小是没有限制的,Web服务器会对post请求进行控制,以IIS7为例

在如下路径C:\Windows\System32\inetsrv\config\schema找到IIS_schema.xml,在其中搜索一下 name="requestLimits",就会看到三个配置。

<attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" /> 
<attribute name="maxUrl" type="uint" defaultValue="4096" />
<attribute name="maxQueryString" type="uint" defaultValue="2048" />

postIIS请求限制为最多为28.6M,get请求IIS限制为2KB,如有需要可根据需求修改长度大小.

3.安全性,与 post相比,get的安全性较差,因为所发送的数据是 URL 的一部分(登录的时候提交数据应该没人会用get),post比get更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

4.数据类型,get只允许 ASCII 字符,post传递没有限制,也允许二进制数据。

5.编码类型,form的enctype属性为表单控件的内容编码方式,常用有两种:application/x-www-form-urlencoded(默认)和multipart/form-data,不管get还是post都可以使用这两种编码方式, 当表单中含有type=file文件控件的时候发送方式只能使用post,内容编码方式只能使用multipart/form-data.

6.书签,缓存get请求可以收藏为书签,能被缓存,post不可以被收藏为书签,不可以被缓存.

7.取值方式ASP.NET中对get请求使用Request.QueryString取值,对Post请求使用Request.Form取值,如果偷懒的话直接用Request两者通用,JSP对get请求使用request.QueryString("");取值,对Post请求使用request.getParameter("");取值,你也可以直接用request.getParameter("")获取get请求中的数据.在PHP中,可以用GETGET和_POST分别获取GET和POST中的数据,而$_REQUEST则可以获取GET和POST两种请求中的数据。

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/3886020.html,如需转载请自行联系原作者

相关文章
|
1月前
|
Android开发 Kotlin
|
29天前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
312 2
|
2月前
|
存储 网络协议 安全
HTTP 协议及会话跟踪机制详解
本文详解了 HTTP 协议的核心知识,包括其定义(超文本传输协议,基于 TCP,规定客户端与服务器通信规则)及与 HTTPS 的区别(安全性、端口、资源消耗)。 介绍了 GET 与 POST 请求的差异(参数限制、安全性、应用场景),以及 Restful 风格(通过 URL 定位资源,请求方式决定操作)。列举了常见 HTTP 状态码(如 200 成功、404 资源未找到),对比了转发与重定向的区别(服务器端一次请求 vs 客户端两次请求)。 还阐述了会话跟踪机制:Cookie 基于客户端存储,通过Set-Cookie和Cookie头实现,安全性较低;Session 基于服务端存储,依赖 C
231 1
|
1月前
|
缓存 网络协议 UED
深度解析HTTP协议从版本0.9至3.0的演进和特性。
总的来说,HTTP的演进是互联网技术不断发展和需求日益增长的结果。每一次重要更新都旨在优化性能,增进用户体验,适应新的应用场景,而且保证了向后兼容,让互联网的基础架构得以稳定发展。随着网络技术继续进步,我们可以预期HTTP协议在未来还会继续演化。
335 0
|
2月前
|
XML 安全 网络架构
深度对比SOAP与HTTP协议:详细理解它们的工作原理和差异
在设计服务和系统交云策略时,考虑到上述差异是至关重要的。SOAP适合需要高安全性、可靠性和事务支持的企业级应用。而HTTP适合Web界面浏览、RESTful服务和需要快速响应的轻量级通信。根据具体需求和上下文,开发者可以选择合适的协议以实现最优的系统性能和用户体验。
282 0
|
2月前
HTTP协议中常见的状态码 ?
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类。常见状态码包括:101(切换协议)、200(请求成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器错误)。
271 0
|
Web App开发 监控 前端开发
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
一、引言   最近在整理理大数据模式下的数据仓库数据模型,资料来自互联网和读过的数据仓库理论和实践相关。 二、3NF (1)1NF-无重复的列   数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
798 0
|
Web App开发 前端开发 Java