驻足生活 2024-07-09 19:24 采纳率: 22.2%
浏览 174
已结题

Thinkphp5.0 接口跨域问题!

本地测试都好好的,postman也能跑通。部署到线上就提示跨域错误。用的Thinkphp5.0版本。
前端H5和接口不在同一台服务器,出现跨域问题。整了一下午,网上出现的都试了。还是不行。一直出现CORS error问题。请大佬请教。

  • 写回答

8条回答 默认 最新

  • 阿里嘎多学长 2024-07-09 19:24
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你好,针对你提到的Thinkphp5.0版本接口跨域问题,这里有一些可能的解决方案:

    1. 全局跨域设置:可以在Thinkphp的入口文件public/index.php中添加以下三行代码来允许跨域请求:

      header('Access-Control-Allow-Origin:*');
      header('Access-Control-Allow-Methods:GET, POST, OPTIONS, DELETE');
      header('Access-Control-Allow-Headers:x-requested-with,content-type,token,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding');
      

      这样设置后,一般情况下应该可以解决跨域问题 [^3^]。

    2. 中间件处理:如果希望以更优雅的方式处理跨域问题,可以在./application/index/tags.php中找到app_init,并注册一个解决跨域的类。然后在./application/index/behavior/目录下新建一个cors.php文件,将需要添加的跨域相关的header设置放入该类的方法中 [^4^]。

    3. 路由分组设置:对于需要支持跨域请求的路由或分组,可以使用路由分组的方式进行设置。例如:

      Route::get('new/:id', 'News/read')
      ->ext('html')
      ->allowCrossDomain();
      

      这样设置后,系统会自动处理跨域请求中的OPTIONS请求,并添加默认的跨域相关的header信息 [^5^]。

    4. Nginx服务器配置:如果你使用的是Nginx服务器,可能还需要在Nginx的配置文件中添加相应的跨域设置。例如,在location /块中添加:

      if ($request_method = 'OPTIONS') {
          add_header 'Access-Control-Allow-Origin' '*';
          add_header 'Access-Control-Allow-Headers' 'token';
          add_header 'Content-Length' 0;
          return 204;
      }
      

      这样可以处理OPTIONS预检请求,并允许自定义的请求头参数 [^3^]。

    5. 注意请求类型:在使用前端框架如uniapp进行网络请求时,注意不要将请求类型设置为application/json,而应该使用application/x-www-form-urlencoded或其他合适的请求类型,并在请求header中包含所有自定义的参数 [^3^]。

    希望这些解决方案能够帮助你解决跨域问题。如果还有其他问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月9日
  • 创建了问题 7月9日