网站跨域解决方案

news/2024/5/14 0:29:04/文章来源:https://blog.csdn.net/qq_38270106/article/details/84638983

什么是跨域问题

是两个项目之间使用ajax(前端类似与后端技术httpclient)实现通讯,如果浏览器访问的域名地址与ajax访问的地址不一致的情况下,默认情况下浏览器会有安全机制,这个机制跨域问题,会无法获取到返回结果

浏览器跨域问题产生的原因

使用ajax请求调用第三方接口,如果ajax访问的接口域名或者端口号与浏览器访问的域名或者端口号不一致的情况下,就会产生跨域问题。(属于浏览器安全策略)跨域不属于前端问题

一定要域名和端口号都保持一致才能访问到

跨域时,请求可以访问到后台接口,但是获取不到数据

  

环境搭建

新建两个项目

maven依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><dependencies><!-- SpringBoot 对lombok 支持 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- SpringBoot web 核心组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><!-- SpringBoot 外部tomcat支持 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency><!-- springboot-log4j --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId><version>1.3.8.RELEASE</version></dependency><!-- springboot-aop 技术 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency></dependencies>

项目一:itmayiedu-web-a

配置文件 

server:port: 9000
spring:mvc:view:prefix: /WEB-INF/jsp/suffix: .jsp

后台 

@SpringBootApplication
@Controller
public class AIndexController {@RequestMapping("/getAInfo")public String getBInfo() {return "aIndex";}public static void main(String[] args) {SpringApplication.run(AIndexController.class, args);}}

 页面

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">$(document).ready(function() {$.ajax({type : "GET",async : false,url : "http://b.itmayiedu.com:9001/getBInfo",dataType : "json",success : function(data) {alert(data["respCode"]);},error : function() {alert('fail');}});});
</script>

项目二:itmayiedu-web-b 

配置文件

server:port: 9001
spring:mvc:view:prefix: /WEB-INF/jsp/suffix: .jsp

后台

@SpringBootApplication
@RestController
public class BIndexController {@RequestMapping("/getBInfo")public Map<String, Object> getBInfo(HttpServletResponse response) {// 告诉浏览器允许跨域访问,*表示所有的域名都允许的response.setHeader("Access-Control-Allow-Origin", "*");Map<String, Object> result = new HashMap<>();System.out.println("这是B项目");result.put("respCode", "200");result.put("respMsg", "操作成功");return result;}public static void main(String[] args) {SpringApplication.run(BIndexController.class, args);}}

跨域问题解决方案 

访问:http://a.itmayiedu.com:9000/getAInfo

host文件修改

127.0.0.1   a.itmayiedu.com
127.0.0.1   b.itmayiedu.com

1、使用jsonp解决跨域问题(不推荐,因为只能支持get请求,不支持post请求)

页面代码修改

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type : "POST",
            async : false,
            url : "http://b.itmayiedu.com:9001/getBInfo",
            dataType : "jsonp",
            jsonp : "jsonpCallback",//服务端用于接收callback调用的function名的参数

            success : function(data) {
                alert(data["respCode"]);
            },
            error : function() {
                alert('fail');
            }
        });

    });
</script>

后台代码修改

 @RequestMapping("/getBInfo")
    public void getBInfo(HttpServletResponse response, String jsonpCallback) throws IOException {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("respCode", "200");
        jsonObject.put("respMsg", "操作成功");
        PrintWriter printWriter = response.getWriter();
        printWriter.write(jsonpCallback + "(" + jsonObject.toJSONString() + ")");
        printWriter.close();
    }

 

 

2、使用HttpClient进行转发(不推荐,因为使用效率非常低,会发送两次请求)

相当于发送两次请求,但是注意保证域名和端口号一致问题,

好处:安全,隐藏了真实调用地址,与Nginx反向代理非常相似

前端代码修改

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type : "POST",
            async : false,
            url : "http://a.itmayiedu.com:9000/forwardB",
            dataType : "json",
            success : function(data) {
                alert(data["respCode"]);
            },
            error : function() {
                alert('fail');
            }
        });

    });
</script>

后端新增

    @RequestMapping("/forwardB")
    @ResponseBody
    public JSONObject forwardB() {
        JSONObject result = HttpClientUtils.httpGet("http://b.itmayiedu.com:9001/getBInfo");
        return result;
    }

3、设置浏览器响应头允许跨域(可以推荐)

