`
holdbelief
  • 浏览: 707536 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)

阅读更多

  在服务器端判断request来自Ajax请求(异步)还是传统请求(同步):

  两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数

  1、传统同步请求参数

    accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    accept-charset  gb2312,utf-8;q=0.7,*;q=0.7
    accept-encoding  gzip,deflate
    accept-language  zh-cn,zh;q=0.5
    cache-control  max-age=0
    connection  keep-alive
    cookie  JSESSIONID=1A3BED3F593EA9747C9FDA16D309AF6B
    host  192.168.101.72:8080
    keep-alive  300
    referer  http://192.168.101.72:8080/htfsweb/spring_security_login
    user-agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)

 

  2、Ajax 异步请求方式

    accept  */*
    accept-language  zh-cn
    referer  http://192.168.101.72:8080/scm/?token=3b194bff23bf6acecea5661ac8e14c51
    x-requested-with  XMLHttpRequest
    content-type  application/x-www-form-urlencoded,text/javascript
    accept-encoding  gzip, deflate
    user-agent  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; QQDownload 598; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
    host  192.168.101.72:8080
    content-length  233
    connection  Keep-Alive
    cache-control  no-cache
    cookie  CSS=undefined; JSESSIONID=1B9AC25036290F7FB6823CCE1A24E541

 

  可以看到 Ajax 请求多了个 x-requested-with ,可以利用它,request.getHeader("x-requested-with"); 为 null,则为传统同步请求,为 XMLHttpRequest,则为 Ajax 异步请求。

分享到:
评论
11 楼 holdbelief 2010-05-13  
我也这么想过 貌似没有弄出来过
10 楼 gtman 2010-05-06  
有个想法,能否把AJAX的请求 转成HTTP普通请求,reponse直接就重定向到一个页面中咧?
9 楼 javaonejcy 2010-03-18  
jquery也有这个头
8 楼 zhuyx808 2009-11-30  
holdbelief 写道
我是用在做Spring Security 的时候,自定义 403 错误处理的时候需要判断是同步还是异步。
同步:则处理为转发到一个自定义的越权提示jsp页。
异步:response.getWriter.println("越权访问");这样前台Ext的弹出窗口中就显示"越权访问"的提示弹出窗口,而不会转发,因为我不想转发。

关于 edokeh 提到的 x-requested-with这个头是某些JS类库给加上去的,直接写AJAX是没有这个头的, 这个我确实要在研究一下了,可能是我太粗糙了,我只看到Ext的Ajax请求头里面有这个参数,至于不使用这些框架,直接使用 XMLRequest 提交的话,Header 里面是否还有这个参数我还没有做过例子研究,不过至少Ext里面是有的,呵呵,幸运的是我现在的所有项目都在使用Ext,短时间内可以靠它判断了……



不使用是没有这个头的,别误导其他人
7 楼 holdbelief 2009-11-30  
我是用在做Spring Security 的时候,自定义 403 错误处理的时候需要判断是同步还是异步。
同步:则处理为转发到一个自定义的越权提示jsp页。
异步:response.getWriter.println("越权访问");这样前台Ext的弹出窗口中就显示"越权访问"的提示弹出窗口,而不会转发,因为我不想转发。

关于 edokeh 提到的 x-requested-with这个头是某些JS类库给加上去的,直接写AJAX是没有这个头的, 这个我确实要在研究一下了,可能是我太粗糙了,我只看到Ext的Ajax请求头里面有这个参数,至于不使用这些框架,直接使用 XMLRequest 提交的话,Header 里面是否还有这个参数我还没有做过例子研究,不过至少Ext里面是有的,呵呵,幸运的是我现在的所有项目都在使用Ext,短时间内可以靠它判断了……
6 楼 smildlzj 2009-11-29  
好像实际是不能区分同步还是异步请求喔....

同步 异步只是对客户端来说..对服务端.都是一个请求..

除了自定义header等这样hack过的情况
5 楼 dwwind 2009-11-29  
myy 写道
不明白在干什么,服务端判这个几乎毫无用处。


有用处的!如ajax 分页。
4 楼 shadowlin 2009-11-29  
用firebug就可以吧,抓这些header的话。。
3 楼 madbluesky 2009-11-28  
lz用什么抓的包啊
2 楼 myy 2009-11-27  
不明白在干什么,服务端判这个几乎毫无用处。
1 楼 edokeh 2009-11-27  
x-requested-with这个头是某些JS类库给加上去的,直接写AJAX是没有这个头的

相关推荐

    服务器端判断Ajax请求

    因此,区分一个请求是通过Ajax发起的还是传统的同步请求对于服务器端处理逻辑来说至关重要。 #### 核心知识点: 1. **HTTP请求头的差异**:Ajax请求和传统的HTTP请求在头部信息上存在显著区别。这为服务器端提供了...

    Ext.Ajax.request2.x实现同步请求

    在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...

    ajax异步请求小结

    **Ajax异步请求小结** Ajax(Asynchronous JavaScript and XML)是一种用于创建快速、动态网页的技术,它允许在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。这种技术极大地提升了用户体验,...

    Java通过jQuery实现ajax异步请求

    综上所述,"Java通过jQuery实现ajax异步请求"的示例工程涵盖了客户端与服务器端的交互流程,包括使用jQuery发起AJAX请求、Java后端处理请求并返回数据,以及数据格式的转换和错误处理。了解并掌握这些知识点,对于...

    extjs3.0 ajax 同步请求

    同步 AJAX 请求会在发起请求后阻塞主线程,直到服务器响应返回。这种方式虽然简单直观,但在实际使用中可能会导致用户体验不佳(如页面假死),因此并不推荐在生产环境中频繁使用。 #### 三、ExtJS 3.0 同步 AJAX ...

    ExtJs Ajax 同步问题

    6. **服务器端问题**:有时问题可能出在服务器端,如响应时间过长,或者返回的数据格式不正确,这也会导致看起来像是同步问题。 7. **性能优化**:如果发现大量同步请求导致页面卡顿,考虑优化请求,例如合并请求、...

    异步 提交表单请求

    异步请求的核心在于,浏览器不会阻塞其他任务,而是创建一个新的请求并在后台处理。当服务器返回响应时,JavaScript会接收到数据并进行相应的操作,而不是像同步请求那样更新整个页面。 2. **Ajax基本结构** Ajax...

    Jquery 封装下的ajax异步加载

    在本项目中,Servlet接收来自jQuery AJAX请求的数据,并返回JSON响应。一个简单的Servlet示例: ```java import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter...

    Ext.Ajax.request 小问题收集

    在EXTJS框架中,`Ext.Ajax.request`是进行异步AJAX通信的核心方法,它提供了与服务器端交互的能力,支持GET、POST等多种HTTP请求方式。这篇文章将深入探讨`Ext.Ajax.request`的使用,以及在实际应用中可能遇到的小...

    extjs对ajax的支持文档

    在ExtJS中,Ajax支持是核心功能之一,它使得在浏览器端与服务器进行异步通信成为可能,无需刷新整个页面。以下是对Ajax支持的详细说明: 1. **Ajax基础**: - Ext.Ajax是ExtJS中的核心模块,用于处理所有与Ajax...

    unigui_ajax网页交互

    Unigui提供了内置的Ajax支持,允许开发者创建Ajax请求并在后台处理数据,然后将结果返回到客户端。这主要通过Unigui的TUniAjaxComponent组件实现,该组件允许你定义一个HTTP方法(如GET或POST),指定URL,并处理...

    ajax调用,asp版本的 ,超级好用

    3. **服务器端处理**:在ASP中,通常使用VBScript或JScript编写服务器端代码。当Ajax请求到达服务器时,这些脚本会被执行,并返回所需的数据。 4. **请求类型(HTTP方法)**:常见的有GET和POST。GET用于获取信息,...

    ajax使用常用套路

    根据提供的文件信息,我们可以归纳出两个主要的知识点...通过这些示例代码,我们不仅了解了如何在客户端进行表单验证,还学会了如何构建 AJAX 请求并处理服务器端的响应。这对于前端开发者来说是非常实用且重要的技能。

    Extjs ajax同步请求时post方式参数发送方式

    因此,在实际开发中,应当谨慎使用同步请求,尽可能使用异步请求以提高页面的响应性和用户体验。 在实际开发过程中,如果遇到类似问题,开发者应该首先检查发送的参数格式是否正确,并确保请求头设置正确。如果问题...

    Ajax课件学习(免费)

    该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。 XMLHttpRequest是XMLHTTP组件的对象,通过这...

    ajax常用框架api文档

    `Ajax.Request`用于发起异步请求,接收URL和一个选项对象作为参数,选项中可定义onSuccess、onFailure等事件处理。`Ajax.Updater`则用于更新页面的一部分内容。 6. **Scriptaculous**:Scriptaculous是基于...

    JQueryAjax的简介

    在 Ajax 中,“异步”与“同步”是两个重要的概念,它们定义了浏览器与服务器之间数据交换的方式。 - **异步**:在异步模式下,浏览器可以在等待服务器响应的同时继续处理其他任务。这意味着用户可以继续与网页交互...

    Echarts通过Ajax实现动态数据加载

    为了响应前端的Ajax请求,您需要在服务器端编写相应的处理逻辑。这里假设您使用Java Servlet来实现: 1. **创建Servlet类**: ```java import javax.servlet.*; import javax.servlet.http.*; import java.io....

    EJb的Ajax功能

    需要注意的是,虽然同步Ajax请求在本示例中被使用,但在实际项目中通常推荐使用异步请求,以避免阻塞用户界面。此外,还应考虑安全性问题,例如对输入数据进行验证和清理,以防止SQL注入等攻击。

    Ajax Sample

    - **跨域问题**:Ajax请求受到同源策略限制,若需跨域,需配置服务器端的CORS策略。 通过以上内容,我们可以了解到Ajax的基本原理和Prototype JS库在实现Ajax请求时的便利性。在实际开发中,利用这些知识可以构建出...

Global site tag (gtag.js) - Google Analytics