【发布时间】:2022-02-09 06:02:29
【问题描述】:
我有一个使用 Capacitor 制作的 android/iOS 应用程序,它提供一个 html 文件,向我的服务器发出 XHR 请求。
它在 iOS 模拟器/设备上运行良好,但在 android 模拟器上运行良好。我收到以下错误
File: http://example.com/ - Line 0 - Msg: Access to XMLHttpRequest at 'https://example.com/api/users/me?_=1644242401129' from origin 'http://example.com' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我确实有一个Access-Control-Allow-Origin 设置。证明它可以在 iOS 上运行,允许以下来源:
capacitor://example.com
但在 android 上,看起来使用的原点是 http://example.com,正如错误所说。
我确实在我的标题“Access-Control-Allow-Origin”上允许了这个 url,但它仍然失败并给我同样的错误。
$allowed_domains = [
'https://example.com',
'http://example.com',
'capacitor://example.com', //iOS working fine
];
if (in_array($_SERVER['HTTP_ORIGIN'], $allowed_domains)) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Credentials: true');
}
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: origin, content-type, accept, API');
header('content-type: application/json; charset=utf-8');
http_response_code(200);
exit;
}
【问题讨论】:
标签: android ios cors xmlhttprequest capacitor