zoukankan      html  css  js  c++  java
  • GET与POST的区别

      前几天有个同学问我GET与POST有什么区别,在此之前我只知道GET与POST的区别如下:

    1.GET请求的数据会附在URL之后,POST则把提交的数据放置在HTTP包的包体中;

    2.GET方式提交的数据最多只能是1024个字节,理论上POST没有限制,可传较大量的数据;

    3.POST的安全性要比GET高。

      今天我百度搜索了一下,了解到GET和POST的区别有一下六点:

    1.GET是用来从服务器上获得数据,而POST是用来向服务器传递数据;

    2.GET将表单中的数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;POST是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向的URL;

    3.GET是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到;另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部信息将会一同显示在用户面前;POST的所有操作对用户来说都是不可见的;

    4.GET传输的数据量小,这主要是受URL长度的限制;而POST可以传输大量的数据,所以上传文件时只能使用POST;

    5.GET限制form表单的数据集的值必须为ASCII字符;而POST支持整个ISO10646字符集,默认是ISO-8859-1编码;

    6.GET是form的默认方法。

      然而这只是网上最普遍的答案,接下来的观点否认了以上提到的GET与POST的区别,具体分析如下:

    1.GET和POST与数据如何传递没有关系

      GET和POST是由HTTP协议定义的。在HTTP协议中,Method和DaGETa(URL,Body,Header)是正交的两个概念,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。

      HTTP没有要求,如果Method是POST就要将数据放在Body中;也没有要求,如果Method是GET,数据(参数)就一定要放在URL中,而不放在 Body中。GET方式将数据放在URL之后,POST方式将数据放在Body中只是HTML标准对于HTTP协议的用法的约定。

    2.HTTP协议对GET和POST都没有对长度的限制

      HTTP协议明确地指出了,HTTP头和Body都没有长度的要求。而对于URL长度上的限制,有两个方面的原因造成:

      1,浏览器。据说早期的浏览器会对URL长度做限制。

      2,服务器。URL长了,对服务器处理也是一种负担。原本一个回话就没有多少数据,现在如果有人恶意的构造几个几M大小的URL,并不停地访问服务器,服务器的最大并发数显然会下降。由此多数服务器出于安全,稳定方面考虑,会给URL的长度加限制,但这个限制是针对所有HTTP请求的,与GET和POST没有关系。

      我个人认为以上的观点对于GET和POST的区别分析都有一定的道理,只是他们分析的角度不同,前者是从客户端与服务器的角度来分析GET与POST的区别;而后者是从HTTP协议本身来分析GET与POST的区别。

  • 相关阅读:
    C++ 多线程
    C++ 信号处理
    首页流量监控代码
    macro-name replacement-text 宏 调试开关可以使用一个宏来实现 do { } while(0)
    color depth 色彩深度 像素深度
    数据更新 数据同步 起始点 幂等同步历史数据
    获取当前调用函数名 方法名
    版本号风格为 Major.Minor.Patch
    query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max
    Cutoff frequency
  • 原文地址:https://www.cnblogs.com/lykblog/p/4693985.html
Copyright © 2011-2022 走看看