Remove Brotli support detection from TldRegistryService
Eliminated Brotli compression support checks and related logging from TldRegistryService. All HTTP clients now explicitly use gzip and deflate encodings only, with cURL options set to disable automatic content decoding and restrict accepted encodings. This simplifies the code and avoids Brotli-related compatibility issues.
This commit is contained in:
@@ -14,74 +14,12 @@ class TldRegistryService
|
|||||||
private TldRegistry $tldModel;
|
private TldRegistry $tldModel;
|
||||||
private TldImportLog $importLogModel;
|
private TldImportLog $importLogModel;
|
||||||
private Logger $logger;
|
private Logger $logger;
|
||||||
private static ?bool $brotliSupported = null;
|
|
||||||
|
|
||||||
// IANA URLs
|
// IANA URLs
|
||||||
private const IANA_RDAP_URL = 'https://data.iana.org/rdap/dns.json';
|
private const IANA_RDAP_URL = 'https://data.iana.org/rdap/dns.json';
|
||||||
private const IANA_TLD_BASE_URL = 'https://www.iana.org/domains/root/db/';
|
private const IANA_TLD_BASE_URL = 'https://www.iana.org/domains/root/db/';
|
||||||
private const IANA_TLD_LIST_URL = 'https://data.iana.org/TLD/tlds-alpha-by-domain.txt';
|
private const IANA_TLD_LIST_URL = 'https://data.iana.org/TLD/tlds-alpha-by-domain.txt';
|
||||||
private const IANA_RDAP_DOMAIN_URL = 'https://rdap.iana.org/domain/';
|
private const IANA_RDAP_DOMAIN_URL = 'https://rdap.iana.org/domain/';
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if Brotli compression is supported by the system
|
|
||||||
*/
|
|
||||||
private static function isBrotliSupported(): bool
|
|
||||||
{
|
|
||||||
static $supported = null;
|
|
||||||
if ($supported !== null) return $supported;
|
|
||||||
|
|
||||||
$logger = new Logger('tld_import');
|
|
||||||
$detectionResults = [];
|
|
||||||
|
|
||||||
// Check for brotli extension
|
|
||||||
$brotliExtension = extension_loaded('brotli');
|
|
||||||
$detectionResults['brotli_extension'] = $brotliExtension;
|
|
||||||
|
|
||||||
// Check for brotli function
|
|
||||||
$brotliFunction = function_exists('brotli_compress');
|
|
||||||
$detectionResults['brotli_function'] = $brotliFunction;
|
|
||||||
|
|
||||||
if ($brotliExtension || $brotliFunction) {
|
|
||||||
$logger->info("Brotli support detected", $detectionResults);
|
|
||||||
return $supported = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check curl support for brotli
|
|
||||||
try {
|
|
||||||
$curlInfo = curl_version();
|
|
||||||
$curlVersion = $curlInfo['version'] ?? 'unknown';
|
|
||||||
$curlEncoding = $curlInfo['encoding'] ?? 'unknown';
|
|
||||||
$curlFeatures = $curlInfo['features'] ?? 0;
|
|
||||||
|
|
||||||
$detectionResults['curl_version'] = $curlVersion;
|
|
||||||
$detectionResults['curl_encoding'] = $curlEncoding;
|
|
||||||
$detectionResults['curl_features_raw'] = $curlFeatures;
|
|
||||||
|
|
||||||
// Method 1: Check encoding field
|
|
||||||
$encodingSupportsBrotli = stripos($curlEncoding, 'br') !== false;
|
|
||||||
$detectionResults['curl_encoding_check'] = $encodingSupportsBrotli;
|
|
||||||
|
|
||||||
// Method 2: Check features bitmask (CURL_VERSION_BROTLI = 8388608)
|
|
||||||
$featuresSupportsBrotli = ($curlFeatures & 8388608) !== 0;
|
|
||||||
$detectionResults['curl_features_check'] = $featuresSupportsBrotli;
|
|
||||||
|
|
||||||
// Method 3: Check if curl version is recent enough (brotli support added in 7.57.0)
|
|
||||||
$versionSupportsBrotli = version_compare($curlVersion, '7.57.0', '>=');
|
|
||||||
$detectionResults['curl_version_check'] = $versionSupportsBrotli;
|
|
||||||
|
|
||||||
if ($encodingSupportsBrotli || $featuresSupportsBrotli || $versionSupportsBrotli) {
|
|
||||||
$detectionResults['final_decision'] = 'supported';
|
|
||||||
$logger->info("Brotli support detected via cURL", $detectionResults);
|
|
||||||
return $supported = true;
|
|
||||||
}
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
$detectionResults['curl_error'] = $e->getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
$logger->info("Brotli support NOT detected - using gzip/deflate fallback", $detectionResults);
|
|
||||||
return $supported = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log HTTP request and response details for debugging
|
* Log HTTP request and response details for debugging
|
||||||
*/
|
*/
|
||||||
@@ -100,7 +38,6 @@ class TldRegistryService
|
|||||||
'response_content_type' => $contentType,
|
'response_content_type' => $contentType,
|
||||||
'response_content_length' => $contentLength,
|
'response_content_length' => $contentLength,
|
||||||
'request_time_seconds' => round($requestTime, 3),
|
'request_time_seconds' => round($requestTime, 3),
|
||||||
'brotli_supported' => self::isBrotliSupported(),
|
|
||||||
'compression_used' => $contentEncoding !== 'none' ? $contentEncoding : 'none'
|
'compression_used' => $contentEncoding !== 'none' ? $contentEncoding : 'none'
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -113,21 +50,24 @@ class TldRegistryService
|
|||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$acceptEncoding = self::isBrotliSupported() ? 'gzip, deflate, br' : 'gzip, deflate';
|
$acceptEncoding = 'gzip, deflate';
|
||||||
|
|
||||||
$this->tldModel = new TldRegistry();
|
$this->tldModel = new TldRegistry();
|
||||||
$this->importLogModel = new TldImportLog();
|
$this->importLogModel = new TldImportLog();
|
||||||
$this->logger = new Logger('tld_import');
|
$this->logger = new Logger('tld_import');
|
||||||
|
|
||||||
$this->logger->debug("Creating main HTTP client", [
|
$this->logger->debug("Creating main HTTP client", [
|
||||||
'accept_encoding' => $acceptEncoding,
|
'accept_encoding' => $acceptEncoding
|
||||||
'brotli_supported' => self::isBrotliSupported()
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->httpClient = new Client([
|
$this->httpClient = new Client([
|
||||||
'timeout' => 15, // Reduced for faster processing
|
'timeout' => 15, // Reduced for faster processing
|
||||||
'connect_timeout' => 5, // Reduced for faster processing
|
'connect_timeout' => 5, // Reduced for faster processing
|
||||||
'verify' => true, // Enable SSL verification
|
'verify' => true, // Enable SSL verification
|
||||||
|
'curl' => [
|
||||||
|
CURLOPT_HTTP_CONTENT_DECODING => 0, // Disable automatic content decoding
|
||||||
|
CURLOPT_ACCEPT_ENCODING => 'gzip,deflate' // Explicitly set supported encodings
|
||||||
|
],
|
||||||
'allow_redirects' => [
|
'allow_redirects' => [
|
||||||
'max' => 5,
|
'max' => 5,
|
||||||
'strict' => false,
|
'strict' => false,
|
||||||
@@ -166,17 +106,20 @@ class TldRegistryService
|
|||||||
*/
|
*/
|
||||||
private function getJsonClient(): Client
|
private function getJsonClient(): Client
|
||||||
{
|
{
|
||||||
$acceptEncoding = self::isBrotliSupported() ? 'gzip, deflate, br' : 'gzip, deflate';
|
$acceptEncoding = 'gzip, deflate';
|
||||||
|
|
||||||
$this->logger->debug("Creating JSON HTTP client", [
|
$this->logger->debug("Creating JSON HTTP client", [
|
||||||
'accept_encoding' => $acceptEncoding,
|
'accept_encoding' => $acceptEncoding
|
||||||
'brotli_supported' => self::isBrotliSupported()
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return new Client([
|
return new Client([
|
||||||
'timeout' => 15, // Reduced for faster processing
|
'timeout' => 15, // Reduced for faster processing
|
||||||
'connect_timeout' => 5, // Reduced for faster processing
|
'connect_timeout' => 5, // Reduced for faster processing
|
||||||
'verify' => true,
|
'verify' => true,
|
||||||
|
'curl' => [
|
||||||
|
CURLOPT_HTTP_CONTENT_DECODING => 0, // Disable automatic content decoding
|
||||||
|
CURLOPT_ACCEPT_ENCODING => 'gzip,deflate' // Explicitly set supported encodings
|
||||||
|
],
|
||||||
'allow_redirects' => [
|
'allow_redirects' => [
|
||||||
'max' => 3,
|
'max' => 3,
|
||||||
'strict' => true,
|
'strict' => true,
|
||||||
@@ -216,17 +159,20 @@ class TldRegistryService
|
|||||||
*/
|
*/
|
||||||
private function getHtmlClient(): Client
|
private function getHtmlClient(): Client
|
||||||
{
|
{
|
||||||
$acceptEncoding = self::isBrotliSupported() ? 'gzip, deflate, br' : 'gzip, deflate';
|
$acceptEncoding = 'gzip, deflate';
|
||||||
|
|
||||||
$this->logger->debug("Creating HTML HTTP client", [
|
$this->logger->debug("Creating HTML HTTP client", [
|
||||||
'accept_encoding' => $acceptEncoding,
|
'accept_encoding' => $acceptEncoding
|
||||||
'brotli_supported' => self::isBrotliSupported()
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return new Client([
|
return new Client([
|
||||||
'timeout' => 8, // Further reduced for faster processing
|
'timeout' => 8, // Further reduced for faster processing
|
||||||
'connect_timeout' => 3, // Further reduced for faster processing
|
'connect_timeout' => 3, // Further reduced for faster processing
|
||||||
'verify' => true,
|
'verify' => true,
|
||||||
|
'curl' => [
|
||||||
|
CURLOPT_HTTP_CONTENT_DECODING => 0, // Disable automatic content decoding
|
||||||
|
CURLOPT_ACCEPT_ENCODING => 'gzip,deflate' // Explicitly set supported encodings
|
||||||
|
],
|
||||||
'allow_redirects' => [
|
'allow_redirects' => [
|
||||||
'max' => 3, // Reduced redirects
|
'max' => 3, // Reduced redirects
|
||||||
'strict' => false,
|
'strict' => false,
|
||||||
|
|||||||
Reference in New Issue
Block a user