关于跨域请求的问题

解决方案:

1,原声ajax中提供了些属性

dataType:‘jsonp‘

但是我没测试过。

2:如果你项目没有用框架,servlet实现的,那在你需要跨域请求的那个servlet配置中增加如下配置(注意红色部分)

<servlet>
        <servlet-name>abc</servlet-name>
        <servlet-class>xxx.xx.xx.xx.pressAgencyCtrl</servlet-class>
        <init-param>
            <description>跨域访问</description>
            <param-name>accessControlAllowOrigin</param-name>
            <param-value>*</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>abc</servlet-name>
        <url-pattern>/kyqq</url-pattern>
    </servlet-mapping>

3:如果你使用了框架,比如springmvc等,提供以下两种方式,创建一个filter,在filter中实现,如下

view pla----------------------------------------------------------------------

  1. package xxxxxxxxxxxxxxx;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServletResponse;
  10. public class Kuayu implements Filter {
  11. @Override
  12. public void init(FilterConfig filterConfig) throws ServletException {
  13. }
  14. @Override
  15. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  16. throws IOException, ServletException {
  17. //在此处实现跨域设置
  18. HttpServletResponse httpResponse=(HttpServletResponse) response;
  19. httpResponse.setHeader("Access-Control-Allow-Origin", "*");//设置所有的请求都可跨域请求
  20. httpResponse.setHeader("Access-Control-Allow-Headers", "Authentication");//认证
  21. chain.doFilter(request, httpResponse);
  22. }
  23. @Override
  24. public void destroy() {
  25. }
  26. }
  27. web.xml 配置
  28. <filter>
  29. <filter-name>kuayuqingqiu</filter-name>
  30. <filter-class>com.xx.xx.Kuayu</filter-class>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>kuayuqingqiu</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>

-------------------------------------------------------------------------------------------

spring框架4.2版本后,Spring给出了注解的方式解决问题。

即在Controller控制器中,在Controller注解上方添加@CrossOrigin注解。

最后来点名词解释:

Access-Control-Allow-Origin: 允许跨域访问的域,可以是一个域的列表,也可以是通配符"*"。这里要注意Origin规则只对域名有效,并不会对子目录有效。即http://foo.lwq/lxq/ 是无效的。但是不同子域名需要分开设置,这里的规则可以参照同源策略

Access-Control-Allow-Credentials: 是否允许请求带有验证信息,XMLHttpRequest请求的withCredentials标志设置为true时,认证通过,浏览器才将数据给脚本程序。

Access-Control-Expose-Headers: 允许脚本访问的返回头,请求成功后,脚本可以在XMLHttpRequest中访问这些头的信息

Access-Control-Max-Age: 缓存此次请求的秒数。在这个时间范围内,所有同类型的请求都将不再发送预检请求而是直接使用此次返回的头作为判断依据,非常有用,大幅优化请求次数

Access-Control-Allow-Methods: 允许使用的请求方法,以逗号隔开

Access-Control-Allow-Headers: 允许自定义的头部,以逗号隔开,大小写不敏感

时间: 2024-11-04 14:31:22

关于跨域请求的问题的相关文章

JSonP跨域请求

我们在通过自己的页面或程序通过ajax请求其它网站或服务时,会存在一个ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准.不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>).   于是可以判断,当前阶段如果想通过纯web端(ActiveX控件.服

跨域请求资源的几种方式

跨域请求资源的几种方式 由于浏览器同源策略,凡是发送请求URL的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域. (1)JSONP(jsonp跨域get请求) 这种方式主要是通过动态创建一个script标签,浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行:(创建script标签向不同域提交http请求的不会被拒绝的方法,jsonp标签的src属性是没有跨域限制的) 实际项目中JSONP通常用来获取json格式数据,这时前后端通常约定一个参数callback,

AJAX跨域请求数据

由于浏览器的同源策略 ajax请求不可以接收到请求响应回来的数据 请求数据需要调用浏览器的内置构造函数 XMLHttpRequest() 进行 实例对象 var xhr = new XMLHttpRequest(); 注意点 在IE8之前支持的 ActiveXobject("Microsoft.XMLHTTP");  记住要进行兼容处理哦  在这里我就不写了 通过该对象进行获取 获取数据的四种状态  xhr.readyState 该属性保存着请求数据的几种状态 1.xhr.open(请

解决前端跨域请求的几种方式

利用 JSONP 实现跨域调用 说道跨域调用,可能大家首先想到的或者听说过的就是 JSONP 了. 1.1 什么是JSONP JSONP 是 JSON 的一种使用模式,可以解决主流浏览器的跨域数据访问问题.其原理是根据 XmlHttpRequest 对象受到同源策略的影响,而 <script> 标签元素却不受同源策略影响,可以加载跨域服务器上的脚本,网页可以从其他来源动态产生 JSON 资料.用 JSONP 获取的不是 JSON 数据,而是可以直接运行的 JavaScript 语句. 1.2

JQuery的Ajax跨域请求的

JQuery的Ajax跨域请求的(Ajax) 什么是jsonp格式呢?API原文:假设获取的数据文件存放在远程server上(域名不同.也就是跨域获取数据),则须要使用jsonp类型.使用这样的类型的话,会创建一个查询字符串參数 callback=? .这个參数会加在请求的URL后面. server端应当在JSON数据前加上回调函数名.以便完毕一个有效的JSONP请求.意思就是远程服务端须要对返回的数据做下处理,依据client提交的callback的參数,返回一个callback(json)的

什么是跨域请求

昨晚在帮朋友解决问题的时候,遇到了一个问题,经过百度又让我理解了一个东西叫做:跨域请求.这个词其实不是第一次听到和看到,但是之前没有去细想,今晚将查找到的资料总个小总结. 浏览器均默认开启了同源策略,它指Ajax请求所在的页面和被请求的页面在协议.域名.端口均相同才能被访问,否则会提示如下错误: XMLHttpRequest cannot load xxxxxxx is not allowed by Access-Control-Allow-Origin. 之前还想过为什么,后来突然就明白了,很

PHP跨域请求nodejs

摘要:用nodejs作为服务器,php作为客服端进行跨域请求,并返回数据. 一:windows环境下的nodejs安装(以及express模板的安装):http://blog.uifanr.com/2013/03/12/472 http://www.veryhuo.com/a/view/39756.html 二:测试安装 1:在cmd中输入:node -v 若出现版本号,则安装成功. 2:在D 盘下新建一个文件  test_node.js : 1 var http = require("http

跨域请求问题

跨域请求,需要提供安全并且服务器认可的信息. 比如:A域名下的数据需要请求B域名下的一个方法,需要进行验证,或者可能需要获取B域名下cookie的某一个值,那么需要进行跨域请求. 如果我们使用普通的Ajax的json格式来进行请求,则会出现 XMLHttpRequest cannot load http://zhl.study.com/cross-domain.php. No 'Access-Control-Allow-Origin' header is present on the reque

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的

跨域请求之JSONP

跨域恳求的方法有很多种, 1,iframe 2,document.domain 3,window.name 4,script 5,XDomainRequest (IE8+) 6,XMLHTTPRequest (Firefox3.5+) 7,postMessage (HTML5) 8,后台代理 ... 它们有各自的优缺点,回来的数据格局也各不同,应根据需要慎重挑选.比方iframe回来html片段就对比适合,费老劲用它回来JSON就因小失大了.这篇开端我将打造一个有用的跨域恳求东西Sjax.运用s