`
hepx
  • 浏览: 151723 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ajax跨站请求方案

    博客分类:
  • web
阅读更多

ajax跨站请求方案

1:概述

跨站 HTTP 请求(Cross-site HTTP request)是指发起请求的资源所在域不同于该请求所指向资源所在的域的HTTP请求。出于安全考虑,浏览器会限制脚本中发起的跨站请求。比如,使用XMLHttpRequest对象发起 HTTP 请求就必须遵守同源策略。

 

2:方案

W3C的Web应用工作组推荐了一种新的机制,即跨源资源共享(Cross-Origin Resource Sharing(CORS))。这种机制让Web应用服务器能支持跨站访问控制,从而使得安全地进行跨站数据传输成为可能。比如说,要使得XMLHttpRequest在现代浏览器中可以发起跨域请求。浏览器必须能支持跨源共享带来的新的组件,包括请求头和策略执行。同样,服务器端则需要解析这些新的请求头,并按照策略返回相应的响应头以及所请求的资源。

 

3:实践(注:以下只是简单的测试用例)

3.1服务端

服务端定义一个Fitler来处理CORS,代码如下:

 

public class ApiCorsFilter implements Filter {
    @Override
    public void destroy() {
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        //允许所有外部资源访问,生产环境指定具体的站点提高安全
        response.setHeader("Access-Control-Allow-Origin", "*");
        //允许访问的方法类型,多个用逗号分隔
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        //OPTIONS预请求缓存的有效时间 单位秒
        response.setHeader("Access-Control-Max-Age", "3600");
        //允许自定义的请求头,多个用逗号分隔
        response.setHeader("Access-Control-Allow-Headers", "content-type, x-requested-with");
        chain.doFilter(req, res);
    }
}

 在项目的web.xml里配置Filter

 

    <filter>
        <filter-name>apiCorsFilter</filter-name>
        <filter-class>com.ihome.mobile.filter.ApiCorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>apiCorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 3.2客户端

编写一个ajax请求

 

<!DOCTYPE html>
<html>
    <head>
        <title>Hello cors</title>
        <script src="http://upcdn.b0.upaiyun.com/libs/jquery/jquery-1.10.2.min.js"></script>
        <script>
            $(function() {
                $.ajax({
                    type: 'POST',
                    contentType : 'text/plain', //不会执行OPTIONS预请求
//                    contentType : 'application/json', //会执行OPTIONS预请求
                    url: "http://api.ldhome.com.net",//内网虚拟映射地址
                    success: function(data){
                        $("#content").html(JSON.stringify(data));
                    },
                    error: function(state,xhr){
                        $("#content").html("请求失败");
                    }
                });
            });
        </script>
    </head>
    <body>
        <h2>结果:</h2>
        <div id="content">
        </div>
    </body>
</html>
 

 

测试结果1:没有预请求



 
可以看到上面只有post请求,请详细信息如下:



 

测试结果2:有预请求



 会发起OPTIONS请求,请求内容如下:



 预请求验证通过,才会发起POST的请求如下:



 

4:关于预请求(OPTIONS)

“预请求”要求必须先发送一个 OPTIONS 请求给目的站点,来查明这个跨站请求对于目的站点是不是安全可接受的。这样做,是因为跨站请求可能会对目的站点的数据造成破坏。 当请求具备以下条件,就会执行预请求处理:

  • 请求以GET,HEAD或者POST 以外的方法发起请求。或者,使用 POST,但contentTypeapplication/x-www-form-urlencoded, multipart/form-data或者text/plain 以外的数据类型。比如说,用 POST发送数据类型为application/json的JSON数据的请求。
  • 使用自定义请求头

 

  • 大小: 25.8 KB
  • 大小: 51.5 KB
  • 大小: 33.1 KB
  • 大小: 297.5 KB
  • 大小: 277.7 KB
分享到:
评论

相关推荐

    Ajax与跨站点请求伪造漏洞

    ### Ajax与跨站点请求伪造(Cross-Site Request Forgery, XSRF)漏洞详解 #### 一、背景介绍 在互联网应用开发过程中,安全性一直是不容忽视的重要方面。随着Ajax技术的普及,它带来的便利性同时也引入了一些新的...

    ajax处理跨域请求

    在jQuery中,使用$.ajax()方法发起AJAX请求时,可以设置`crossDomain`参数为`true`来开启跨域请求。例如: ```javascript $.ajax({ url: 'http://example.com/api/data', // 跨域的URL type: 'GET', crossDomain...

    AJAX的阻塞及跨域名解析

    在本文中,我们将讨论AJAX的阻塞原因和跨域名解决方案。 AJAX阻塞的原因 当我们在页面中使用AJAX时,会出现阻塞现象。我们可以通过一个简单的示例来证实这一点。假设我们有一个函数simpleRequest,它发送一个POST...

    ajax请求数据

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的核心在于JavaScript...了解并熟练掌握Ajax及其跨域解决方案,对于提升Web应用的性能和用户体验至关重要。

    跨站Ajax(Flash Ajax)

    **跨站Ajax(Flash Ajax)** ...然而,随着现代浏览器对Web标准的支持增强,例如CORS(跨源资源共享)的普及,Flash作为跨域Ajax解决方案的重要性逐渐降低,但仍有一些场合因其兼容性和历史遗留问题而被继续使用。

    ajax跨越请求

    **Ajax 跨域请求详解** Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下,通过JavaScript向服务器发送异步请求并获取数据。在Web开发中,跨域问题是一个常见的挑战,因为浏览器的...

    Ajax异步(请求)提交类 支持跨域

    为了解决这一限制,开发者们开发了一系列的解决方案,其中就包括本文介绍的支持跨域的Ajax异步请求类。 #### 关键知识点详解 ##### 1. Ajax基础概念 - **定义**:Ajax(Asynchronous JavaScript and XML)是一种...

    1AJAX避免用户重复提交请求实现方案设计说明书[定义].pdf

    - CSRF:跨站请求伪造,一种网络攻击方式。 1.4 参考资料 本设计方案参考了W3C的AJAX规范,以及相关的Web安全和用户体验设计原则。 2 概述 2.1 系统任务 系统的主要任务是构建一个机制,当用户通过AJAX提交请求后...

    extjs3.0 ajax 同步请求

    同时,在使用同步请求时要注意跨浏览器兼容性问题,并采取相应的解决方案。随着技术的发展,现代前端框架如 React、Vue 等已经很少使用同步 AJAX 请求,取而代之的是更高效的异步编程模式,如 Promise 和 async/...

    H5移动端上滑加载,带ajax异步请求后台数据,拿来即用

    以上就是关于H5移动端上滑加载结合Ajax异步请求后台数据的详细解释,这个功能不仅提高了用户体验,也为开发者提供了高效的数据加载解决方案。通过合理的优化和实施,可以在不牺牲性能的前提下,带给用户流畅、连续的...

    ajax 跨域请求问题 jquery jsonp

    - 没有内置的安全机制,容易受到XSS(跨站脚本攻击)的影响。 - 因为是通过`&lt;script&gt;`标签加载,所以无法控制HTTP头部信息,如设置自定义请求头或获取响应头。 - 如果服务器返回错误,浏览器不会抛出错误,而是简单...

    ajax乱码解决方案

    **Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与...在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决方案的有效性和广泛适用性。

    java ajax文档

    - **安全性考量**:虽然Ajax增强了Web应用的动态性和交互性,但也引入了新的安全挑战,如跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。因此,在设计Ajax应用时,必须实施充分的安全措施,比如对用户输入进行验证和...

    xe-ajax3.4.13.js 封装 fetch 异步请求 javascript 库

    这些组件库可能依赖 `xe-ajax` 来处理表格数据的加载、编辑和保存等操作,提供了一站式的前端数据管理解决方案。 总之,`xe-ajax` 是一个强大的异步请求库,结合了 `Promise` 的优势和跨平台的特性,使得在 ...

    掌握Ajax系列7:在请求和响应中使用XML(上)

    在Ajax的请求和响应中,XML只是一种可选的数据格式,而不是核心。 XML是一种结构化数据的通用格式,广泛用于数据交换,尤其是在不同的系统和平台之间。它的优点包括数据独立性、可读性和可扩展性。然而,Ajax并不...

    ajax跨域解决办法

    6. **Domain属性(仅限子域)**:在cookies中设置`domain`属性可以实现跨子域共享,但这仅限于同一主域下的子域名之间,对AJAX跨域请求帮助有限。 在实际应用中,开发者通常根据项目需求和服务器环境选择合适的跨域...

    AJAX技术Ajax.7z

    4. **安全问题**:AJAX请求可能引发跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等问题,需要合理的安全策略来防范。 总结来说,AJAX技术通过异步通信实现了网页的局部更新,显著提高了用户体验,但同时也带来了一些挑战...

    基于Ajax的企业网站建设方案.pdf

    基于Ajax的企业网站建设方案 本文主要介绍了基于Ajax的企业网站建设方案,讨论了Ajax技术在企业网站建设中的应用,并分析了Ajax和PHP技术的优点,最后给出了利用Ajax技术建设企业网站的具体过程。 一、Ajax技术...

    使用prototype.js发送ajax get请求中文参数乱码解决

    在处理中文参数时,尤其是在使用Ajax的GET请求时,可能会遇到中文乱码的问题。这是因为浏览器、服务器和JavaScript之间的编码处理不一致所导致的。本文将深入探讨这个问题,并提供解决方案。 首先,我们需要了解...

    ajax基础学习资料

    9. **安全问题**:使用Ajax时需注意XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等安全问题,通过验证令牌、设置HTTP头部等方式进行防护。 10. **性能优化**:合理使用缓存、控制并发数量、预加载数据、避免过度使用...

Global site tag (gtag.js) - Google Analytics