`

谁决定了XMLHttpRequest的提交方式?get or post

    博客分类:
  • ajax
阅读更多
本来也一直以为XMLHttpRequest的提交方式是由open时,指定一个参数来决定的。
直到看到此贴:http://www.iteye.com/topic/221344
发现其实还要XMLHttpRequest看有没有send数据。

原因的话,还得说到http的报文格式
引用

这个问题其实是http请求的报文格式的问题
1、如果用GET,是没有报文体的,只有头部,数据应该在GET url?xxxxxxx
报头的末尾是两个CRLF,即GET的情况下,出来url本身是不能直接send数据的。
("url?参数"的大小限制是2048B),即GET的使用范围是小数据量的文本数据。
2、如果是POST,则可以把要POST的数据加到两个CRLF后。
此时常见有两种格式:
(1)、application/x-www-form-urlencoded
这个是把数据的name和value按照a=1&b=2的格式拼接成一个串,然后放在报文体中的。一般只能传递字符型数据。
(2)、multipart/form-data 使用一个特殊的【42位(我忘了,大概是)长的以10几个-开头和一组随机16进制数字+表示浏览器相关的数字表示】的分隔符,来分割报文体中的各个数据段,一般是name,然后两个CRLF,接着是二进制数据。服务器端上传组件就是直接按照这种方式来分割出数据和文件的。
考虑到这些情况就可以方便的模拟表单了。


由于XMLHttpRequest.send的时候,如果有数据就会加到报文体当中,而get方式是没有报文体的,因此就会变成post。

再看看关于get和post的区别的详细说明:
引用

        get 请求表示客户端请求一个uri,服务器返回客户端请求的uri,post请求表示客户端请求的时候还要提交数据,比喻提交form表单,要提交的数据会放到请求报文的body部分。服务器收到后这样的请求后通常需要来处理这些数据。
        应聘j2ee开发时问这个问题说明提问着的重点是服务器对这两种请求的处理有什么不同,而 不是这两种请求的报文有什么不同。当然作为一个 jsp servlet的开发者一般你是不会感觉到着两种请求有什么不同的,因为web服务器已经对这些请求进行处理了,web服务器调用相应的 jsp/servlet来响应客户端请求的时候,对于post的请求,web服务器已经把客户端提交的数据取出来,添到request对象中去了。不过,对于get、post的请求servlet 的 doGet、 doPost方法会被响应调用。也就是说如果客户端送来的是一个get的请求,那么你写到servlet中的dopost()方法中的代码是不会执行的,反之如果是post的请求,写在doget()中代码是不会被调用的(对于所有方式的请求,写在doservice的代码是会被调用的,因为在HttpServlet类中doGet doPost的请求都是由doService来分发的,具体的看关于servlet的生命周期介绍)。

       HTTP请求:GET与POST方法的区别
       HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和 幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);
在FORM提交的时候,如果不指定 Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“ “号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有2048字节,而POST则没有此限制。

     get 和post方法的不同 在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的。Form提供了两种数据传输的方式——get 和post。虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

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

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

4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。

5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

6、Get是Form的默认方法。

GET 和 POST 的数据格式都是一样的:
GET 支持的最大字节限制是 2048 Bytes
POST 支持的最大字节限制是 2GB
分享到:
评论

相关推荐

    阿里巴巴六个盒子实践.pptx

    阿里巴巴六个盒子实践.pptx

    Vue JS 和 Firebase 数据库实现的在线购物车系统项目源码(可做毕设项目参考)

    项目简介: VueJS 和 Firebase 数据库中的在线购物车系统是一个基于Web的应用程序,旨在提供一个简单而高效的在线购物体验。该项目使用VueJS进行前端开发,并使用Firebase作为数据库来存储和管理购物车数据。通过这个项目,用户可以添加商品到购物车、查看购物车内容、进行结账等操作。 项目目标: 提供一个功能完备的在线购物车系统。 提供用户友好的操作界面。 提高用户的编程技能,特别是VueJS和Firebase的应用能力。 项目功能 添加商品到购物车: 用户可以浏览商品并将其添加到购物车中。 查看购物车内容: 用户可以查看购物车中的所有商品,包括商品名称、数量、价格等信息。 更新购物车: 用户可以更新购物车中的商品数量或删除商品。 结账: 用户可以进行结账操作,完成购买流程。 项目优势 高效的购物体验: 提供便捷的购物车功能,提高用户的购物体验。 用户友好: 界面简洁,操作简单,用户可以轻松使用该应用程序。 提高编程技能: 通过实践项目,提高对VueJS和Firebase的应用能力。 结论 VueJS 和 Firebase 数据库中的在线购物车系统是一个简单且实用的小项目

    一个基于PHP的开源轻简论坛

    一个基于PHP的开源轻简论坛 服务器环境要求: 支持子目录安装论坛 PHP 5.3+ 包括5.3 , 5.3以上环境 Apache || Nginx || IIS 需要开启伪静态,否则无法安装~! 数据库支持 : MYSQL , MSSQL ,Oracle ,SQLite ,PostgreSQL ,Sybase 等.. PHP支持扩展 需要开启 PDO ##### PDO PDO PDO 否则数据库玩不了 以文件缓存形式运行论坛, 支持自由的 **模板 **与 插件 开发 所以非常适合二次开发,论坛基于框架开发, 很多操作都是非常简单, 论坛也封装了 Model提供使用 所以二次开发并不需要修改论坛源代码, 只需要增加自己的插件 从中修改论坛 用户也可以通过模板机制自己内容来源于网络分享。仅供学习使用。请勿商用。如有侵权,请联系我。我将立即删除开发一套属于自己的模板, 模板拥有框架标签解析引擎, 是非常容易开发的 论坛可承载亿级数据库 运行 0.00x速度, 当然是用了xcache加速编译 , 论坛也在开发测试中. 论坛暂时没开发 数据缓存

    pyzmq-15.2.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    每日随机素材!!!!!!!!!!!

    每日随机素材

    Swift语言相关项目的示例

    Swift语言相关项目的示例

    安卓提醒应用及其源代码+使用说明(毕设参考)

    安卓提醒应用及其源代码 概述 安卓提醒应用可以在你有会议或约会前发出提醒,类似于你通常看到的提醒通知。 该软件的作用仅仅是在你需要执行任务时提醒你。它甚至可以为手机通知设置日程。 任务可以按日、周或月来执行。 如果你有忘事的倾向,或者需要特定任务的提醒,不用担心;这款软件将为你处理一切。你可以创建一个基本的任务提醒应用来跟踪你所有的责任。它还会向你发送有关任务位置的通知。 安卓提醒应用的特点 注册新任务,并设置时间和日期来安排工作。 以列表形式显示所有任务。 通过通知来保持任务提醒。 安卓提醒应用的流程: 你应该设计一个带有提醒列表的主屏幕,以及一个录入用户提醒信息的屏幕。下面你可以找到应用流程的清晰解释: 使用RecyclerView或ListView显示提醒。 在主屏幕上嵌入一个浮动操作按钮。使用它,用户可以添加新任务。 将提醒添加到SQLite数据库。 使用Alarm Manager和Notification Manager设置闹钟。 使用Notification Manager和pending Intent显示通知。 更新Manifest文

    2022年全国大学生数学建模竞赛B题无人机定位(word论文+源代码)

    2022年全国大学生数学建模竞赛B题无人机定位;国家一等奖;国家二等奖;可编辑word论文文档;包含数据处理过程;全国大学生数学建模竞赛;数学建模;matlab源代码;图片数据;可编辑文档;代码可直接运行;代码与论文相吻合;本资源含有支撑材料

    Redis可视化管理工具

    RedisInsight 是一个用于管理和监控 Redis 数据库的图形用户界面(GUI)工具。它是由 Redis Labs 开发的,旨在简化开发人员和管理员对 Redis 实例的管理任务。以下是 RedisInsight 的一些关键特性: 可视化界面:RedisInsight 提供了一个直观的用户界面,使用户能够轻松地查看和管理 Redis 数据。它以图形方式显示 key-value 对、数据结构等信息,使用户更容易理解和操作数据。 监控和指标:该工具允许用户监控 Redis 服务器的关键性能指标,如内存使用情况、每秒执行的命令数、延迟等。通过监控这些指标,用户可以及时发现潜在的性能问题并进行优化。 实时命令和日志:RedisInsight 提供实时的命令执行信息和日志查看功能。这对于故障排除和调试非常有用,用户可以实时跟踪 Redis 实例的操作。 数据探索:用户可以使用 RedisInsight 探索 Redis 数据,通过 GUI 界面方便地查看数据结构、进行搜索、排序和筛选等操作。 键空间分析:工具提供了对 Redis 数据集中键分布的分析功能,帮助用户了解数据分布

    Java语言基础入门教程 Java实训教程 6.继承与多态 共41页.pptx

    Java语言基础入门教程 Java实训教程 6.继承与多态 共41页.pptx

    3层单家独院式别墅占地面积130平方米三层别墅图纸建筑.dwg

    3层单家独院式别墅占地面积130平方米三层别墅图纸建筑.dwg

    前端开发基础入门教程 JavaScript语言编程基础教程 第5章 JS实战 共16页.pptx

    【学习目标】: 图片幻灯 复杂的表单验证 瀑布流

    六个盒子模型组织诊断分享.pptx

    六个盒子模型组织诊断分享.pptx

    IMG_8159.PNG

    IMG_8159.PNG

    龙门吊纠偏装置安装情况调查表.docx

    龙门吊纠偏装置安装情况调查表.docx

    《职场_法则》职场必备生存之路,私企20年_工作经验总结.txt

    《职场_法则》职场必备生存之路,私企20年_工作经验总结

    settings.data

    settings.data

    ASP某小型数字图书馆的设计与实现(源代码+论文)【ASP】.zip

    ASP某小型数字图书馆的设计与实现(源代码+论文)【ASP】

    员工培训记录表.doc

    员工培训记录表.doc

    pyzmq-15.1.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics