一.PHP中,预定义的$_GET变量用于收集来自method="get"表单中的值。
实例:
form_get.html
<html>
<head>
<meta charset="utf-8">
<title>GET 测试</title>
</head>
<body>
<form action="response.php" method="get">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
response.php:
<html>
<head>
<meta charset="utf-8">
<title>PHP 测试</title>
</head>
<body>
欢迎 <?php echo $_GET["fname"]; ?>!<br>
您的年龄是 <?php echo $_GET["age"]; ?> 岁。
</body>
</html>
如下:
提交后,可看到发送到服务器的URL如下所示,而此时response.php文件即可通过$_GET变量来收集表单数据了,这里需要注意的是,表单域的名称会自动成为$_GET数组中的键:
这里若使用记事本或EditPlus编辑代码,若出现乱码,则需:
将默认编码ANSI修改为UTF-8保存即可。
何时使用method="get"呢?
1.在HTML表单中使用method="get"时,所有变量名和值都会显示在URL中,因此在发送密码或其他敏感信息时,不应该使用该方法。
2.正因为变量显示在URL中,因此可在收藏夹中收藏该页面,在某些情况下,这很有用。但HTTP GET方法不适合大型的变量值,它的值不能超过2000个字符。
二.PHP中,预定义的$_POST变量用于收集来自method="post"表单中的值。
form_post.html
<html>
<head>
<meta charset="utf-8">
<title>POST 测试</title>
</head>
<body>
<form action="response.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
response.php:
<html>
<head>
<meta charset="utf-8">
<title>PHP 测试</title>
</head>
<body>
欢迎 <?php echo $_POST["fname"]; ?>!<br>
您的年龄是 <?php echo $_POST["age"]; ?> 岁。
</body>
</html>
点提交后,response.php通过$_POST变量来收集表单数据,表单域的名称会自动成为$_POST数组中的键:
何时使用method="post"呢?
从带有POST方法的表达发送的信息,对任何人都是不可见的,且对发送信息的量也没有限制。然而,由于变量不显示在URL中,因此无法把页面加入书签。
GET和POST的区别:
1.多数浏览器对POST采用两阶段发送数据,先发请求头,再发请求体,即使参数少也会被分成两个步骤来发送,也就是第一步发header数据,第二步发body数据。HTTP为应用层协议,而再传输层有些情况TCP会出现两次连接的过程,HTTP协议本身不保存状态信息,一次请求一次相应,对TCP而言,通信次数越多反而越不可靠,最可靠的就是在一次连接中就传输完需要的消息,尽量使用GET请求来减少网络耗时,若通信时间增加,这段时间客户端与服务端一直保持连接状态,可能增加服务端负载,可靠性就会下降。
2.GET请求会被cache,也就是GET请求能够被保持在浏览器中,尤其是当GET提交密码等重要数据,别人查看历史记录,便可直接看到这些私密数据,而POST不会进行cache。
3.GET参数带在URL后面,传统IE中URL的最大可用长度为2048个字符,其他浏览器对URL长度限制实现上各不相同,而POST请求理论上无长度限制。
4.GET提交的数据大小,不同浏览器的限制不同,一般在2K-8K之间,POST提交数据比较大,大小由服务器来设定,而且某些数据只能用POST方法携带,比如file。
5.全部用POST不合理,最好先把请求按功能和场景先分一下类,对数据请求频繁,数据不敏感且数据量在普通浏览器最小限定的2K范围内的,这种情况下使用GET,其他情况使用POST。
6.GET的本质是"得",而POST本质是"给",且GET是"幂等"的,在这一点上,GET被认为是"安全的",实际上服务端也可用作资源更新,但这种用法违反约定,容易造成。
参考
参考
因篇幅问题不能全部显示,请点此查看更多更全内容