GET和POST的区别,表单中请求php文件

get和post常见的区别

  • http协议最常见的两种方法GET和POST
  • 请求缓存:GET 会被缓存,而post不会
  • 收藏书签:GET可以,而POST不能
  • 保留浏览器历史记录:GET可以,而POST不能
  • 用处:get常用于取回数据,post用于提交数据
  • 安全性:post比get安全
  • 请求参数:querystring 是url的一部分get、post都可以带上。get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)
  • 请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制

get和post误区

误区一:“用处:get常用于取回数据,post用于提交数据”

曾听到过这样一种说法:get替换post来优化网站性能,虽然这种说法没错,也的确get常被用于取回数据,但是post也被一些ui框架使用于取回数据,比如kendo ui中的grid,就是用post来接受数据的。所以结论是get、post用途也是因地制宜。如果你有使用过kendo UI,会发现分页、过滤、自定义的参数都包含在form data里面。

误区二:“请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制”

GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制(不仅仅是querystring的长度),这个限制是特定的浏览器及服务器对他的限制

下面就是对各种浏览器和服务器的最大处理能力做一些说明:

  • IE浏览器对URL的最大限制为2083个字符
  • Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符。
  • Safari (Browser):URL最大长度限制为 80,000个字符。
  • Opera (Browser):URL最大长度限制为190,000个字符。
  • Google (chrome):URL最大长度限制为8182个字符。
  • Apache (Server):能接受最大url长度为8,192个字符。
  • Microsoft Internet Information Server(IIS):能接受最大url的长度为16,384个字符。

所以为了符合所有标准,url的最好不好超过最低标准的2083个字符(2k+35)。当然在做客户端程序时,url并不展示给用户,只是个程序调用,这时长度只收web服务器的影响了。对于中文的传递,一个汉字最终编码后的字符长度是9个字符。

最常见的form表单,浏览器默认的form表单,默认的content-type是application/x-www-form-urlencoded,提交的数据会按照key value的方式,jquery的ajax默认的也是这种content-type。当然在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了。

误区三:“post比get安全性要高”

这里的安全是相对性,并不是真正意义上的安全,通过get提交的数据都将显示到url上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而post不会。另外get提交数据还可能会造成CSRF攻击。

表单中请求php文件

$_GET 变量

  • 预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。
  • 从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。
<form action="form.php" method="get"  target="iframe1">
	账号:<input type="text" name="fname" />
	密码:<input type="password" name="pwd1" id="" />
	<input type="submit" id="" name="" value="提交" />
</form>

“welcome.php” 文件现在可以通过 $_GET 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_GET 数组中的键):

$fname = $_GET["fname"];
$pwd1 = $_GET["pwd1"];
if($fname == "li" && $pwd1 == "123"){
	echo "登录成功";
} 

何时使用 method=“get”?

在 HTML 表单中使用 method=“get” 时,所有的变量名和值都会显示在 URL 中。
注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!
而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。
注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。

$_POST 变量

  • 预定义的 $_POST 变量用于收集来自 method=“post” 的表单中的值。
  • 从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
  • 注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size
    进行更改)。
<form action="welcome.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>

“welcome.php” 文件现在可以通过 $_POST 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的键):

$fname = $_POST["fname"];
$pwd1 = $_POST["pwd1"];
if($fname == "li" && $pwd1 == "123"){
	echo "登录成功";
} 

何时使用 method=“post”?

从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。
然而,由于变量不显示在 URL 中,所以无法把页面加入书签。

猜你喜欢

转载自blog.csdn.net/lipeiwen1998/article/details/107724685