跨域AJAX请求

在处理跨域AJAX请求有许多方法。我这里用的是 CORS,

CORSFilter

CORSFilter是Apache官方提供一个支持CORS跨域的过滤器:

详细说明: http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html

在maven配置文件中导入依赖

<!--CORS-->
<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>2.6</version>
</dependency>    

在web.xml添加过滤器

<filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
            <param-name>cors.allowOrigin</param-name>
            <param-value>http://127.0.0.1:8020</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedMethods</param-name>
            <param-value>POST,GET,OPTIONS,DELETE,PUT</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportedHeaders</param-name>
            <param-value>Content-Type,Accept,Origin,XRequestedWith,ContentType,LastModified</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposedHeaders</param-name>
            <param-value>SetCookie</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportsCredentials</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

客户端

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>跨域AJAX请求</title>
    </head>

    <body>
        <h2>跨域AJAX请求</h2>
        <button type="button" id="btnAjax">ajax请求</button>
        <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
        <script type="text/javascript">
            $("#btnAjax").click(function() {
                $.get("http://localhost:8080/mvc02/users", "", function(data) {
                    console.log(JSON.stringify(data));
                }, "json");
            });
        </script>
    </body>

</html>

服务器(本人用的是Spring MVC):

@RestController
@RequestMapping(path="/users")
public class UsersController {
    @Resource
    EmpService empService;

    /*查询所有*/
    @RequestMapping(path = "",method = RequestMethod.GET)
    public List seletUser(){
        return empService.findEmpList();
    }}

结果:

Spring MVC4.2 及以上增加了对CORS的支持

时间: 2024-10-10 03:03:07

跨域AJAX请求的相关文章

跨域AJAX请求的解决方案

同源策略 : http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html 在AJAX应用环境中,由于安全的原因,浏览器不允许XMLHttpRequest组件请求跨域资源.在很多情况下,这个限制给我来带来的诸多不 便.很多同行,研究了各种各样的解决方案: 1. 通过修改document.domain和隐藏的IFrame来实现跨域请求.这种方案可能是最简单的一种跨域请求的方案,但是它同样是一种限制最大的方 案.首先,它只能实现在同一个

用JQuery的$.getJSON发起跨域Ajax请求

jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callback] )  跨域加载JSON数据.伊川县第二中学 url:     发送请求的地址 data : (可选) 待发送key/value参数 callback: (可选) 载入成功时的回调函数 主要用于客户端获取服务器JSON数据.简单示例: 服务器脚本,返回JSON数据: view source p

jquery跨域Ajax请求

sonp原理: 首先在客户端注册一个callback, 然后把callback的名字传给服务器. 此时,服务器先生成 json 数据.然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp. 最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端. 客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定

chrome实现全浏览器跨域ajax请求

如图,在chrome快捷方式上打开属性栏,在‘目标’栏加上后缀--disable-web-security --user-data-dir.即可实现在此浏览器上所有网页的跨域请求.

jQuery+ASP.NET MVC基于CORS实现带cookie的跨域ajax请求

这是今天遇到的一个实际问题,在这篇随笔中记录一下解决方法. ASP.NET Web API提供了CORS支持,但ASP.NET MVC默认不支持,需要自己动手实现.可以写一个用于实现CORS的ActionFilterAttribute,我们就是这么实现的: public class AllowCorsAttribute : ActionFilterAttribute { private string[] _domains; public AllowCorsAttribute(string dom

C#后台HttpWebRequest模拟跨域Ajax请求,注册Windows服务到服务器上

项目需求,暂且叫A.B公司吧.我们公司需要从A公司哪里读取机器上的数据,放到我们数据库中.然后再将数据库中存的数据,提供一个接口,B公司来调用,大概这个意思. 好了,言归正传.这个是之前做好的界面,用户需要手动点击“开始”,然后写了个定时器,不停的来回调用 部分源码(5秒调用后台处理) 1 function refreshCount() { 2 if (prj.is_port_state_1 == false) { 3 var grid_down = query_panel.grid_down;

JSONP跨域 ajax请求

原理: 由于浏览器的同源策略不能使用XMLHTTPREQUEST对除本地外的服务器发送请求. 所以使用script标签的src属性发送请求,接收到的JSONP数据以函数名的方式返回. 需要在本地创建服务器返回的函数接收服务器返回的数据. JS代码: function jsonpRequest() { var create_src = document.createElement('srcipt'); #创建script标签 create_src.src = 'http://www.baidu.c

为什么我的跨域 AJAX 发了两个请求?

为什么我的跨域 AJAX 发了两个请求? 转载自:http://todoit.me/ajax-preflight/ 最近在做一个 VUE 的项目的时候, 和后端的小伙伴对接口, 想方便开发, 于是要求后端的小伙伴在所有的接口都加上跨域的许可 (Access-Control-Allow-Origin) (后来事实证明这不是一个很好的解决方案, 因为 vue-cli 提供了 proxy-table 作为 AJAX请求的代理, 只需要配置一下就好, 编译上线也不要改动代码) however, 经过这次

常用跨域资源请求分析

WEB开发过程中最常使用 Ajax技术来完成客户端与服务器的通信.而实现Ajax通信的XmlHttpRequest对象会带来跨域安全策略问题.简单来说,默认情况下,XHR对象只能访问与包含它的页面位于同一个域下的资源. 那么问题来了,何为跨域呢?通常,Ajax指向的地址中,二级域名/端口号/协议/必须与包含它的页面相同.举个栗子: www.tangide.com 访问 www.i5r.com是跨域. a.tangide.com 访问 b.tangide.com是跨域. www.tangide.c