GET请求和POST请求详述
GET请求和post请求
我们知道,HTTP是超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议。举个简单的例子:
客户端(浏览器)向服务器 提交HTTP请求,服务器收集到请求后向客户端返回响应(响应包含请求的状态信息以及被请求的内容)
那么在客户端与服务器之间进行请求-----响应时,有两种最常用到的请求方式是:
- GET
- POST
接下来我们就来看看这两种请求方式。
一、GET请求
1、什么是GET请求
GET请求是最常见的请求类型,最常用于向服务器查询某些信息,必要时,可以将查询字符串参数追加到URL的末尾,以便将信息发送给服务器。使用GET请求经常会发生一个错误,即查询字符串的格式有问题。查询字符串中每个参数的名称和值都必须使用encodeURLComponent()
进行编码,然后才能放到URL的末尾;而且所有名-值对儿必须有和号(&)分隔,如下所示:
xhr.open("get"."example.php?name1=valuel&name2=value2",true);
下面这个函数可以辅助向现有URL的末尾添加查询字符串参数:
function addURLParam(url,name,value){
url += (url.indexOf("?") == -1 ? "?" : "&");
url += encodeURLComponent(name) + "=" + encodeURLComponent(value);
return url;
}
这个addURLParam()
函数接受三个参数:要添加餐宿的URL,参数的名称和参数的值。这个函数首先检查URL是否包含问号(已确定是否有参数存在),如果没有就添加一个问号,然后将参数名称和值进行编码,在添加到URL的末尾。最火返回添加参数之后的URL。
2、使用GET方法的具体情况
1.客户端与服务端的交互像是一个提问(如查询操作、搜索操作、读操作)
2.请求是为了查找资源,HTML表单数据仅用来帮助搜索
3.请求结果无持续性的副作用(如进行搜索)
4.收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符
5.获取参数或者短小的内容时用GET,如?id=5
或者 ?title=abc&url=http...
3、GET方式提交数据特点
1、GET方式在url后面拼接参数,只能以文本的形式传递参数
2、传递的数据量小,4kb左右(不同浏览器会有差异)
3、安全性低,会将信息显示在地址栏
4、速度快,通常用于对安全性要求不高的请求
二、POST请求
1、什么是POST请求
使用频率仅次于GET的是POST请求,通常用于向服务器发送应该被保存的数据。POST请求应该把数据作为请求的主体提交,而 GET请求传统上不是这样。POST请求的主体可以包括非常多的数据,而且格式不限。在open()
方法的第一个参数的位置传入"post"
,就可以初始化一个POST请求请求,如下所示:
xhr.open("post","example.php",true);
发送POST请求的第二步就是向send()
方法中传入某些数据。默认情况下,服务器对POST请求和提交的Web表单 的请求并不会一视同仁,因此,服务器必须有程序来读取发送过来的原始数据,并从中解析出有用的部分。
2、使用POST方法的具体情况
1.交互是一个命令或订单(order),比提问包含更多信息
2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务
3.用户需要对交互产生的结果负责
4.请求的结果有持续性的副作用,例如,数据库内添加新的数据行
5.GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制,所以使用POST
6.获取大断的内容用POST,通常表单用 POST 方式提交数据,表单的method必须设置为POST
7.对数据有变更的请求(增删)用post;(比如发贴,回复的form 用的是 POST)
3、POST方式提交数据特点:
1、post提交数据相对于get的安全性高一些。(注意:抓包软件也会抓到post的内容,安全性要求高可以进行加密)
2、传递数据量大,请求对数据长度没有要求
3、请求不会被缓存,也不会保留在浏览器的历史记录中
4、用于密码等安全性要求高的场合,提交数据量较大的场合,如上传文件,发布文章等
5、POST方式提交数据上限默认为8M(可以在PHP的配置文件post_max_size选项中修改)
三、GET请求和POST请求的区别
这两种请求都是将数据传送到服务器,他们的区别在于:
- GET在浏览器回退时是无害的,而POST会再次提交请求
- GET产生的URL地址可以被Bookmark,而POST不可以
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
- GET请求只能进行url编码,而POST支持多种编码方式
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
- GET请求在URL中传送的参数是有长度限制的,而POST没有
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
- GET参数通过URL传递,POST放在Request body中
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
更多推荐
所有评论(0)