-
Hello everoyne,
I think it might be my first time posting here. I have the following issue with a project on a server of my client.
We have a Hetzner virtual server, latest Ubuntu version they have. Cloudron has been installed as well as a Cloudron LAMP for a Website based on Kirby CMS. They website allows users to embed links from different platforms, one of them Tiktok. Everything is working fine, except:
- Tiktok embeds are not being autoplayed on macOS Safari nor any iOS browser
- Not only they dont autoplay, but they cannot be played even with user interaction
I have run many tests and came to the conclusion that is has to do with Cloudron. I have checked the following:
-
I have tested on Hetzner and netcup virtual servers, both showing the same problem.
-
tested on a Hetzer server in the US as well, in case it was due to the location the website is running from (Germany). US server had the same problem
-
the problem does not ocurr on regular shared hosting servers, it has been only on the virtual servers
-
i then created a new virtual server, this time without Cloudron but only LAMP directly (Hetzner has this option as a ready app). Here the autoplay worked! meaning it has to be something in Cloudron. Sadly my server knowledge is poor (thats why I love using Cloudron since makes things a lot easier) so my direct LAMP installation had some other problems, since I didnt really know what settings I need and what shouod be installed etc etc. It took me a while to get the website running, since many php extensions had to be installed, but again, i got it running and without the autoplay issue.
Has anyone any idea what could be the difference between a virtual server running with Cloudron (LAMP app installed) and regular hosting servers or a virtual server with a direct LAMP on it for that matter?
Any help is really greatly appreciated!!!!
-
@squareclouds said in Cloudron+LAMP: Tiktok Embed problems:
Has anyone any idea what could be the difference between a virtual server running with Cloudron (LAMP app installed) and regular hosting servers or a virtual server with a direct LAMP on it for that matter?
Hi! Nice to hear that you use Kirby! This sounds a bit odd to me as well.
Some follow-up questions:
- Did you check the PHP error logs and browser console?
- Which Kirby version do you use?
- Does the issue happen with any browser?
-
@squareclouds welcome to cloudron forum
what PHP version are you using in the Cloudron LAMP and in the virtual server LAMP ?
-
thanks for the first replies
console says:
Blocked a frame with origin "https://www.tiktok.com" from accessing a frame with origin "https://dev.mydomain.de". Protocols, domains, and ports must match.sorry but where can I check the php error logs?
kirby version:
3.8.3php version (of the actual server we are using):
8.1.17as i wrote before, it only happens on macOS Safari and all iOS browsers (safari, chrome, firefox, edge, all of them )
cloudron + lamp php:
8.1.17virtual server LAMP:
ooof, i tested so many things and sadly i deleted all test servers again. but definitely something smaller than 8.2, since the kirby version i am using does not support 8.2 (or at least some plugin does not), so using 8.2 throws an error.hosting server:
i can tell you that the regular shared hosting server uses 8.1.18. again, here everything works. do you think the 8.1.17 / 8.1.18 difference could be it? i have a felling it has to do more with security settings or something, something that cloudron in the background sets a bit differently than regular hosting packageslocalhost:
my MAMP uses 8.1.13, here everything works as well -
@squareclouds Most likely, this is not related to PHP version. But related to CSP or CORS configuration.
-
CSP (Content Security Policy) is set via a header and tells the browser what content is allowed/trusted by your web page. By default, Cloudron does not set any CSP header but you can override it . If your app has a CSP, then it can disable "embedding" of content . For example, youtube/tiktok videos etc can be prevented from being embedded.
-
CORS (Cross origin resource sharing) is set via headers. This tells the browser if ajax calls are allowed from another origin. Cloudron does not set CORS headers either. This means that "random.site.com" cannot call your "dev.mydomain.de" . This is good (tm).
OK, so, with this in mind and trying to understand your error:
Blocked a frame with origin "https://www.tiktok.com" from accessing a frame with origin "https://dev.mydomain.de".
This tells me that the tiktok frame is trying to access your domain. Is this understanding correct? Why is tiktok calling your domain? Maybe it's trying to report back something to the parent domain ? Is this just some random tiktok video? -
-
-
thank you for the reply. yes i think this is going in the right direction. i already tried the CSP, just to see what happens i tried something like default-src * and scripts and other things, but it didnt work, so i think its CORS. that i didnt know how to test with different settings. do you have any suggestions of what i could test?
regarding your question, well i guess Im not sure why it tries to access or what or if that indeed is the case. all other browsers (mainly non apple) aren not having problems or the regular hosting servers even with everything thats apple, as i mentioned, so it is a bit confusing.
-
@squareclouds do you have a barebones html to help reproduce the issue on the LAMP app? So, just embedding a tiktok video in a simple html page and hosting it on the LAMP app will reproduce the issue?
-
@girish good point! i just tried it, yes, it does not work. this link i can share with you
-
@squareclouds seems to work for me here:
Do you maybe have some privacy plugins installed in your browser which might interfere here?
-
@squareclouds loads for me too on Chrome/Linux.
On firefox, only some text shows up. The console says some 'content blocking is enabled' . If i click on the shield icon on the URL bar and disable "Enhanced tracking protection" , it loads for me on Firefox/Linux also.
But I think you said this is only an issue on iphone/mac is it?
-
thank you both for your tests. yes, again, the behaviour is:
- Tiktok embeds are not being autoplayed on macOS Safari nor any iOS browser
- Not only they dont autoplay, but they cannot be played even with user interaction
all other browsers on macOS work fine. BUT dont forget that all of the above works fine on other servers! so it cannot be a browser setting, if the embeds of the same website project work on the other non-cloudron servers it is a bit hard to follow, i know.
-
@squareclouds I don't have access to any apple devices to test and debug this on my own.
-
@nebulon luckily it is a feature that is partially critical. we dont know how many users will be embeding tiktoks, and from those embeds only the ones visited by users on iOS or safari on mac will have the issue. but i am pretty sure its gonna be some very small setting or adjustment somewhere to fix this, we must only figure out where
can one of you point me in the direction of how to set a CORS setting on cloudron? i have no clue about such things but if i play around a bit i might find a solution by chance.
-
@squareclouds CORS related settings would need to be adjusted in the remote server, not the one hosting it. So I don't think this is viable here nor is likely the main issue.
For CSP you can overwrite the headers at https://docs.cloudron.io/apps/#custom-csp or also via meta tags in the html directly. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
-
@girish said in Cloudron+LAMP: Tiktok Embed problems:
@squareclouds Most likely, this is not related to PHP version. But related to CSP or CORS configuration.
CSP (Content Security Policy) is set via a header and tells the browser what content is allowed/trusted by your web page. By default, Cloudron does not set any CSP header but you can override it . If your app has a CSP, then it can disable "embedding" of content . For example, youtube/tiktok videos etc can be prevented from being embedded.
CORS (Cross origin resource sharing) is set via headers. This tells the browser if ajax calls are allowed from another origin. Cloudron does not set CORS headers either. This means that "random.site.com" cannot call your "dev.mydomain.de" . This is good (tm).
OK, so, with this in mind and trying to understand your error: Blocked a frame with origin "https://www.tiktok.com" from accessing a frame with origin "https://dev.mydomain.de". This tells me that the tiktok frame is trying to access your domain. Is this understanding correct? Why is tiktok calling your domain? Maybe it's trying to report back something to the parent domain ? Is this just some random tiktok video?
but it seems that there is a call from tiktok to our server, which would mean that our server needs the cors, or not?
-
@squareclouds I don't think tiktok will call your server, anyways there is no service besides apache running to call into.
-
@nebulon random guess - TikTok is doing some Postmessage to parent frame which is getting blocked. This is what I inferred from the original error that @squareclouds posted.
I might get access to a Mac later today, i will try. Very intriguing.
-
@squareclouds I tried the site on Mac Ventura with Firefox, Chrome and Safari. It all loads fine.
Also loads fine on an iphone with safari/chrome . So, I am yet to see this fail anywhere.
Did you get reports from all iphone/mac users that the site does not load?
-
@girish you can play the embed? because it loads, yes, but the playing is the problem. it does not autoplay nor you can play it by clicking it, it has no interaction
we are still not live, so we are only a few people, but yes, its not only on my macs and iphones (i have an old iphone and old mac as well, so me alone have tested on 4 devices and then the lead designer as well).