Menangani Permintaan Tidak Valid dan Dukungan SSL yang Tidak Didukung di Laravel

| | | Artikel, Laravel
Menangani Permintaan Tidak Valid dan Dukungan SSL yang Tidak Didukung di Laravel

Pesan “Invalid request (Unsupported SSL request)” cukup sering muncul di Laravel, terutama saat aplikasi dideploy di hosting atau server di belakang load balancer.

Sebagian besar kasus bukan karena SSL-mu rusak, melainkan karena Laravel membaca koneksi sebagai HTTP padahal sebenarnya HTTPS — jadi token yang dihasilkan tidak cocok.

Artikel ini menjelaskan penyebab sebenarnya dan solusi yang paling umum digunakan: URL::forceScheme('https'), plus cara mengatasi setelah di belakang proxy.

Apa Penyebab Error Ini?

Error ini biasanya muncul di tiga situasi:

  1. Aplikasi di belakang proxy/load balancer — server web menangani HTTPS, tapi Laravel melihat HTTP dari sisi proxy, sehingga merusak pengecekan.
  2. Token CSRF tidak cocok — karena protokol yang terdeteksi salah, token yang dihasilkan berbeda dari yang dikirim.
  3. Callback payment gateway (Paypal, dll.) mengirim request ke URL HTTPS, tapi Laravel tidak mengenali HTTPS dari sertifikat di belakang proxy.

Jadi masalahnya lebih sering di deteksi protokol, bukan di konfigurasi SSL itu sendiri.

Mengenal Pesan Kesalahan “Invalid Request Unsupported SSL Request” di Laravel

Pesan kesalahan “Invalid Request Unsupported SSL Request” muncul ketika Laravel menerima permintaan HTTP yang tidak valid atau ketika ada masalah dengan dukungan SSL di konfigurasi aplikasi Laravel.

Pesan kesalahan ini biasanya muncul karena beberapa penyebab berikut:

  1. Permintaan HTTP tidak valid: Pesan kesalahan ini dapat muncul jika ada kesalahan dalam pembentukan permintaan HTTP, seperti header yang salah atau format permintaan yang tidak valid.
  2. Konfigurasi SSL yang tidak tepat: Jika pengguna mencoba mengakses aplikasi Laravel melalui protokol HTTPS dan ada masalah dengan konfigurasi SSL di server, maka pesan kesalahan ini dapat muncul.

Sekarang, mari kita lihat beberapa solusi untuk menangani pesan kesalahan “Invalid Request Unsupported SSL Request” di Laravel.

Mengatasi Permintaan yang Tidak Valid di Laravel

Mengubah URL ke HTTPS

  1. Periksa apakah Anda mengakses aplikasi Laravel melalui protokol HTTPS. Jika ya, pastikan URL yang digunakan adalah dengan awalan “https://” bukan “http://”.
  2. Jika Anda menggunakan protokol HTTP, pertimbangkan untuk mengubahnya menjadi HTTPS untuk mengaktifkan dukungan SSL. Untuk melakukan ini, Anda perlu mengkonfigurasi server web Anda dengan sertifikat SSL yang valid.

Memeriksa Header Permintaan

  1. Periksa apakah header permintaan yang Anda kirimkan valid. Pastikan header permintaan seperti “Host” dan “User-Agent” terkirim dengan benar.
  2. Jika menggunakan AJAX, pastikan header “X-Requested-With” diatur dengan benar.

Memeriksa Validitas Permintaan

  1. Pastikan bahwa struktur permintaan yang dikirim ke server adalah valid. Periksa format permintaan seperti metode HTTP, parameter, dan payload data yang terkirim.
  2. Jika Anda menggunakan formulir,

pastikan formulir dikonfigurasi dengan benar dan mengirimkan data dengan metode yang sesuai (GET atau POST).

Solusi 1: Paksa HTTPS dengan forceScheme

Cara paling umum dan cepat adalah memaksa Laravel menganggap semua URL sebagai HTTPS lewat AppServiceProvider:

