1.跨域请求,就是这个服务器去拿另一个服务器的资源,另一个服务器的域名肯定和当前的服务器域名不一样嘛。

浏览器默认是不允许跨域请求的,是浏览器对JavaScript施加的安全限制。是浏览器对JavaScript施加的安全限制。是浏览器对JavaScript施加的安全限制。

由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。

所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:

http://www.123.com/index.html 调用 http://www.123.com/server.PHP (非跨域)

http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

服务器端解决跨域问题的三种方法

跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如: 
- ‘192.168.1.1:8080’ 与 ‘192.168.1.2:8080’是不同的域。 
- ‘192.168.1.1:8080’ 与 ‘192.168.1.1:8081’是不同的域。

解决此类问题的方法很多,有需要客户端和服务端都要更改的,例如jsonp,iframe等等;有只需要客户端更改的,这种情况只能出现在hybrid app开发中,即通过调用native方法来进行网络请求;有只需要服务端配置的,下面介绍3种服务端配置的方法。

第一种

如果您使用的mvc框架是spring4.2以上的话,一个@CrossOrigin就可以搞定。将@CrossOrigin加到Controller上,那么这个Controller所有的请求都是支持跨域的,代码如下:

@Controller
@CrossOrigin
public class GreetingController {

将@CrossOrigin加到请求方法上,那么这个请求是支持跨域的,代码如下

    @CrossOrigin@RequestMapping("/greeting")public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {

第二种

全局配置,也需要spring4.2以上。

    @Beanpublic WebMvcConfigurer corsConfigurer() {return new WebMvcConfigurerAdapter() {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");}};}

.addCorsMappings()中的参数代表支持跨域的url,.allowedOrigins()中的参数代表可以访问该接口的域名,设置为”*”可支持所有域。

第三种

这种方法就跟框架无关了,需要两个jar包,点击这里进行下载,两个jar包可以放的程序里,也可以放到tomcat中,然后将下面的配置写到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 > * </ param-value >   </ init-param >   < init-param >   < param-name > cors.supportedMethods </ param-name >   < param-value > GET, POST, HEAD, PUT, DELETE </ param-value >   </ init-param >   < init-param >   < param-name > cors.supportedHeaders </ param-name >   < param-value > Accept, Origin, X-Requested-With, Content-Type, Last-Modified </ param-value >   </ init-param >   < init-param >   < param-name > cors.exposedHeaders </ param-name >   < param-value > Set-Cookie </ 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 >

跨域理解及服务器端解决跨域问题相关推荐

  1. 迁移学习与跨域推荐,以及解决跨域推荐的方法

    本文主要是详细介绍一下跨域推荐,包含但不局限于以下几个部分: 迁移学习 跨域推荐 跨域推荐可以怎么做 冷启动的其他一些方法 可以参考的论文有哪些 1. 迁移学习 以下内容参考[推荐系统中的多任务学习- ...

  2. 26、vue前端出现跨域问题,如何解决跨域?

    问题: 因为浏览器的同源策略的限制问题(协议.主机.端口一致),浏览器访问非同源的网址时,会出现无法获取数据(已发请求,服务器已收到请求),出现跨域问题 3种解决方法: 1.cors跨域(配置服务器) ...

  3. java跨系统和跨域_java web服务解决跨域问题

    问题1:浏览器页面跨域请求报错 相信很多程序员都遇到过跨域的问题,如何解决一直是一件很头疼的事情,我就描述下我遇到的问题,及解决办法.什么是跨域,请自行脑补. 需要添加maven依赖,在web.xml ...

  4. 什么是跨域,以及如何解决跨域问题?

    跨域是相对于同源策略而言的. 同源策略是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源是指: 协议,域名,端口都相同,就是同源, 否则就是跨域 同源策略带来的影响 在同源策略下, 浏览器只允许 ...

  5. CORS-跨域资源共享 解决跨域问题

    1.什么是跨域? a.test.com 和 b.test.com 是两个不同的域,而处于安全机制考虑,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容,但是我们在项目开发时,经常遇到一个页 ...

  6. 什么是跨域及怎么解决跨域问题?

    什么是跨域? 这篇博文解释的挺清楚,我直接引用 什么是跨域?怎么解决跨域问题?_L瑜-CSDN博客_跨域是什么意思 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加 ...

  7. PHP的介绍及应用,ajax的介绍及应用,跨域问题及jsonp解决方法

    PHP(服务器编程语言) 服务器由环境(Apache),数据库(mysql),代码(HTML+css +js,php)组成. PHP必须在服务器的环境下执行 php与js最大的区别就是工作环境,PHP ...

  8. 跨域请求及解决跨域的方法

    目录 跨域 同源策略 如何解决跨域 JSONP 跨源资源共享(CORS) HTTP 响应首部字段 Access-Control-Allow-Origin Access-Control-Expose-H ...

  9. 跨域问题及常见解决方法---以 Geoserver 为例

    跨域问题及常见解决方法---以 Geoserver 为例 跨域问题 跨域简介 解决跨域常用方法 前端代理 后端处理 其他代理(nginx) Geoserver 解决跨域 免费解决跨域工具:[geose ...

最新文章

  1. win10禁止dpi缩放在哪_Win10最新DPI缩放技术怎么设置?
  2. 程序员面试题精选100题(08)-求1+2+...+n[C/C++/C#]
  3. 成功解决WARNING:tensorflow:From :read_data_sets (from tensorflow.contrib.learn.python.learn.
  4. 如何在vmware虚拟机下挂载windows硬盘
  5. php真随机数,php 的伪随机数与真随机数实例详解
  6. java ee cdi_Java EE CDI ConversationScoped示例
  7. [转载] Java获取泛型T的类型 T.class
  8. 李彦宏站台的世界首家 AI 公园就有啥?怎么去?
  9. 192B Walking in the Rain
  10. 光耦驱动单向可控硅_光耦继电器在信号传输方面的优势!
  11. vue+element使用动态加载路由方式实现三级菜单页面显示问题
  12. 基于Luckysheet实现的协同编辑在线表格支持在线导入数据库,前端导出,前端导入,后端导出
  13. 【HTML 教程系列第 9 篇】什么是 HTML 中的换行标签 br
  14. oracle12c不使用cdb模式,oracle 12c non-cdb升级成cdb模式
  15. 什么是浏览器?2、常见的主流浏览器及其内核?什么是服务器?(学习笔记)
  16. InfluxDB使用HTTP的API编写数据
  17. python爬取网易云音乐百强榜单
  18. SVG 的 foreignObject 标签
  19. 索尼Alpha系列相机通过照片读取快门次数的在线工具
  20. Gitlab访问突然出现 403 forbidden解决方案

热门文章

  1. java 定义类变量初始化吗_Java的变量有哪些类型?变量如何定义?如何初始化?请说明理由并举例_学小易找答案...
  2. Nacos系列:基于Nacos的注册中心
  3. 32. Longest Valid Parentheses
  4. Android 6.0 Changes
  5. 区块链技术指2.1 区块链技术
  6. SpringMVC - 非注解的处理器映射器和适配器
  7. php下session入memcached
  8. linux c++开发问题汇总
  9. ExtJS 4.1更新
  10. gitpythonapi_GitPython 使用基础