`

谁决定了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
分享到:
评论

相关推荐

    ajax提交表单

    这种处理方式可以提升用户体验,尤其是在表单提交等场景下效果尤为明显。 #### 二、基本原理 AJAX的核心是`XMLHttpRequest`对象,它提供了浏览器与服务器之间进行异步通信的能力。在实际应用中,开发者通常会借助...

    AJAX提交与FORM提交的区别说明

    AJAX(Asynchronous JavaScript and XML)提交与传统的FORM表单提交是两种常见的数据交互方式,在Web开发中扮演着重要角色。它们各自有其优势和局限性,了解...开发者应根据具体需求和用户场景选择合适的数据提交方式。

    better-xhr:更好的 XMLHttpRequest 抽象

    更好的 XMLHttpRequest 抽象 该项目的目标是为使用 AJAX 创建简单易用、轻量级和基于Promise的实现。 应用程序接口 XHR . get ( "/test/url" ) . then ( function ( response ) { // do something with response ...

    jquery-1.1.3 效率提高800%

    type("GET") 数据类型: String 请求的类型 ("POST" 或 "GET"), 默认是 "GET"。注意:其他的HTTP请求方法,如PUT和DELETE,在这里也可以使用,当时它们并不被所有的浏览器支持。 url(The current page) ...

    AJAXLib ajax框架

    AJAXLib is a class written in JavaScript that provides an easy way to ... With AJAXLib you can send data via POST or GET to server (PHP/PERL/JSP,etc) and get the result directly in your JavaScript

    hack-or-snooze-ajax-api

    AJAX可以轻松地与符合REST原则的API进行交互,如GET请求获取资源,POST请求创建资源,PUT请求更新资源,DELETE请求删除资源。 8. 安全与优化: 使用AJAX时,应注意跨域安全问题,可通过CORS(Cross-Origin ...

    day10图书编辑删除 字段参数choise(重要)多对多三种创建方式 ajax语法结构.pdf

    - 请求方式可以包括GET、POST、PUT、DELETE等。 - **如何通过Ajax传递文件及JSON格式数据**: - 可以使用`FormData`对象结合`XMLHttpRequest`或`fetch` API在Ajax请求中发送文件。 - JSON数据通常通过`fetch` ...

    JavaScript跨域请求库XDomain.zip

    With jQuery $.ajax (and subsequently $.get, $.post) With Angular $http service Cross domain XHR just magically works No need to modify the server code No need to use IE's silly XDomainRequest...

    应用ajax的页面里添加如下javascript方法

    如果是POST请求,还需要提供数据,如`xhr.send('key=value')`。 5. 接收和处理响应: 在`onreadystatechange`的回调函数中,我们可以访问到服务器返回的数据。对于JSON格式,通常使用`JSON.parse(xhr.responseText...

    Ajax Hacks

    通过这个对象,我们可以发送GET或POST请求,接收服务器响应,并在不刷新页面的情况下更新DOM。 3. **数据格式**: 虽然名称中有XML,但实际数据格式并不局限于XML,还包括JSON、Plain Text、HTML等。JSON因其轻量级...

    jquery电子文档chm

    type (String) : (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 url (String) : (默认: 当前页地址) 发送请求的地址。...

    asp 无刷新上传代码实例

    在ASP环境中,可以使用JavaScript库如jQuery或者原生XMLHttpRequest对象来创建AJAX请求。当用户选择文件并点击上传按钮时,JavaScript会在后台处理文件上传,而不会重新加载整个页面。 下面是一个简单的ASP无刷新...

    jQuery的ajax中使用FormData实现页面无刷新上传功能

    接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData接口。...

    do_or_do_not

    - **发送请求**:使用JavaScript的fetch API或jQuery的$.ajax方法向API发送GET或POST请求。 - **解析响应**:接收API返回的数据,通常是JSON格式,然后将其转化为JavaScript对象以便处理。 - **错误处理**:确保处理...

    仿GG的输入框下拉提示功能,这是Ajax+jsp版的

    当用户在输入框输入时,触发一个事件(如onkeyup),调用Ajax函数,向服务器发送GET或POST请求,携带用户当前输入的关键字。 2. **JSP处理**:接收到请求后,JSP解析请求参数,执行相应的查询操作,如SQL查询,根据...

    struts2 上传进度条,后台部分

    在`struts.xml`配置文件中,我们需要添加`<constant>`标签,设置`struts.multipart.parser`为`jakarta`,这是Struts2推荐的用于处理大文件上传的方式: ```xml ``` 2. **创建Action类**: 创建一个继承自`...

    process.rar_界面编程_JavaScript_

    const xhr = new XMLHttpRequest(); xhr.upload.addEventListener('progress', (event) => { if (event.lengthComputable) { const percentComplete = (event.loaded / event.total) * 100; updateProgress...

    php程序员菜鸟成长手记——php入门教程

    - **$_POST**:用于获取表单提交的POST参数。 - **$_FILES**:用于处理文件上传。 - **$_COOKIE**:用于获取客户端Cookie中的数据。 - **$_SESSION**:用于获取会话中的数据。 ##### 7. 数据类型 PHP支持多种数据...

    js实现跨域的几种方法汇总(图片ping、JSONP和CORS)

    JSONP适用于GET请求,能获取并处理响应,但不支持POST和安全性较低;CORS则提供了更全面的跨域支持,包括POST、PUT等各种HTTP方法,且安全性更高,是目前推荐的跨域解决方案。选择哪种方法取决于实际需求和项目环境...

Global site tag (gtag.js) - Google Analytics