// app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\URL;

public function boot(): void
{
    URL::forceScheme('https');
}

Setelah ini, url() dan route() selalu menghasilkan URL https://, dan token yang dibangkitkan konsisten. Ini biasanya menyelesaikan error di hosting (cPanel, Shared Hosting) maupun server sendiri.

Solusi 2: Atur Trusted Proxies

Jika aplikasi di belakang load balancer atau proxy (nginx, Cloudflare), Laravel perlu tahu proxy mana yang dipercaya. Atur di middleware TrustProxies:

// app/Http/Middleware/TrustProxies.php
protected $proxies = '*';  // percayai semua proxy (sesuaikan bila perlu)
protected $headers =
    Request::HEADER_X_FORWARDED_FOR |
    Request::HEADER_X_FORWARDED_HOST |
    Request::HEADER_X_FORWARDED_PORT |
    Request::HEADER_X_FORWARDED_PROTO;

Tanpa ini, Laravel tidak akan melihat header X-Forwarded-Proto: https dari proxy, sehingga mengira koneksi HTTP. Ini penyebab paling umum di deployment dengan nginx reverse proxy.

Solusi 3: Arahkan HTTP ke HTTPS di Server

Pastikan permintaan http:// diarahkan ke https://. Contoh untuk nginx:

server {
    listen 80;
    server_name contoh.com;
    return 301 https://$host$request_uri;
}

Untuk Apache, tambahkan aturan di .htaccess atau konfigurasi vhost agar semua request HTTP dialihkan ke HTTPS.

Menggunakan secure_url dan Middleware HTTPS

Sebagai pengaman tambahan, gunakan secure_url() untuk menghasilkan URL HTTPS:

$url = secure_url('path/to/route');

Dan daftarkan middleware HTTPS untuk memaksa rute tertentu selalu HTTPS:

// app/Http/Kernel.php
protected $routeMiddleware = [
    'https' => \Illuminate\Http\Middleware\RequireHttps::class,
];

// routes/web.php
Route::group(['middleware' => 'https'], function () {
    // rute yang memerlukan HTTPS
});

FAQ

Apa penyebab error Invalid request (Unsupported SSL request) di Laravel?

Paling sering karena Laravel mendeteksi koneksi sebagai HTTP padahal sebenarnya HTTPS, biasanya saat aplikasi di belakang proxy atau load balancer. Akibatnya token CSRF dihitung berbeda dan muncul pesan ini.

Bagaimana cara mengatasi Unsupported SSL request?

Tambahkan URL::forceScheme('https') di AppServiceProvider::boot(). Jika di belakang proxy, atur juga TrustProxies agar header X-Forwarded-Proto terbaca.

Apakah forceScheme mempengaruhi environment development?

forceScheme('https') akan membuat semua URL menjadi https:// termasuk di localhost. Untuk development, biasanya kamu mengarahkan ke serve dengan php artisan serve yang tetap http:// — jadi aktifkan forceScheme hanya di production, atau gunakan pengecekan env('APP_ENV').

Kenapa bisa tetap error meski sertifikat SSL valid?

Karena masalahnya bukan sertifikat, melainkan deteksi protokol. Laravel perlu tahu bahwa koneksi dari proxy itu HTTPS lewat X-Forwarded-Proto. Tanpa konfigurasi TrustProxies, error tetap muncul walau SSL benar.

Kesimpulan

Error “Invalid request (Unsupported SSL request)” di Laravel hampir selalu soal Laravel tidak mengenali HTTPS, bukan SSL yang rusak. Mulai dengan URL::forceScheme('https') untuk memaksa protokol, lalu atur TrustProxies jika aplikasi di belakang proxy.

Saya sendiri sering bertemu masalah ini persis setelah pindah ke server dengan SSL di proxy, dan kedua langkah di atas selalu menyelesaikannya. Mulai dari yang paling sederhana dulu, lalu tambahkan yang lain sesuai kebutuhan.

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.