// 告诉浏览器允许跨域访问,*表示所有的域名都允许的,在公司正常代码放在过滤器中
response.setHeader("Access-Control-Allow-Origin", "*");

4、使用Nginx搭建API接口网关(强烈推荐)因为保证域名和端口都一致,使用项目区分反向代理到真实项目地址

原理:保证域名和端口号永远是相同的,根据项目不同名称使用Nginx进行反向代理到真实服务器

host新增:

 127.0.0.1   api.itmayiedu.com

nginx核心配置

    server {
        listen       80;
        server_name  api.itmayiedu.com;

        location /a {
            proxy_pass  http://a.itmayiedu.com:9000/;
            index  index.html index.htm;
        }
        
        location /b {
            proxy_pass  http://a.itmayiedu.com:9001/;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

前端代码

 <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
            type : "POST",
            async : false,
            url : "http://api.itmayiedu.com/b/getBInfo",
            dataType : "json",
            success : function(data) {
                alert(data["respCode"]);
            },
            error : function() {
                alert('fail');
            }
        });

    });
</script>

访问:http://api.itmayiedu.com/a/getAInfo 

5、使用Zuul微服务搭建API接口网关(强烈推荐)SpringCloud

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_766715.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站架构技术一览

http://www.hollischuang.com/archives/1132 本文内容大部分来自《大型网站技术架构》,这本书很值得一看&#xff0c;强烈推荐。 网站系统架构层次如下图所示&#xff1a; 1.前端架构 前端指用户请求到达网站应用服务器之前经历的环节&#xff0c;通常不包含网站业务逻辑&#…

公民信息黑产报价单曝光 网站成泄露隐私重灾区

私家侦探及地下要债公司幕后推高公民信息售价&#xff0c;电商、游戏等网站成泄露隐私重灾区 进入3月以来&#xff0c;陌生骚扰来电进入高发期。一边是各地公安机关不断加大严打力度&#xff0c;另一边是被捣毁地下黑产窝点规模依然在不断壮大。 而类似的诈骗行为之所以屡禁不止…

[Ajax]十个优秀的 Ajax/Javascript实例网站

原始地址&#xff1a;http://supercode.appspot.com/post/13 1.Ajax Rain AjaxRain有很多完美整合AJAX, CSS, DHTML 或 Javascript的实例&#xff0c;有一些Demo的确值得你去看一看&#xff0c;即使你不是网页设计(开发)师。 2.Ajax Daddy Ajax Daddy收集了大量漂亮的Web2.0工…

第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示...

第三百八十七节&#xff0c;DjangoXadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别&#xff0c;static静态文件里面一般防止的我们网站样式的文件&#xff0c;包括ccs&#xff0c;js&#xff0c;网站样式图片 上传资源…

PHP网站http替换https

PHP网站http替换https

百度搜索重心,从网站到到熊掌号,流量品牌互动,企业主的新选择

22日百度联盟熊掌号分论坛上百度高管针对熊掌号发展及其未来走向给了明确说明&#xff0c;对于应对网站优化网站效果排名来说SEO们的未来可期。 过去的半年&#xff0c;是百度搜索发生剧烈变化的半年&#xff0c;在过去的时代中&#xff0c;百度搜索索引的是一个个网站、站点&a…

https 免费证书获得了,怎样配置呀,为什么我的网站还是http呢

https 免费证书获得了&#xff0c;怎样配置呀&#xff0c;为什么我的网站还是http呢 推荐一个免费的阿里云产品&#xff1a;云盾证书(https证书) 为了能让非专业人士看懂&#xff0c;同样尽量用直白的话&#xff0c;一般来说&#xff1a;当你个人需要建立网站&#xff0c;或者公…

安装宝塔,并创建站点

宝塔面板分linux面板和windows面板&#xff0c;安装宝塔linux面板首先要访问宝塔官网查看对应版本进行选择 宝塔面板的安装需要注意的地方有&#xff1a; 1.纯净系统 2.确保是干净的操作系统&#xff0c;没有安装过其它环境带的Apache/Nginx/php/MySQL&#xff0c;否则安装不…

SQLserver中优化动易网站实例

在SQL server中我们已经了解到了分析顾问的强大之处&#xff0c;利用这个程序实现了大幅度的查询优化&#xff0c;并且操作简单。那么在实际中&#xff0c;又是如何完成真正的优化的呢&#xff1f;在现实环境中&#xff0c;我们利用系统监视功能联合分析顾问来解决查询优化的问…

