用nginx做代理即可,前端连接nginx,nginx的localtion的时候匹配的是域名之后的路劲,然后更换的也是域名部分,后面的路径直接拼接
当然也可写正则表达式重写,改变这种拼接的规则
以下的例子是重写之后的
rewrite ^.+apis/?(.*)$ /$1 break;
这里,我们利用Nginx的反向代理功能解决跨域问题,至于,什么是Nginx的反向代理,大家就请自行百度或者谷歌吧。
nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。
具体解决方案如下:
在nginx.conf中编辑
server {
location / {
root html;
index index.html index.htm;
//允许cros跨域访问
add_header 'Access-Control-Allow-Origin' '*';
}
//自定义本地路径
location /apis {
rewrite ^.+apis/?(.*)$ /$1 break;
include uwsgi_params;
proxy_pass http://www.lyz.com;
}
}
然后我把项目部署在nginx的html根目录下,在ajax调用时设置url从http://www.lyz.com/apistest/test变为/apis/apistest/test然后成功解决。
比如我之前请求的Ajax如下:
$.ajax({
type:"post",
dataType: "json",
data:{'parameter':JSON.stringify(data)},
url:"http://www.lyz.com/apistest/test",
async: flag,
beforeSend: function (xhr) {
xhr.setRequestHeader("Content-Type", submitType.Content_Type);
xhr.setRequestHeader("user-id", submitType.user_id);
xhr.setRequestHeader("role-type", submitType.role_type);
xhr.setRequestHeader("access-token", getAccessToken().token);
},
success:function(result, status, xhr){
}
,error:function (e) {
layerMsg('请求失败,请稍后再试')
}
});
修改成如下的请求即可:
$.ajax({
type:"post",
dataType: "json",
data:{'parameter':JSON.stringify(data)},
url:"/apis/apistest/test",
async: flag,
beforeSend: function (xhr) {
xhr.setRequestHeader("Content-Type", submitType.Content_Type);
xhr.setRequestHeader("user-id", submitType.user_id);
xhr.setRequestHeader("role-type", submitType.role_type);
xhr.setRequestHeader("access-token", getAccessToken().token);
},
success:function(result, status, xhr){
}
,error:function (e) {
layerMsg('请求失败,请稍后再试')
}
});
至此,问题解决。
例如:
前后分离的时候,第一个login页面是在前端,其他的页面也是在前端,此时拦截的是前端发起接口的路径特征
对于网上源码需要改造成前后分离的,此时nginx的跨域处理不要误以为直接访问nginx到源码首页就可-----这种只是代理分发---负载均衡
而是需要拦截前端发起请求接口的特征
前端项目源码:
export default {
dev: {
host: '/api/v3',
shareHost: '/share.html'
},
production: {
// host: '/api/v1',
host: '/api/v3',
shareHost: '/share.html'
}
}
配置:
upstream apachephp {
server 192.168.202.183:8080; #Apache-----后端项目源码地址
}
server {
listen 8089;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {---------------一般用精确的项目特征路劲
proxy_pass http://apachephp;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location /api {---------------一般用精确的项目特征路劲,域名部分替换
proxy_pass http://apachephp;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
原文链接:https://blog.csdn.net/l1028386804/article/details/79488328
相关推荐
在这个"**C#web项目前后端分离跨域解决[Demo]**"中,我们主要探讨的是如何在这样的环境中解决跨域问题。 跨域是Web应用程序中一个常见的安全限制,由于浏览器的同源策略,前端请求通常只能发送到同一域名下,这限制...
接下来,我们要修改Nginx的配置以解决跨域问题。有两个关键部分需要关注,即`http`块和`server`块。在`http`块中,你可以设置全局的跨域策略,例如: ```nginx http { ... # 允许所有来源访问 add_header Access...
最近自己做了一个前后端分离项目,前端采用HBuilderX开发,后端采用IDEA开发,在本地开发也跨域,部署到云服务器也跨域,下面介绍两种解决方案。 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定...
最近在做一个后台管理系统,前端是用时下火热的vue.js,后台是基于springboot...我面临的第一个问题是跨域,浏览器控制台直接报CORS,以我多年开发经验,我果断在后台配置了跨域配置,代码如下: @Configuration publi
然而,有时我们需要在不同的域之间进行数据交换,例如API调用或共享cookies,这时就需要解决跨域问题。本文将深入探讨JavaScript插件如何解决双向跨域问题,并通过具体的插件实例——jcrossdomain,来阐述其实现方式...
在Vue项目中,我们可以使用代理来解决跨域问题。我们可以在项目中创建一个vue.config.js文件,并在其中配置代理。下面是一个简单的示例代码: ``` module.exports = { devServer: { proxy: { '/api':{ target: '...
4. **后端代理**:在开发阶段,由于Vue CLI提供了一个本地服务器,可以配置代理来解决跨域问题。在`vue.config.js`中添加以下代码: ```javascript module.exports = { devServer: { proxy: { '/api': { ...
综上所述,无论是使用注解还是过滤器的方式,CORS都是解决跨域问题的有效手段。选择哪种方式取决于具体的应用场景和技术栈。在实际开发中,开发者可以根据项目需求和团队偏好来选择合适的实现方式。
本文将详细讲解如何在Spring Boot应用中解决跨域session共享的问题,并探讨防止SQL注入的相关策略。 首先,让我们理解什么是跨域。跨域是指由于浏览器的同源策略限制,不同域名、协议或端口之间的页面无法直接通信...
为了解决跨域问题,我们需要在我们的登录拦截器中添加一个 OPTIONS 请求的处理。我们可以在拦截器中添加一个 `OPTIONS` 方法来处理这个请求。 ```java @Override public boolean preHandle(HttpServletRequest ...
Nginx可以配置为将前端和后端的请求路由到相应的服务器,从而隐藏真实的服务器地址,同时也解决了跨域问题。在Nginx配置文件中,你可以添加一个新的location块来代理后端服务。例如: ```nginx location / { ...
针对上述问题,我们可以通过多种方式来解决跨域问题,下面将详细介绍这些解决方案。 ##### 1. 修改浏览器(不推荐) 这种方法涉及到改变浏览器的行为,例如通过添加启动参数`--disable-web-security`来禁用同源...
解决跨域问题通常采用CORS(Cross-Origin Resource Sharing)机制。 在Spring Boot中,可以通过自定义过滤器CORSFilter来处理跨域请求。在给出的示例代码中,创建了一个名为CORSFilter的过滤器,该过滤器拦截所有...
这种方式适用于前后端分离的架构,前端通过与同一源的代理服务器通信,实现跨域。 5. **Window.postMessage** `window.postMessage` API允许来自不同源的窗口进行通信,包括弹出窗口、框架、嵌入内容等。两个窗口...
在当前的Web开发中,前后端分离架构变得越来越流行。这种架构意味着前端使用一种技术栈(如...通过这些配置,可以有效解决前端Vue.js应用在访问后端资源时遇到的跨域问题,从而使得前后端分离的开发模式得以顺利进行。
解决跨域问题需要在后端设置允许跨域的Header信息,以便浏览器可以接受跨域请求。 在SpringBoot中,可以通过Filter机制来设置跨域的Header信息。下面是一个示例代码: ```java package com.rtpksps.kss.config; ...
JSONP(JSON with Padding)是另一种解决跨域的古老方法,尤其适用于不支持CORS的老旧浏览器。JSONP的基本原理是利用`<script>`标签不受同源策略限制的特性,通过动态创建`<script>`标签来请求数据。服务器返回的...
本项目基于Spring Boot实现了后端接口,并结合Vue.js进行前端展示,同时利用axios处理跨域问题,提供了一个完整的前后端分离实践示例。 1. **Spring Boot**: Spring Boot是Spring框架的一个简化版,它简化了...
为了解决跨域问题,我们可以使用CORS(Cross-Origin Resource Sharing)机制。CORS是一个W3C标准,允许服务器声明哪些源可以访问其资源。通过在后端配置CORS,我们可以允许指定的域名或端口访问我们的资源。 在...