解决项目跨域问题。

php


  • 路由处理跨域
Route::group('test', function () {
    Route::get('/', 'api.test.Test/index');

})->allowCrossDomain([
    'Access-Control-Allow-Origin' => '*',
    'Access-Control-Allow-Credentials' => 'true',
    'Access-Control-Max-Age' => 1800,
    'Access-Control-Allow-Headers' => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With,XX-Device-Type,XX-Api-Version,XX-App-Version,XX-Token',
    'Access-Control-Allow-Methods' => 'GET,POST,OPTIONS',
])
;

  • 在入口文件index.php中设置
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:GET,POST,OPTIONS');    //表示只允许POST请求
header('Access-Control-Allow-Headers:Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With,XX-Device-Type,XX-Api-Version,XX-App-Version,XX-Token');

nginx


location / {
  add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With,XX-Device-Type,XX-Api-Version,XX-App-Version,XX-Token';
  if ($request_method = 'OPTIONS') {
        return 204;
    }
	if (!-e $request_filename){
		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
	}
}

vue 

在dev环境下可以使用代理来解决跨域问题

在vue.config.js文件中

devServer: {
  port: port,
  open: true, // 是否自动打开浏览器
  overlay: {
    warnings: false,
    errors: true
  },
  headers: {
    'Access-Control-Allow-Origin': '*', // 允许所有域名访问
    'Access-Control-Allow-Credentials': 'true' // 是否允许后续请求携带认证信息(cookies),该值只能是true,否则不返回
  },
  proxy: { // 代理
    '/dev': {
      target: '测试域名', // 后台端口地址
      changeOrigin: true, // 将基于名称的虚拟托管网站的选项,如果不配置,请求会报404  如果接口跨域,需要进行这个参数配置
      ws: true, // true / false,是否代理websockets
      secure: false, // 如果是https接口,需要配置这个参数
      pathRewrite: {
        '^/dev': '' // pathRewrite是使用proxy进行代理时,对请求路径进行重定向以匹配到正确的请求地址
      }
    },
    '/pro': {
      target: '正式域名', // 后台端口地址
      changeOrigin: true, // 将基于名称的虚拟托管网站的选项,如果不配置,请求会报404  如果接口跨域,需要进行这个参数配置
      ws: true, // true / false,是否代理websockets
      secure: false, // 如果是https接口,需要配置这个参数
      pathRewrite: {
        '^/pro': '' // pathRewrite是使用proxy进行代理时,对请求路径进行重定向以匹配到正确的请求地址
      }
    }
  }
}

然后在 .env.development 文件设置

VUE_APP_BASE_API='/dev'

特殊场景


  • 网站配置了https证书,但是并没有强制使用https访问
  • 采用前后端分离 php + vue
  • 谷歌浏览器 (访问过https://upwqy.com)
  • 在vue中配置的接口地址是http://upwqy.com

报错信息:

Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.

解决方案:

1、清理浏览器缓存,不让网站自动跳转到https

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值