HTTP请求中POST与GET的区别

HTTP请求中POST与GET的区别一 原理区别一般我们在浏览器输入一个网址访问网站都是 GET 请求 再 FORM 表单中 可以通过设置 Method 指定提交方式为 GET 或者 POST 提交方式 默认为 GET 提交方式 HTTP 定义了与服务器交互的不同方法 其中最基本的四种 GET POST PUT DELETE HEAD 其中 GET 和 HEAD 被称为安全方法 因为使用 GET 和 HEAD 的 HTTP 请求不会产生什么动作 不会产生动作意味着 GET

一、原理区别

一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。

HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。

根据HTTP规范,POST可能会修改服务器上的资源的请求。比如CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。



二、表现形式区别

搞清楚了两者的原理区别后,我们来看一下在实际应用中的区别。

首先,我们先看一下HTTP请求的格式:

 
   
    
     
      
       
      
     
    
  

在HTTP请求中,奇异行必须是一个请求行,包括请求方法,请求URL,报文所用HTTP版本信息。紧接着是一个herders小节,可以有零个或一个首部,用来说明服务器要使用的附加信息。在首部之后就是一个空行,最后就是报文实体的主体部分,包含一个由任意数据组成的数据块。但是并不是所有的报文都包含实体的主体部分。

GET请求实例:

GET http://weibo.com/signup/signup.php?inviteCode=2388493434
Host: weibo.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

POST请求实例:

POST /inventory-check.cgi HTTP/1.1 Host: www.joes-hardware.com Content-Type: text/plain Content-length: 18 item=bandsaw 2647

接下来看看两种请求方式的区别:


1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。


POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。


因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。


2、传输数据的大小


在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。


对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。



3、安全性


POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击



4、HTTP中的GET,POST,SOAP协议都是在HTTP上运行的


三、HTTP响应


HTTP响应报文的格式

 
      
       
        
         
          
         
        
       
     

status,状态码描述了请求过程中发生的情况


reson-phrase 是数字状态码的可读版本


常见的状态码以及含义如下:


200 OK 服务器成功处理请求


301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包含一个Location URL,说明资源现在所处的位置


304 Not Modified(未修改) 客户的缓存资源是最新的,要客户端使用缓存内容


404 Not Found 未找到资源


501 Internal Server Error 服务器遇到错误,使其无法对请求提供服务


HTTP响应示例

HTTP/1.1 200 OK

Content-type: text/plain Content-length: 12 Hello World!















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223164.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:43
下一篇 2026年3月17日 下午2:43


相关推荐

  • oracle数据库sga用途_Oracle SGA详解

    oracle数据库sga用途_Oracle SGA详解SGA SystemGlobal 系统全局区 这是一个非常庞大的内存区间 也是为什么开启 oracle 之后占用了很大内存的原因 SGA 分为不同的池 我们可以通过视图 v sgastat 查看 如下所示 SQL gt selectpool sum bytes bytesfromv sgastatgroup POOLBYTES

    2026年3月19日
    1
  • pycharm查看关键词的方法

    pycharm查看关键词的方法按住 Ctrl 在左键点击查看的关键词 便出来该关键词的源码 例如 print sep 默认值 是一个空格

    2026年3月27日
    1
  • bitnami mysql_最新 Bitnami redmine安装与配置

    bitnami mysql_最新 Bitnami redmine安装与配置最新 Bitnamiredmi 1 1 6 安装与配置首先登陆官网下载最新版本 1 接下来开始安装 2 选择安装语言 3 继续下一步 4 选择安装插件默认就可以 继续下一步 5 选择安装路径 6 设置登陆 Redmine 管理员的用户名和密码 7 如果出现如此说明你的密码不符合规则 请重新输入密码 8 设置端口默认是 809 设置加密端口号默认 443 10 设置邮件通知 Gmail 邮箱 11 设置如下 12

    2026年3月19日
    2
  • QWQ-32B模型(MindSpore)推理实践教程

    QWQ-32B模型(MindSpore)推理实践教程

    2026年3月13日
    1
  • css滚动条样式修改_js设置滚动条样式

    css滚动条样式修改_js设置滚动条样式CSS滚动条选择器::-webkit-scrollbar—整个滚动条::-webkit-scrollbar-button—滚动条上的按钮(上下箭头)::-webkit-scrollbar-thumb—滚动条上的滚动滑块::-webkit-scrollbar-track—滚动条轨道::-webkit-scrollbar-track-piece—滚动条没有滑块的轨道部分::-webkit-scrollbar-corner—当同时有垂直滚动条和水平滚动条时交汇的部分::-

    2022年8月30日
    4
  • 【虚拟DOM】浅析 虚拟DOM「建议收藏」

    【虚拟DOM】浅析 虚拟DOM「建议收藏」虚拟DOM作为目前流行的DOM操作思想,被广泛用在react中,这套设计的确在用户体验上带来了显著提升。下面我们来浅析一下这个东西,一步步看下去,希望你能有所收获。设计理念尽管MVVM将页面逻辑实现的核心转移到数据层面的修改上,但是最终数据层反映到页面上View的层的渲染和改变仍是通过对应的指令进行DOM操作来完成的。而且,通常一次ViewModel的变化可能会触发液面上多个指令操……

    2025年7月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号