First of all, make sure that Joomla! does indeed see the correct version being available: 9.9.9. If you see a different version, go to System, Update, Extensions and click on Check For Updates.
If you do see version 9.9.9 and get the error you mentioned, note that it comes from the file libraries/src/Http/Transport/CurlTransport.php line 177. This happens when the PHP cURL extension's curl_exec()
function returns an empty string, but it does not report any error message through curl_error()
.
Why could that be, when they can fetch the URL from the same server with wget? Well, there are a few differences.
First of all, have you accidentally set up a proxy on your site (System, Global Configuration, Server, Enable Outbound Proxy), or maybe need to set one up but have not? It's easy to check if you have set one up, and the host can tell you if you should set one up (and what the settings would be).
The second difference is the timeout. Since Joomla! runs on the web it sets a limited timeout during which the entire file needs to be downloaded. It is hard-coded to 20 seconds. When the host downloaded the file, did they time the time it took? If it took more than 20 seconds, there's your problem.
The third difference si taht Joomla! uses a special User-Agent string (Joomla
). While this is a valid User-Agent as per RFC 7231 §5.5.3, it is unusual in that it has no version part, i.e. it's NOT something like Joomla/1.2.3
. We DO allow that on OUR server, but transparent proxies might choke at this kind of valid but unusual User-Agent strings. It's rare, I've seen it though, so I ought to discuss it.
Finally, here's a bit of esoteric knowledge which might be the key. Joomla! sends the HTTP header Expect: header
for all requests, not just POST, but also GET. This might be very relevant indeed, because the purpose of this header is to tell the server to send an HTTP 100 Continue with an empty response body before continuing processing the request. However, this could lead to a proxy server seeing the HTTP 100 Continue response and return that as-is ignoring the rest of the request. This would indeed result in Joomla! receiving an empty message body, with an HTTP header that's NOT a redirection or error code. This would indeed cause the condition in line 170 to be true, and the condition in line 173 to be true as well, leading to the perplexing message from line 175. Of course the problem is not really in Joomla! itself, but the fact that a proxy cocked up and treated an HTTP 100 Continue as the final response to be forwarded to the client. If I recall correctly, Squid does that, even though it's not supposed to. We've seen that a few times with some third party remote storage services which rely on HTTP 1xx messages to convey status during file upload. This is not the kind of situation I would expect any host technician to troubleshoot themselves.
Nicholas K. Dionysopoulos
Lead Developer and Director
🇬🇷Greek: native 🇬🇧English: excellent 🇫🇷French: basic • 🕐 My time zone is Europe / Athens
Please keep in mind my timezone and cultural differences when reading my replies. Thank you!