服务端访问GatewayClient跨域

朱xx

报错信息:Access to XMLHttpRequest at 'http://www.tp5.com/bind/index' from origin 'http://192.168.10.168:55151' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
本人小白一枚,看文档是 GatewayWorker发现有页面发起连接时,将对应连接的client_id发给网站页面这一步骤的时候,发起ajax请求之后出现跨域问题,
前端页面请求:

$.ajax({
  type: 'post',
  url: 'http://www.tp5.com/bind/index',
  data: {
        client_id:data['client_id']
  },
  dataType: 'json',
  success: function(data) {
        alert(data.state);
  }
})

bind.php:

<?php

namespace app\controller;

//加载GatewayClient。关于GatewayClient参见本页面底部介绍
require_once 'E:\phpstudy\phpstudy_pro\WWW\fgw\public\static\GatewayClient-master\Gateway.php';
// GatewayClient 3.0.0版本开始要使用命名空间
use GatewayClient\Gateway;
use think\Request;
// 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值(ip不能是0.0.0.0)

class Bind extends Base
{
    public function index(Request $request)
    {   header("Access-Control-Allow-Origin: *");
        $client_id=$request->post('client_id');
        Gateway::$registerAddress = '127.0.0.1:1236';
        // 假设用户已经登录,用户uid和群组id在session中
        $uid= 1;
        $group_id = 1;
        // client_id与uid绑定
        Gateway::bindUid($client_id, $uid);
        // 加入某个群组(可调用多次加入多个群组)
        Gateway::joinGroup($client_id, $group_id);
        echo json_encode(array('state'=>'success'));
    }
}

求大神求教

1782 3 0
3个回答

Tinywan

这是你TP5框架问题,请使用JSONP

  • 暂无评论
不败少龙

GatewayClient的服务启动了吗?

2548a

跨域也是访问你tp5的跨域,服务端与服务端是没有跨域的.
这是我以前tp5处理跨域的,注意,这个是根据请求地址,动态设置允许跨域的域名,所以是允许所有网站访问的.
//请求头的 Origin 值
$web = request()->header('Origin');

//跨域请求设置
header("Access-Control-Request-Method:GET,POST");
header("Access-Control-Allow-Credentials:true");
header("Access-Control-Allow-Origin:".$web);
if (request()->isOptions()) {
exit;
}

  • 朱xx 2022-02-18

    直接访问这个网址报错:stream_socket_client(): unable to connect to tcp://0.0.0.0: (Failed to parse address "0.0.0.0:"),是我没配置好么

  • 2548a 2022-02-18

    打印client_id 看看,可能传成了空

年代过于久远,无法发表回答
×
🔝