浅谈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个字符。

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/web/Skills/

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中,可以用$_GET和$_POST分别获取GET和POST中的数据,而$_REQUEST则可以获取GET和POST两种请求中的数据。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, 协议
, http协议
, url请求重复
, get
, 参数最大长度
, post请求
, 长度
, http post
, 请求大神帮助
, 取值 web
, 资源
, get请求
限制
http协议 get post、http协议post请求参数、pb调用http协议post、http post 协议、http post协议传输xml,以便于您获取更多的相关知识。

时间: 2024-10-31 06:09:01

浅谈Http协议中的Get和Post的相关文章

用户体验设计:浅谈可用性测试中沟通的技巧

文章描述:如何快速解除用户防备?--浅谈可用性测试中沟通的技巧.   一般来说,在产品的设计和开发过程中,不同阶段会使用到不同的用户研究方法.比如,在产品正式发布之前,通常会进行可用性测试.可用性测试,是指让一群有代表性的用户尝试对产品进行典型操作,同时观察员和开发人员在一旁观察.聆听.记录.该产品可能是一个网站.软件,或其他任何产品,它可能已经做好,也可能尚未成型. 对于一个典型的可用行测试,我们可以:1. 通过观察用户在使用产品过程中出现的一些问题,发现产品的可用性问题2. 从测试参与者的表

浅谈网站SEO中避免pr高权重外链建设误区

做网站优化的站长需要经常要去发外链或者是交换友情链接,网站外链的数量和质量对网站的关键词排名有着非常重要的影响.我们去和别的网站交换友情链接,首先要考虑的就是对方网站是否和我们的网站门当户对.大家都喜欢高pr和高权重,认为权重高的网站自然能传递给我们网站不错的权重,从而提高我们网站的关键词排名.但事实上高pr和高权重并不一定会给我们网站带来好处,有时候还会影响搜索引擎对我们网站的印象. 网站优化中做外链最主要的就是把其他页面的权重传递给我们的网站,提高我们网站自身的权重,从而使关键词在搜索引擎中

浅谈SQL Server中的快照

原文:浅谈SQL Server中的快照 简介     数据库快照,正如其名称所示那样,是数据库在某一时间点的视图.是SQL Server在2005之后的版本引入的特性.快照的应用场景比较多,但快照设计最开始的目的是为了报表服务.比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点.快照还可以和镜像结合来达到读写分离的目的.下面我们来看什么是快照.   什么是快照     数据库快照是 SQL Server 数据库(源数据库)的只读静态视图

浅谈云计算发展中亟待解决的问题

发展云计算不能"跟风攀比""乱云飞渡"--浅谈云计算发展中亟待解决好的几个问题 到目前为止,中国已经掀起了一场云计算发展的热潮.从媒体的热炒,到资本的造势,再到大量学术活动裹挟着的商务宣传,已经拼命地为云计算概念加温.加上Google.IBM.微软等IT巨头们以前所未有的速度和规模进行云计算的推广和炒作,更是把云计算推上了峰巅.云规划,云纲要,云项目.云基地似乎已经成为各级政府新的发展规划中一道最亮丽的风景线. 随着各地云计算热情的空前高涨,一时间多地政府纷纷出台优

浅谈PHP正则中的捕获组与非捕获组_php实例

今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同时也希望有大神和细心的学习者找到我理解中出现的问题. 什么是捕获组 我们先看一下PHP的正则匹配函数 int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags =

浅谈spring容器中bean的初始化_java

当我们在spring容器中添加一个bean时,如果没有指明它的scope属性,则默认是singleton,也就是单例的. 例如先声明一个bean: public class People { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String get

浅谈MySQL存储过程中declare和set定义变量的区别_Mysql

在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅在类中生效.即只在存储过程中的begin和end之间生效. 2.@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据.如何理解呢?可以看下面这个简单例子,很好理解.  (1)先执行下面脚本,创建

浅谈js函数中的实例对象、类对象、局部变量(局部函数)_javascript技巧

定义 function Person(national,age) { this.age = age; //实例对象,每个示例不同 Person.national = national; //类对象,所用实例公用 var bb = 0; //局部变量,外面不能访问(类似局部函数) } 调用 var p = new Person("中国", 29); document.writeln("age:" + p.age); document.writeln("obj

浅谈c语言中类型隐性转换的坑_C 语言

谨记:在C语言中,当两种不同类型之间运算时,低字节长度类型会向高自己长度类型转换,有符号会向无符号类型转换. 举例子如下: #include <stdio.h> void func(void) { int i = 1; unsigned char c1 = 1; signed char c2 = -1; if (c2 > i){ printf("\r\n -1 > 1"); } else{ printf("\r\n -1 <= 1");