【前言】

  在实际项目中,可能是多个项目共同完成某个功能,他们之间需要实现数据的交互。这样就会需要有跨域的问题。

  比如,发布在不同电脑上的不同项目之间,用不同语言开发的项目之间……

【JSONP】

  当使用Ajax 跨域访问的时候,比较常用的方法是 JSONP,这种方法目前只支持GET 方法

  

function TestAjax() {
var url ="/geturl";
var data = $.parseJSON('{
"equObjCode" : "1111"
}'); $.ajax({
type : "get",
async : false,
url : url,
data : data,
//cache : false, //默认值true
dataType : "jsonp",
jsonp : "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback : "jsonpCallback",
//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
//如果这里自定了jsonp的回调函数,则success函数则不起作用;否则success将起作用
success : function(data) {
alert(JSON.stringify(data));
},
error : function(XMLHttpRequest, textStatus) {
alert(XMLHttpRequest.status + ","
+ XMLHttpRequest.readyState + ",error="
+ textStatus);
}
});
}

  

【java】

  在java web 项目中实现跨域方式,可以用 filter 实现跨域访问问题

  

web.xml 中需要添加此filter的配置  

	<filter>
<filter-name>crossOrigin</filter-name>
<filter-class>com.bkc.core.filter.CrossOriginFilter</filter-class>
<init-param>
<param-name>isAllowCross</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>crossOrigin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  实现 Filter 接口

package com.bkc.core.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CrossOriginFilter implements Filter
{
private boolean isAllowCross = false; @Override
public void destroy()
{
isAllowCross = false;
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
if(isAllowCross){
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
System.out.println("拦截请求: "+httpServletRequest.getServletPath());
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
httpServletResponse.setHeader("Access-Control-Max-Age", "0");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
httpServletResponse.setHeader("XDomainRequestAllowed","1");
}
chain.doFilter(request, response);
} @Override
public void init(FilterConfig filterConfig)
throws ServletException
{
String isAllowCrossStr = filterConfig.getInitParameter("isAllowCross");
isAllowCross = isAllowCrossStr.equals("true");
} }

  看代码可知,filter 有一个初始化参数 isAllowCross ,根据这个参数来设置此项目是否允许跨域访问。

  当允许跨域访问的时候,则在每一个返回的http 报文头中增加如下参数:

  (1)Access-Control-Allow-Origin:* 表示允许任何域名跨域访问。

    如果这样设置的话,需要考虑一下安全性。这里可以指定允许访问的域名即可。如Access-Control-Allow-Origin:www.baidu.com,www.client2.com

  (2)Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept

  (3)Access-Control-Allow-Methods:GET,POST

  

  Access-Control-Allow-Origin:* 表示

【Access-Control-Allow-Origin】跨域问题的更多相关文章

  1. Access control allow origin 简单请求和复杂请求

    原文地址:http://blog.csdn.net/wangjun5159/article/details/49096445 错误信息: XMLHttpRequest cannot load http ...

  2. 解决js ajax跨越请求 Access control allow origin 异常

    // 解决跨越请求的问题 response.setHeader("Access-Control-Allow-Origin", "*");

  3. Ajax 跨域 异步 CORS

    HTTP access control (CORS) 核心在于使用定制(添加新的header)HTTP header让浏览器和服务器有更多的相互了解,从而决定一个请求或者响应成功还是失败   对于一个 ...

  4. 基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特 ...

  5. WebApi Ajax 跨域请求解决方法(CORS实现)

    概述 ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, 特别 ...

  6. WebApi Ajax 跨域请求解决方法(CORS实现)(作者:jianxuanbing)

    概述 ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特别各 ...

  7. ajax跨域问题Access-Control-Allow-Origin

    Access control allow origin直译过来就是"访问控制允许同源",这是由于ajax跨域访问引起的.所谓跨域就是,在a.com域下,访问b.com域下的资源:出 ...

  8. AJAX跨域POST发送json时,会先发送一个OPTIONS预请求

    我们会发现,在很多post,put,delete等请求之前,会有一次options请求. 根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单请求(get和部分post,post时content ...

  9. angular之跨域

    一.什么是跨域? 跨域是指一个域下的文档或者脚本去请求另一个域下的资源.(广义) 广义的跨域: 1.资源跳转:链接跳转.重定向.表单提交. 2.资源嵌入:<link>.<script ...

  10. Ajax和跨域请求

    Ajax 一.概述 Web 程序最初的目的就是将信息(数据)放到公共的服务器,让所有网络用户都可以通过浏览器访问. 在次之前,我们可以通过以下几种方式让浏览器发出对服务端的请求,获取服务端的数据: 地 ...

随机推荐

  1. 8个超炫酷仿苹果应用的HTML5动画

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...

  2. maven pom scope 含义

    maven pom scope 依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中.让我们详细看一下每一种范围: compile (编译范围) compile是默认的范围: ...

  3. 01-老马jQuery教程-jQuery入口函数及选择器

    前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟.视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html ...

  4. Liunx下Intel无线网卡驱动安装

    原文: https://blog.csdn.net/u014157776/article/details/78272611 首先查看网卡型号,指令: lspci | grep -i net 如果是In ...

  5. phpMyadmin各版本漏洞

    一: 影响版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 ANYUN.ORG 概述:PhpMyAdmin存在PREGREPLACEEVAL漏洞 利用模块: ...

  6. python-标识符(Identifiers)和关键字(keywords)

    标识符:Identifiers 标识符必须以字母(大小写均可)或者"_"开头,接下来可以重复0到多次(字母|数字|"_") 特点: 1.没有长度限制 2.区分大 ...

  7. PowerDesigner导出表到HTML或word(实测有效)

    推荐生成HTML,因为看起来更加简洁 一.模版修改 在导出表时,powerdesigner默认为我们提供了很多的模版,在工具栏中选择[Report--->Report Template]即可看到 ...

  8. ElasticSearch的安装、使用、踩坑

    最近博客写的少了. 本篇介绍在安装ElasticSearch和head插件的过程中遇到的小问题,和一些日常使用的操作(简单搜索语法.分片管理). ElasticSearch 它是一个实时分布式搜索和分 ...

  9. C语言 · 和最大子序列

    算法提高 和最大子序列   时间限制:1.0s   内存限制:512.0MB      问题描述 对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数).你要完成 ...

  10. Go Revel - Interceptors(拦截器)

    `interceptor`拦截器是revel框架在执行一个`action`的前后所调用的函数.他允许以AOP方式进行开发,这种模式非常有用: 1.记录请求日志 2.错误处理 3.状态保持 在revel ...