post和get请求方式以及区别

1.一些枯燥的概念:

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。 URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

2.GET是幂等的,POST是要修改更新的

通过上面概念的理解,我们很容易发现,GET是用于信息获取或查询的,这就意味着它是幂等的(对幂等的解释参见 http://www.yining.org/2010/05/04/http-get-vs-post-and-thoughts/),POST可能会 改变服务器上的资源请求。 这样一说有点抽象了,网上有一个我认为比较合理的例子就是新闻站点的例子:例子如下:get方式---新闻站点的头版不断更新。虽然第二次请求会返 回不同的一批新闻,该操作仍然被认为是幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有 改变资源即可;post方式--读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。仔细考虑一 下这个例子就能明白GET是幂等的而POST是要修改更新的了。

3.通过实例了解post和get的http请求过程

通过上面的分析,已经对GET和POST有所了解,也能感觉到他俩有着本质上的区别就是一个是拿来,一个是要更新修改。 下面就通过HTTPLOOK软件来看看他们是怎样进行HTPP请求的,它们到底是怎样进行传输的。 首先建立两个jsp页面用来测试: 第一个页面是post_get_jsp(代码如下): [html]

  1. <%@pagelanguage="java"contentType="text/html;charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type"content="text/html;charset=GB18030">
  7. <title>Inserttitlehere</title>
  8. </head>
  9. <body>
  10. <formname="aaForm"action="http://localhost:8080/post_get/test.jsp"method="get">
  11. <inputtype="text"id="text1"name="text1"value="dadfdf">
  12. <inputtype="submit"id="submit1"name="submit2"value="提交">
  13. </form>
  14. </body>
  15. </html>

第二个页面是test.jsp(代码如下): [html]

  1. <%@pagelanguage="java"contentType="text/html;charset=GB18030"
  2. pageEncoding="GB18030"%>
  3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  4. <%
  5. Stringa=request.getParameter("text1");
  6. out.println(a);
  7. %>
  8. <html>
  9. <head>
  10. <metahttp-equiv="Content-Type"content="text/html;charset=GB18030">
  11. <title>Inserttitlehere</title>
  12. </head>
  13. <body>
  14. <h1>ddfdgdg</h1>
  15. </body>
  16. </html>

简单说一下http请求: <request line> <headers> <blank line> <request-body> 在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据。 开始测试post提交 http请求如下:

开始测试get提交 http请求如下:

4.POST与GET区别

①.GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

②.从上面的http请求中就能看出,GET提交是将请求的数据附加到URL之后,用?分割、参数用&连接。并且字符串已经被加密。而 post的提交是放到了http包中。从这点看来GET请求的地址栏会改变,RUL附加上了请求的数据,而POST地址栏不会改变,UTL没有变化。更加 深一层看GET的安全性不高,很容易暴露信息。

③.另外虽然http协议没有对传输数据大小进行限制也没有对url长度进行限制,但是实际情况中浏览器对url进行限制,这样GET的传输数据大小随着URL长度被限制而受到限制。反观POST由于不是通过URL传值,所以没有限制。


原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

DNS服务

DNS是域名系统(Domain Name Server)的缩写,是一种组织成域层次结构的计算机和网络命名服务系统。DNS用于TCP/IP网络(Internet)...

3468
来自专栏JetpropelledSnake

Python Web学习笔记之Python多线程和多进程、协程入门

进程和线程究竟是什么?如何使用进程和线程?什么场景下需要使用进程和线程?协程又是什么?协程和线程的关系和区别有哪些? 程序切换-CPU时间的分配 首先,我们的任...

3695
来自专栏不想当开发的产品不是好测试

jenkins 邮件添加附件

背景 当CI执行失败的时候,想获取到失败的用例,然后在本地调试,testNG是自带一个testng-failed.xml来记录的; 想法:尝试使用git 来p...

2415
来自专栏挖掘大数据

零基础学习大数据,搭建Hadoop处理环境

由于Hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7,具...

2.1K10
来自专栏糊一笑

使用github+jekyll搭建个人博客

给自己一个小空间 聊聊起初 每次看到大牛们的博客,都会激起一颗一定要搭建自己博客的心,毕竟有着一颗向大牛们看齐的心。但是一直不知道如何下手,从最初的csdn写写...

3396
来自专栏逸鹏说道

全站缓存时代

原则:动静分离,分级缓存,主动失效。 Web 开发中,接口会被分为以下几类: 纯静态页面。打死我都不会修改的页面。很长一段时间内,基本上不会修改。比如:关于我们...

3918
来自专栏网络

ajax极简教程

推荐阅读 微服务: springboot系列教程学习 源码:Javaweb练手项目源码下载 调优:十五篇好文回顾 面试笔试:面试笔试整理系列 一、什么是ajax...

20810
来自专栏james大数据架构

0基础搭建Hadoop大数据处理-环境

   由于Hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7...

2037
来自专栏小詹同学

Python入门(一)——windows系统下python的安装

跟着北京某理工大学的某导师学习和研究人脸识别技术已经有一段时间了,在用C++后,在考虑用另一种语言python进行人脸识别的研究。那么要做的第一件事就是在电...

3585
来自专栏实用工具入门教程

如何部署 Node.js 开发环境

Node.js是一个用于通用编程的JavaScript平台,允许用户快速构建网络应用程序。通过在前端和后端利用JavaScript,Node.js使开发更加一致...

3840

扫码关注云+社区