首页 > 其他分享 >swoole使用CORS方式解决跨域

swoole使用CORS方式解决跨域

时间:2023-08-06 11:23:53浏览次数:27  
标签:origin 跨域 swoole request method access header CORS response

文档说明: 只记录关键地方; 文档创建时间:2023-08-06;
目标:使用CORS 方式解决跨域
备注: 常用到的功能记录一下,方便使用

<?php

use Swoole\Http\Request;
use Swoole\Http\Response;
use Swoole\Coroutine\Http\Server;
use function Swoole\Coroutine\run;

run(function () {
    $server = new Server('0.0.0.0', 9502, false);
    $server->handle('/', function (Request $request, Response $response) {

        $response->header('Content-Type', 'application/json; charset=utf-8');

        $response->header('access-control-allow-credentials', 'true');
        $response->header('access-control-allow-methods', 'GET,HEAD,POST,OPTIONS');
        $response->header('access-control-allow-headers', 'content-type,Authorization');
        $response->header('Access-Control-Allow-Private-Network', 'true');
        $origin = empty($request->header['origin']) ? '*' : $request->header['origin'];
        $response->header('access-control-allow-origin', $origin);
        $request_method = empty($request->header['request_method']) ? '' : $request->header['request_method'];
        if ($request_method == "OPTIONS") {
            $response->status(200);
            $response->end();
            return null;
        }

        list($controller, $action) = explode('/', trim($request->server['request_uri'], '/'));
        $result = [];
        try {
            $response->end(
                json_encode(
                    [
                        'code' => 200,
                        "msg" => 'success',
                        "data" => $result
                    ],
                    JSON_UNESCAPED_UNICODE
                )
            );
        } catch (\RuntimeException $e) {
            echo $e->getMessage();
            $response->end(json_encode(["code" => 500, 'msg' => 'system error' . $e->getMessage()]));
        }
    });

    $server->start();
});


标签:origin,跨域,swoole,request,method,access,header,CORS,response
From: https://www.cnblogs.com/jingjingxyk/p/17609180.html

相关文章

  • 视频融合平台视频汇聚平台LiteCVR路由器报跨域错误用户反馈案例分享
    LiteCVR视频融合云平台是基于云边端一体化架构为用户提供视频监控等相关功能服务的平台。具备很强的视频监控直播、录像、云存储、检索与回看、告警、集群、级联、共享等能力,为便于用户集成与调用、二次开发,平台向用户提供了丰富的API接口。我们近期正在整理以前到近期的用户反馈,今......
  • 解决跨域问题
    #允许跨域请求的域,*代表所有add_header'Access-Control-Allow-Origin'*; add_header'Access-Control-Allow-Credentials''true'; add_header'Access-Control-Allow-Methods'*; add_header'Access-Control-Allow-He......
  • swoole-crontab基于swoole的定时器程序,支持秒级处理
    Swoole-Crontab(基于Swoole扩展)https://github.com/osgochina/Donkey1.概述基于swoole的定时器程序,支持秒级处理.异步多进程处理。完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间单中心-多客户端模式,能够横向扩展web界面管理,增删改查任务,完整的权限控制.请使......
  • 跨域请求是什么
    跨域请求(Cross-OriginRequest),简称CORS,是指在Web开发中,当一个Web页面向不同源(域名、协议或端口)的服务器发起请求时,浏览器会遵循同源策略(Same-OriginPolicy)的限制,对这些跨源请求进行限制。同源策略是一种安全策略,它限制了来自不同源的脚本在浏览器中运行。一个源指的是由协议、主......
  • Asp.net Web Api .net6如何解决跨域的问题
    在Program.cs中添加如下代码//配置跨域builder.Services.AddCors(cor=>{varcors=builder.Configuration.GetSection("CorsUrls").GetChildren().Select(p=>p.Value);cor.AddPolicy("Cors",policy=>{policy.WithOrigins(c......
  • Ajax跨域问题
    什么是跨域问题?跨域问题来源于JavaScript的"同源策略",即只有协议+主机名+端口号(如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题。查看浏览器开发者工具Console报错:Fa......
  • swoole和workerman究竟分别是什么?
    众所周知,php是单进程的脚本运行模式。当然,php-fpm是多进程的,不过这个多进程,并不支持多并发。当并发高起来,多进程就显得那么的“菜鸡”。cpu的调用就会混乱不看,性能极差。(php-fpm(点击查看))如果想在代码里,多进程开发怎么办呢?假设有这么一个需求:查询多个数据库里订单表里的10w条数......
  • webpack项目本地dev环境正常,部署至微信字体或图片报cors
    由于webpack设置了高于xxx大小的文件不打包,又与小程序平台的域名不一致导致的问题。修改limit,将其调大,以base64方式直接嵌在页面中(字体文件也适用)......
  • Vue3下的axios跨域问题
    0、vue-cli版本vue-Vvue--version   1、根目录找vue.config.js,无则添加文件;然后添加节点: const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({transpileDependencies:true,lintOnSave:false,//关闭语法检查de......
  • 前后端分离跨域方案
    前言最近在写前后端分离项目的时候,遇到了前后端分离必须解决的跨域问题,而我起初只是在Controller层加上了注解@CrossOrigin(allowCredentials="true"),暂时解决了跨域问题。但是在开发验证码的时候,始终获取不到session中的验证码字符,获取到的验证码字符始终为null,调试之后发现放......