Cors 仅在移动浏览器上

Posted

技术标签:

【中文标题】Cors 仅在移动浏览器上【英文标题】:Cors only on mobile browsers 【发布时间】:2018-04-08 19:34:29 【问题描述】:

我已将 CORS 标头添加到服务器上的响应对象中,并且所有桌面浏览器都允许 ajax 调用完美返回。但是,我没有看到任何移动浏览器上的数据,结果证明它是一个 CORS 错误

任何想法为什么会发生这种情况?

客户代码:

getCharacter(completionFunc)
        $.ajax("http://somewhere.com/api/character/0", 
            //dataType: 'jsonp',
            success: function(data) 
                completionFunc(data);
            
        );
    

服务器头代码(laravel):

 public function handle($request, Closure $next)
    
        return $next($request)
    ->header("Access-Control-Allow-Origin","*")
    ->header("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS");
    

在将标头添加到服务器之前,我在桌面浏览器上遇到了 cors 错误(如预期的那样)。添加它们修复了它,但不是在移动设备上。在处理 CORS 时,chrome 移动/桌面之间是否有任何显着差异? (我也在 ajax 调用上尝试了 jsonp dataType,但没有用)

【问题讨论】:

你是假设还是你测试过有CORS错误?你能用移动设备做测试吗? “我是网络开发新手,所以我还不知道如何调试移动网络浏览器 - 然后输入我突出显示的部分进入谷歌...***.com/q/5794984/1427878 对于每个对此感到不安的人,我确实根据 Boratzan 对其进行了调试,并且确实该错误与 cors 相关。 您知道为什么会这样吗?仅在 android chrome 上遇到相同的问题。 如果你使用端口转发 => 你需要为你的前端和你的后端 api 做端口转发。这可能不是 cors 问题 => 可能只是您没有为前端或后端 url 完成端口转发 【参考方案1】:

由于您无法调试,我们现在不知道实际问题是什么,因此这里是在您的手机上调试的说明。

1.在您的计算机上安装adb(如果未安装)。

通常与 Android SDK 一起安装

2。在手机上启用 USB 调试

要在您的设备上使用 ADB,您必须启用 USB 调试。打开手机的设置,然后选择关于。点击带有内部版本号的字段七次。您应该会收到一条消息,说明您现在是一名开发人员。

返回设置页面,您应该会在底部看到一个名为“开发者选项”的新选项。现在启用“USB调试”。

现在,当您将手机连接到计算机时,您会看到一个名为“允许 USB 调试?”的弹出窗口。勾选“始终允许来自此计算机”并确认。

3.测试并运行 ADB

在命令提示符窗口 (CMD) 中运行以下命令:

adb devices

您应该会在列表中看到您的设备。

4.打开 chrome 检查选项卡

现在,如果前面的所有步骤都已完成并且您成功运行 ADB,请在桌面上打开 chrome 并转到以下 URL:

chrome://inspect

你应该看到你的手机和浏览器在上面运行,点击所需的实例/网站,开发者控制台就会打开。

祝你好运 :) 从现在开始,您也可以在手机上进行调试了。也许您会在那里找到错误,如果您无法解决它,请将实际错误放在这里,以便我们进一步帮助您。

【讨论】:

我做到了,这毕竟是实际错误。猜想没有表现出撒谎的信心,而这确实是预期的错误奖励我-1。不错。 你能分享一些代码让我看看出了什么问题吗?现在只是猜测.. 已添加,但恐怕它太简单了,无法提供实际帮助:/

以上是关于Cors 仅在移动浏览器上的主要内容,如果未能解决你的问题,请参考以下文章

Blazor 仅在移动设备上显示组件

仅在 iOS 移动 Safari 中上传图像时出现错误的 CORS 失败

网站仅在移动设备上加载不一致

仅在移动屏幕尺寸上使用slick.js

仅在大多数移动浏览器出现重大延迟后才会更改图像

SSL 证书不受信任 - 仅在移动设备上 [关闭]