首页 > 其他分享 >基于laravel cors 跨站解决

基于laravel cors 跨站解决

时间:2024-11-25 09:22:35浏览次数:5  
标签:laravel Control 跨站 index Access header add Allow cors

终于解决了困扰了两天的问题:

需求:

基于vue3的前端项目以及基于laravel的后端项目。将他们分别配置为127.0.0.1 www.ggzx.com  以及 127.0.0.1 www.zx.com。

再在nginx上配置相应的项目,如下:

前端项目:

 后端项目:

 问题:

由于两个项目的前后端是不同的源,因此在浏览器中会有跨域的问题。

解决办法需要两个步骤:①服务端需要在Nginx配置中为你的代理服务添加正确的CORS头部设置 ②服务器设置中间件允许固定的访问源进行访问

如下:

server {
    listen 8000;
    server_name www.zx.com;

    root /Users/hoge/Desktop/code/php/zxAdmin/public;
    index index.php index.html index.htm;

    # 处理 API 路由的 CORS 配置
  
    location / {
        proxy_pass http://www.ggzx.com;
        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_set_header X-Forwarded-Proto $scheme;
 
        # 添加CORS头部
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token';
        
        # 预检请求响应,nginx会发送两个请求,其中先发送预处理请求,当允许访问的时候再发送真正的请求
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 处理 PHP 文件
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 禁止访问 .ht 文件
    location ~ /\.ht {
        deny all;
    }

    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

}

②设置中间件文件

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class HandleCors
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        $response = $next($request);
        // 设置跨域
        $response->headers->set('Access-Control-Allow-Origin', '*');
        $response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
        $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With, Origin, X-CSRF-Token');
 
        return $response;
    }
}

在接口调用前使用中间建

 

标签:laravel,Control,跨站,index,Access,header,add,Allow,cors
From: https://www.cnblogs.com/yansunda/p/18566901

相关文章

  • WEB攻防-XSS跨站&SVG&PDF&Flash&MXSS&UXSS&配合上传&文件添加脚本
    #SVG-XSSSVG(ScalableVectorGraphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。<sv......
  • Thinkphp-Laravel音乐播放器系统的设计与实现 7z140
    目录课题介绍具体实现截图课程项目技术路线代码流程执行分析thinkphp框架解析开发技术介绍PHP核心代码部分展示详细视频演示源码获取课题介绍首先,要掌握有关系统的基本理论,如PHP语言、MySQL数据库等,并对其进行全面的分析。为了给系统打下坚实的技术基础,本系统采用......
  • Thinkphp-Laravel毕业生学历证明系统
    目录课题介绍具体实现截图课程项目技术路线代码流程执行分析thinkphp框架解析开发技术介绍PHP核心代码部分展示详细视频演示源码获取课题介绍快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进......
  • 038_Thinkphp/Laravel校园Flea Market校内购物商城售货平台
    目录具体实现截图技术栈和环境说明框架介绍开发技术介绍代码流程执行分析PHP核心代码部分展示其他项目推荐详细视频演示源码获取具体实现截图技术栈和环境说明开发语言:php后端框架:Thinkphp/Laravel前端框架:vue.js服务器:apache数据库:mysql运行环境:phpst......
  • 037_Thinkphp/Laravel在线租房房屋租赁管理系统
    目录具体实现截图技术栈和环境说明框架介绍开发技术介绍代码流程执行分析PHP核心代码部分展示其他项目推荐详细视频演示源码获取具体实现截图技术栈和环境说明开发语言:php后端框架:Thinkphp/Laravel前端框架:vue.js服务器:apache数据库:mysql运行环境:phpstud......
  • DAY53WEB 攻防-XSS 跨站&SVG&PDF&Flash&MXSS&UXSS&配合上传&文件添加脚本
    知识点:1、XSS跨站-MXSS&UXSS2、XSS跨站-SVG制作&配合上传3、XSS跨站-PDF制作&配合上传4、XSS跨站-SWF制作&反编译&上传XSS分类:https://www.fooying.com/the-art-of-xss-1-introduction/(失效了)MXSS现在基本上见不到UXSS:UniversalCross-SiteScripting针对浏览器的漏......
  • 使用CORS解决跨域问题
    如果发起请求所在主机(也称为域)和处理请求所在主机的协议、域名和端口号这三者中有任何一项不同,那么发出的请求就叫跨域请求。出于网络安全性方面的考虑,跨域请求会被限制,SpringBoot后端不能直接处理跨域请求,为了解决这一问题,可以在后端项目中引入CORS解决方案。在CORS(Cros......
  • CORS代表什么以及它解决什么问题?
    CORS代表跨域资源共享(Cross-OriginResourceSharing),它是一种Web浏览器的安全机制,用于控制一个网页中的应用程序从哪些源(即域)可以加载资源。CORS的主要目的是解决跨域问题,即在不同源之间进行资源请求和数据传输时的安全限制。在现代Web开发中,由于浏览器的同源策略,前端和后端通......
  • 如何设置 CORS允许跨域
    设置CORS(跨源资源共享,Cross-OriginResourceSharing)允许跨域访问是Web开发中常见的需求之一。CORS是一种安全机制,由浏览器实施,用于限制一个源(协议+域名+端口)上的网页脚本与另一个源上的资源交互的能力。下面是如何在服务器端设置CORS以允许跨域访问的一些常见方法。1.Nod......
  • 微信小程序的北京旅游古建筑文化景点打卡平台Thinkphp/Laravel
    目录技术栈和环境说明项目介绍具体实现截图文件解析微信开发者工具HBuilderX+uniapp开发技术简介性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取技术栈和环境说明Laravel以其优雅的语法和快速开发能力著称,简化了......