我们知道,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上,所以不能用来传递敏感信息
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