接入高防之后网站问题需要排查的有哪些?

接入高防之后&#xff0c;为了保证业务最大程度的稳定&#xff0c;确认问题所在&#xff0c;墨者安全建议在切换本地的测试。本地测试步骤为 &#xff1a;a.首先修改本地hosts文件&#xff0c;使本地对于被防护站点的请求经过高防&#xff0c;以Windows操作系统为例&#xff1…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

如何防御网站被ddos攻击 首先要了解什么是流量攻击

2019独角兽企业重金招聘Python工程师标准>>> 什么是DDOS流量攻击&#xff1f;我们大多数人第一眼看到这个DDOS就觉得是英文的&#xff0c;有点难度&#xff0c;毕竟是国外的&#xff0c;其实简单通俗来讲&#xff0c;DDOS攻击是利用带宽的流量来攻击服务器以及网站。…

【面试精选】关于大型网站系统架构你不得不懂的10个问题

该文已加入笔主的开源项目——JavaGuide&#xff08;一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:https://github.com/Snailclimb/JavaGuide 。觉得不错的话&#xff0c;记得点个Star。下面这些问题都是一线大厂的真实面试问题&#xff0c;不论是对你面试…

python语言网站_部署基于python语言的WEB发布环境

一、部署说明 1、python语言介绍 2、实验环境 实验机器&#xff1a;Vmware虚拟机 8核10G 网卡&#xff1a;桥接模式 系统&#xff1a;centos7.5 防火墙&#xff1a;关闭 Selinux&#xff1a;关闭 网段&#xff1a;192.168.10.0/25 WEB01&#xff1a;192.168.10.42 二、部署流程…

百度快照 xilinx fpga权威设计指南_快照在SEO优化中扮演什么角色?

Seo 优化会经常听到“快照”这个词&#xff0c;比如在交换链接时&#xff0c;你会听到快照的更新速度。快照在SEO优化中扮演着一个什么样的角色&#xff1f;大多数人都不知道。Snapshot 是搜索引擎存储在服务器中的备份网页&#xff0c;也是搜索引擎对网站的认知属性。在网站进…

python爬虫真假网址,python爬取福利网站图片完整代码,懂得人都懂

网址需要自己替换懂的人都懂512*2,主要学习简单的爬虫,别乱用,否则后果自负![Python] 纯文本查看 复制代码import requests,bs4,re,os,threadingclass MeiNvTu: def __init__(self): self.url_mainhttps://网址保密,不能乱发哈哈/pw/ self.urlf{self.url_main}thread.php?fid …

怎样把本地html传到网上,如何制作自己的网页链接?教你怎么把自己制作的网站发布到网上?...

如何制作自己的网页链接?教你怎么把自己制作的网站发布到网上?下面就来一起看看吧!确定网页架构。要确定我们要做的网页内容&#xff0c;必须确定一个框架形式。一般比较流行&#xff0c;大部分网页都是。①网站页眉网站导航栏内容版块。一般新浪的网页和部分浏览器都采用这种…

做10个网站用多大的服务器,【教你搭建服务器系列】(10)利用Docsify搭建个人笔记网站...

写文档的工具非常多&#xff0c;但是作为程序员&#xff0c;大部人还是偏爱Markdown的&#xff0c;有时需要写一份开发文档&#xff0c;以供自己或者他人查看&#xff0c;那如何把 Markdown 文件转换成文档呢&#xff1f;docsify 就可以做到了&#xff0c;docsify 可以直接加载…

更换php版本_PHP与SEO,应用curl及正则获取搜狗搜索相关关键词

PHP是世界上最好的语言&#xff0c;来吧&#xff0c;入坑吧&#xff0c;我们一起来拍(pai)黄(huang)片(pian)&#xff0c;Sorry&#xff0c;手抖&#xff0c;打错字了&#xff0c;当然是学习简写的&#xff0c;php啦&#xff01;PHP即“超文本预处理器”&#xff0c;是一种通用…

php开源代码推荐,非常好用的源代码网站推荐,用这些开源代码就够了

原标题&#xff1a;非常好用的源代码网站推荐&#xff0c;用这些开源代码就够了作为一个开发人员写代码是工作的日常&#xff0c;在这个万物互联的时代&#xff0c;有问题马上百度、谷歌、知乎一下等等&#xff0c;代码也不例外&#xff0c;借鉴别人的代码同样可以事半功倍。下…