Panjang maksimum permintaan GET HTTP


488

Berapa panjang maksimum permintaan GET HTTP ?

Apakah ada kesalahan respons yang ditetapkan bahwa server dapat / harus kembali jika menerima permintaan GET yang melebihi panjang ini?

Ini dalam konteks API layanan web, meskipun menarik untuk melihat batas peramban juga.



7
@KillianDS Sama sekali tidak ada hubungannya dengan panjang maksimum URL. Pertanyaannya adalah tentang panjang maksimum permintaan yang dikirim ke URL.
Marquis of Lorne

2
@ EJP isi 'data' dari GET tidak lebih dari URI.
KillianDS

@JimAho komentar Anda juga merupakan duplikat dari komentar pertama .....
Jun711

Jawaban:


464

Batasnya tergantung pada server dan klien yang digunakan (dan jika berlaku, juga proxy yang digunakan server atau klien).

Sebagian besar server web memiliki batas 8192 byte (8 KB), yang biasanya dapat dikonfigurasi di suatu tempat di konfigurasi server. Mengenai masalah sisi klien, spesifikasi HTTP 1.1 bahkan memperingatkan tentang hal ini. Berikut kutipan dari bab 3.2.1 :

Catatan: Server harus berhati-hati tergantung pada panjang URI di atas 255 byte, karena beberapa klien yang lebih tua atau implementasi proxy mungkin tidak mendukung panjang ini dengan benar.

Batas di Internet Explorer dan Safari adalah sekitar 2 KB, di Opera sekitar 4 KB dan di Firefox sekitar 8 KB. Dengan demikian kita dapat berasumsi bahwa 8 KB adalah panjang maksimum yang mungkin dan bahwa 2 KB adalah panjang yang lebih terjangkau untuk diandalkan di sisi server dan bahwa 255 byte adalah panjang teraman untuk mengasumsikan bahwa seluruh URL akan masuk.

Jika batas terlampaui di browser atau server, sebagian besar hanya akan memotong karakter di luar batas tanpa peringatan. Namun beberapa server dapat mengirim kesalahan HTTP 414 . Jika Anda perlu mengirim data besar, lebih baik gunakan POST daripada GET. Batasnya jauh lebih tinggi, tetapi lebih tergantung pada server yang digunakan daripada klien. Biasanya hingga sekitar 2 GB diizinkan oleh server web rata-rata. Ini juga dapat dikonfigurasi di suatu tempat di pengaturan server. Server rata-rata akan menampilkan kesalahan / pengecualian khusus server ketika batas POST terlampaui, biasanya sebagai kesalahan HTTP 500.


6
Anda menjawab pertanyaan dalam batasan browser. Apakah Anda tahu jika ada perbedaan antara GET dan POST (dalam hal ukuran permintaan bermasalah) jika, katakanlah, HttpClient digunakan untuk berinteraksi dengan server REST?
aioobe

3
Tentu, POST menggunakan tubuh untuk mengirim data. Spesifikasi HTTP tidak menetapkan batas ukuran tertentu untuk posting.
Ignacio A. Poletti

1
Sangat diizinkan oleh spesifikasi Http untuk memasukkan isi dalam permintaan GET dan DELETE. Saya sudah mengujinya di Jawa, dan berhasil. Sayangnya di sini lagi beberapa proksi dapat memotong seluruh tubuh.
Nicolas Zozol

12
Metode Get and Post memiliki arti yang sangat spesifik, jadi menggunakan POST untuk melakukan GET sama dengan menggunakan palu untuk memecahkan telur.
nohros

18
@nohros Itu benar secara ideal, tetapi GET juga memiliki batasan yang POST / PUT tidak. Misalnya, Anda ingin melakukan kueri yang sangat panjang yang melibatkan banyak id; jika Anda memilih ratusan id, yang dapat melanggar batas ukuran URL yang diizinkan, sedangkan menempatkan kueri itu dalam POST dapat menghindari itu, meskipun itu tidak masuk akal secara konseptual. Secara pribadi, saya berharap HTTP mendapatkan permintaan GET untuk memiliki tubuh seperti PUT dan POST.
devios1

143

Anda mengajukan dua pertanyaan terpisah di sini:

Berapa panjang maksimum permintaan GET HTTP?

Seperti yang telah disebutkan, HTTP itu sendiri tidak memaksakan batasan hard-coded pada panjang permintaan; tetapi browser memiliki batas mulai dari 2 KB - 8 KB (255 byte jika kami menghitung browser yang sangat lama ).

Apakah ada kesalahan respons yang ditetapkan bahwa server dapat / harus kembali jika menerima permintaan GET melebihi panjang ini?

Itu yang tidak ada yang menjawab.

HTTP 1.1 mendefinisikan kode status 414 Request-URI Too Longuntuk kasus-kasus di mana batas yang ditentukan server tercapai. Anda dapat melihat detail lebih lanjut tentang RFC 2616 .

Untuk batasan yang ditentukan klien, tidak ada gunanya server mengembalikan sesuatu, karena server tidak akan menerima permintaan sama sekali.


23

Batas browser adalah:

Browser           Address bar    document.location
                                 or anchor tag
---------------------------------------------------
Chrome                32779           >64k
Android                8192           >64k
Firefox                >64k           >64k
Safari                 >64k           >64k
Internet Explorer 11   2047           5120
Edge 16                2047          10240

Ingin lebih? Lihat pertanyaan ini di Stack Overflow .



3

Secara teknis, saya telah melihat HTTP GET akan memiliki masalah jika panjang URL melampaui 2000 karakter. Dalam hal ini, lebih baik menggunakan HTTP POST atau membagi URL.


2

Seperti yang telah disebutkan, HTTP itu sendiri tidak memaksakan batasan hard-kode pada panjang permintaan; tetapi browser memiliki batasan mulai dari 2048 karakter yang diizinkan dalam metode GET.


-6

DAPATKAN PERMINTAAN menggunakan browser Chrome

Iya. Tidak ada batasan pada permintaan GET.

Saya dapat mengirim ~ 4000 karakter sebagai bagian dari string kueri menggunakan browser Chrome dan perintah curl.

Saya menggunakan server Tomcat 8.x yang telah mengembalikan respons 200 OK yang diharapkan.

Ini adalah tangkapan layar dari permintaan HTTP Google Chrome (menyembunyikan titik akhir yang saya coba karena alasan keamanan):

TANGGAPAN

DAPATKAN menggunakan browser Chrome

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.