http中get与post的区别

面试问题积累:HTTP中GET与POST的区别 由于经常看到一些琐碎的知识,但是感觉又很重要,于是专门列一个专题来记录这些知识。然后如果以后面试遇到的话,也很好啊 阅读详情

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

  1.根据 HTTP 规范,GET 用于信息获取,而且应该是安全的和幂等的。

  (1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

  * 注意:这里安全的含义仅仅是指是非修改信息。

  (2).幂等的意味着对同一 URL 的多个请求应该返回同样的结果。这里我再解释一下幂等这个概念:

  幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。
  幂等有一下几种定义:
  对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a)
= abs(abs(a))。
  对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在在实数集中幂等,即max(x,x) 
=  x。

看完上述解释后,应该可以理解 GET 幂等的含义了。

  但在实际应用中,以上 2 条规定并没有这么严格。引用别人文章的例子:比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。

  2.根据 HTTP 规范,POST 表示可能修改变服务器上的资源的请求。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过 POST 实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。

 

  上面大概说了一下 HTTP 规范中 GET 和 POST 的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:

  1.很多人贪方便,更新资源时用了 GET,因为用 POST 必须要用到 FORM(表单),这样会麻烦一点。

  2.对资源的增,删,改,查操作,其实都可以通过 GET/POST 完成,不需要用到 PUT 和 DELETE。

  3.另外一个是,早期的 Web MVC 框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的 Web MVC 框架基本上都只支持 GET和POST 两种 HTTP 方法,而不支持 PUT 和 DELETE 方法。

   * 简单解释一下MVC:MVC 本来是存在于 Desktop 程序中的,M 是指数据模型,V 是指用户界面,C 则是控制器。使用 MVC 的目的是将 M 和 V 的实现代码分离,从而使同一个程序可以使用不同的表现形式。

  以上3点典型地描述了老一套的风格(没有严格遵守 HTTP 规范),随着架构的发展,现在出现 REST(Representational State Transfer),一套支持 HTTP 规范的新风格,这里不多说了,可以参考《RESTful Web Services》。

 

  说完原理性的问题,我们再从表面现像上面看看 GET 和 POST 的区别:

  1.GET 请求的数据会附在 URL 之后(就是把数据放置在HTTP协议头中),以 ? 分割 URL 和传输数据,参数之间以 & 相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以 16 进制表示的 ASCII。

  POST 把提交的数据则放置在是 HTTP 包的包体中。

  2."GET方式提交的数据最多只能是 1024 字节,理论上 POST 没有限制,可传较大量的数据,IIS4 中最大为 80KB,IIS5 中为 100 KB" ??!

  以上这句是我从其他文章转过来的,其实这样说是错误的,不准确的:

  (1).首先是"GET方式提交的数据最多只能是 1024 字节",因为 GET 是通过 URL 提交数据,那么 GET 可提交的数据量就跟 URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE 对 URL 长度的限制是 2083 字节(2K+35)。对于其他浏览器,如 Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。

  注意这是限制是整个 URL 长度,而不仅仅是你的参数值数据长度。[见参考资料5]

  (2).理论上讲,POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制,说“POST数据量存在 80K/100K 的大小限制”是不准确的,POST 数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

  对于 ASP 程序,Request 对象处理每个表单域时存在 100K 的数据长度限制。但如果使用 Request.BinaryRead 则没有这个限制。

  由这个延伸出去,对于 IIS 6.0,微软出于安全考虑,加大了限制。我们还需要注意:

     1).IIS 6.0 默认 ASP POST 数据量最大为 200KB,每个表单域限制是 100KB。
     2).IIS 6.0 默认上传文件的最大大小是 4MB。
     3).IIS 6.0 默认最大请求头是 16KB。
  IIS 6.0之前没有这些限制。[见参考资料5]

  所以上面的 80K,100K 可能只是默认值而已(注:关于 IIS4 和 IIS5 的参数,我还没有确认),但肯定是可以自己设置的。由于每个版本的 IIS 对这些参数的默认值都不一样,具体请参考相关的 IIS 配置文档。

  3.在 ASP中,服务端获取 GET 请求参数用 Request.QueryString,获取 POST 请求参数用 Request.Form。在 JSP 中,用request.getParameter(\"XXXX\") 来获取,虽然 jsp 中也有 request.getQueryString() 方法,但使用起来比较麻烦,比如:传一个 test.jsp?name=hyddd&password=hyddd,用request.getQueryString() 得到的是:name=hyddd&password=hyddd。在 PHP 中,可以用 $_GET 和 $_POST 分别获取 GET 和 POST 中的数据,而 $_REQUEST 则可以获取 GET 和 POST 两种请求中的数据。值得注意的是,JSP 中使用 request 和 PHP 中使用 $_REQUEST 都会有隐患,这个下次再写个文章总结。

  4.POST 的安全性要比 GET 的安全性高。注意:这里所说的安全性和上面 GET 提到的 “安全” 不是同个概念。上面 “安全” 的含义仅仅是不作数据修改,而这里安全的含义是真正的 Security 的含义,比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,因为 (1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用 GET 提交数据还可能会造成 Cross-site request forgery 攻击。

  总结一下,Get 是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求,在FORM(表单)中,Method 默认为 "GET",实质上,GET 和 POST 只是发送机制不同,并不是一个取一个发!

  纯属 hyddd 个人总结,如有错漏请指出。:>

 

参考资料:

[1].http://hi.baidu.com/liuzd003/blog/item/7bfecbfa6ea94ed8b58f318c.html

[2].http://www.blogjava.net/onlykeke/archive/2006/08/23/65285.aspx

[3].http://baike.baidu.com/view/2067025.htm

[4].http://www.chxwei.com/article.asp?id=373

[5].http://blog.youkuaiyun.com/somat/archive/2004/10/29/158707.aspx

转自这个地方,谢谢[hyddd(http://www.cnblogs.com/hyddd/)]

桌面云虚拟机Ubuntu离线安装open-vm-tools 公司办公在桌面云中进行开发,桌面云是无法访问外网的,然后又有安装虚拟机的需求,使用VMware自带的VMware-tools安装功能失败,报错也需要联网才能解决,如果不安装VMware-tools,则虚拟机无法使用共享文件夹功能以及与本机共享剪贴板功能,非常难受,故自己研究解决如何离线安装open-vm-tools(open-vm-tools 是 VMware Tools 的开源实施)打开Ubuntu,可以在文件中看到生成的ISO文件,点开,将四个软件包复制粘贴至桌面。 阅读详情

相关推荐

OpenMV模块视觉测距(避障)+颜色识别+TFT-LCD显示(实现原理与代码分析)

上图所示代码实际运行的帧率比较低,主要原因有以下两个:1.硬件问题,博主使用的版本比较低,可以尝试使用高版本OpenMV2.图像滤波问题。之前加入图像滤波是想提高色块识别的准确性,但是相应的运算速度也会下降。

ediykk的博客 1万+

HTTP中GET,POST和PUT的区别

一、HTTP中定义了以下几种请求方法: 1、GET;2、POST;3、PUT;4、DELETE; 5、HEAD;6、TRACE;7、OPTIONS; 二、各个方法介绍: 1、GET方法:对这个资源的查操作。 2、DELETE方法:对这个资源的删操作。但要注意:客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客 户端的情况下撤销请求。 3、HEAD方法:与GET方法...

田园园野的博客 16万+

非线性动力学_用MatCont分析非线性动力学方程组(一)

写在前面:笔者打算写两到三篇系列文章介绍MatCont,此为第一篇《用MatCont分析非线性动力学方程组(一)》。MatCont是一个基于Matlab而开发的免费工具包,专门用来做非线性动力学模型分叉、向量场、周期性等分析,符号(连续性)运算和数值(离散性)运算均适用。该工具的开发及研究项目由比利时Ghent大学的Willy Govaerts教授、荷兰Utrecht大学的Yuri Kuznets...

weixin_39700215的博客 2766

HTTP中GET和POST的区别

从学习编程开始,关于get请求和post请求的问题就一直困扰着我。今天就简单说说两者的区别。 先来看看HTTP是什么? HTTP: HTTP协议:(HyperText Transfer Protocol超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的www文件都必须遵守的标准。是基于TCP/IP的关于数据在万维网中如何让通讯的协议。 HTTP总共有8中请求方法,我们最常见也是最...

cuiwkong的博客 1万+

基于STM32与HRTIM的四开关Buck-Boost双向DC-DC电源设计实战(附源码、仿真与设计解析)

本文详细介绍了基于STM32F334的HRTIM高分辨率定时器实现四开关Buck-Boost双向DC-DC电源的设计实战。通过精准的PWM控制、双环PID算法和智能模式切换逻辑,解决了电压震荡与效率优化等关键问题,并提供了完整的源码、PSIM仿真及参数计算,为高性能电源设计提供了实用参考。

7z8x2c4v6b9的博客 299

ArcGIS小白必看:5分钟搞定面要素转点要素+自动计算经纬度坐标(附常见报错解决方案)

本文为ArcGIS新手详细解析了面要素转点要素并自动计算经纬度坐标的完整流程。核心在于正确理解和使用坐标系,并掌握ArcToolbox中的“要素转点”等工具。文章深入剖析了常见报错(如坐标系未定义、字段计算失败)的根源,提供了从基础操作到Python脚本自动化的实战解决方案,确保数据转换的准确与高效。

weixin_29284885的博客 575

浅谈HTTP中get与post的区别

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

wjhdd的博客 3万+

高项备考论文:规划绩效域

高项备考论文:规划绩效域

liuxu324的博客 1127

浅谈HTTP中Get与Post的区别

浅谈HTTP中Get与Post的区别

weixin_44498832的博客 904

ConvNeXt 系列改进:二次创新 ConvNeXt:结合 RepVGG 结构重参数化,训练多分支、推理单路

2026年的视觉模型赛道呈现出一种有趣的“返璞归真”趋势——在Transformer狂飙数年之后,卷积网络正以全新的姿态回归。这其中,ConvNeXt无疑是纯卷积阵营中最耀眼的明星。从2022年Meta AI首次提出至今,ConvNeXt系列已经走过了近四年的演进之路,衍生出ConvNeXt V2、E-ConvNeXt等多个增强版本。ConvNeXt的7×7深度卷积带来了不错的感受野,却也埋下了推理效率的隐患。

ZXSXJ的博客 234

CKA-题库-简洁参考答案-反复练习20遍-必过!!!

新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 题库量小:随机的题目重复率极高 考试时可打开两个浏览器Tab,一个是考试窗口,一个用来查阅官方文档](https://kubernetes.io/docs/) 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole tha.

随笔记录-分享&记忆 7316

HTTP POST GET 本质区别详解

一 原理区别    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETEURL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GE

ClsData的专栏 4436

【AI Agent 记忆共享实战】【下篇】多 Agent 会话 Session 统一共享实战:全链路工程落地、采集归一、MCP 服务、私有化部署、源码级实战

中篇我们已经锁定最终最优架构方案: 非侵入式、外部旁路采集、只读归一、中心化存储、MCP 按需检索注入。摒弃「改 Agent 源码」「软链接互通」「原生 Session 互导」等不现实方案。本篇直接落地可上线、可简历复用、可个人私有化部署多 Agent 异构 Session专属采集器(Claude/CODex/DSH/OpenCode/Kimi/WorkBuddy/ 豆包)统一消息归一化解析层(解决所有 Schema 异构)增量同步、去重、时间戳对齐核心逻辑。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 480

HTTP请求方法及GET和POST区别

HTTP请求方法有几种 1.GET:向特定资源发送请求,查询数据 2.POST:向指定的资源,提交数据进行处理请求,有可能创建或修改已有数据 3.HEAD:和Get请求相一致,只不过不会返回响应体,这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。(用于获取报头) 4.OPTIONS:返回服务器对特定资源所支持的http的请求,可以用来向Web服务器发送请求来测试...

qq_43723010的博客 259

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HTTP Request的Get、Post的区别

HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST(Ajax开发,关心的只有GET请求和POST请求)。 GET与POST方法有以下区别: (1)   在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。 (2)   GET方式提交的数据最多只能有1024 Byte,而POST则

慕小怡的专栏 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

HTTP-GET、POST、PUT区别

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。所以PUT用来改资源。 POST请求:后一个请求不会把第一个请求覆盖掉。所以POST用来增资源。 GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200 OK(返回数据);而对于POST方式的请求,

了解➔熟悉➔掌握➔精通 1916

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

HTTP中GET与POST的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻轻松松的给出了一个...

Gscsd的博客 884

HTTP请求GET与POST 方式的区别

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

yx20130919的博客 695

http的简介以及post和get的区别

http的简介以及post和get的区别http的简介HTTP 工作原理HTTP 消息结构客户端请求消息服务器响应消息get和post相同点或者不同点为什么get比post快 刚开始了解这些,记录一下随笔 http的简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

qq_38481074的博客 592

java get与post区别_HTTP中Get与Post的区别

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

weixin_39586915的博客 82

java get与post区别_http的get和post的区别

GET和POST是HTTP请求的两种基本方法,说说它们的区别?你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。因此当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你很可能觉得so easy,轻轻松松的给出了一系列“标准答案”:(本标准答案参考万scho0了) “很遗憾,这不是我们要的回答!” 请告诉我真相。。。如果我告诉你...

weixin_42159267的博客 231

iOS中Http协议get和post主要区别

从表面的意思看get 和 post的区别get就是获取数据,post就是发送数据。这个是误区。其实两者都可以的,在IOS向服务器发送请求里面可以带参数。 那么这些误区是怎么出现的呢?先看看一下对http的解释 一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交  Http定义了与服务器交互的不同方

Reborn_Young的专栏 1185

浅谈在HTTP中GET与POST的区别

GET 请求方式符合幂等性和安全性,GET请求方式是做查询操作,因此不会改变数据库中原有的数据,认为符合安全性,事实上 GET 请求可能会出现多次请求的结果不一致(例如在两次请求中间对数据库中的数据做了更改),从这来说不符合幂等性的定义,但是因为 GET 请求只是查询数据库,不会对数据库做任何更改,因此也可以认为是幂等的。其次,POST 请求方式每次获得的结果都可能不一样,因为 POST 请求是作用在上一级的 URL 上的,每一次请求都会添加一份新的资源,或者修改资源信息。

Happy2030的博客 713

99%的人都理解错了HTTP中GET与POST的区别

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request...

YYxiaobao0726的博客 232

HTTP中GET、POST以及PUT的区别

HTTP中GET、POST以及PUT的区别 POST、DELETE、GET、PUT 类似数据库中的CRUD (增删改查) 使用规则如下: 请求方式 URL 操作 POST /URL 增加 DELETE /URL/xxx 删除 PUT /URL/xxx 修改 GET /URL/xxx 查询 各方法的介绍 GET方法:对资源的查操作 **DELETE方法:**对资源的删操作。但要注意:客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客 户端的

Misa落雪的博客 1482
上一篇: 内存溢出、内存泄露、内存越界、缓冲区溢出、栈溢出
下一篇: STL 容器一些底层机制
Solid7
博客等级 码龄11年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值