Stworzyłem aplikację internetową w języku PHP. Daję użytkownikowi możliwość aktualizacji wielu problemów za jednym razem. Robiąc to, czasami użytkownik napotyka ten błąd. Czy istnieje sposób na zwiększenie długości adresu URL w Apache?
php
apache
http-status-codes
JPro
źródło
źródło
Odpowiedzi:
Pod Apache, limit jest wartością konfigurowalny
LimitRequestLine
. Zmień tę wartość na większą niż domyślna 8190, jeśli chcesz obsługiwać dłuższy identyfikator URI żądania. Wartość znajduje się w /etc/apache2/apache2.conf . Jeśli nie, dodaj nową linię (LimitRequestLine 10000
) podAccessFileName .htaccess
.Pamiętaj jednak, że jeśli faktycznie osiągasz ten limit, prawdopodobnie
GET
na początku nadużywasz . Powinieneś używaćPOST
do przesyłania tego rodzaju danych - zwłaszcza, że nawet przyznajesz, że używasz ich do aktualizowania wartości. Jeśli zaznaczysz powyższy link, zauważysz, że Apache mówi nawet „W normalnych warunkach wartość nie powinna być zmieniana z domyślnej”.źródło
POST
. Nic w używaniu POST nie wyklucza wypełnienia tego samego formularza polami, które właśnie zostały wysłane, więc nie jestem pewien, co przez to rozumiesz.LimitRequestLine
w swoim pliku httpd.conf, po prostu dodaj tę linię w dowolnym miejscu. Na przykład:LimitRequestLine 100000
Na podstawie odpowiedzi Johna zmieniłem żądanie GET na żądanie POST. Działa bez konieczności zmiany konfiguracji serwera. Zacząłem więc szukać, jak to zaimplementować. Pomocne były następujące strony:
Przykład jQuery Ajax POST z PHP (zwróć uwagę na uwagę dotyczącą czyszczenia opublikowanych danych) i
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Zasadniczo różnica polega na tym, że żądanie GET ma adres URL i parametry w jednym ciągu, a następnie wysyła wartość null:
podczas gdy żądanie POST wysyła adres URL i parametry w oddzielnych poleceniach:
Oto działający przykład:
ajaxPOST.html:
ajaxPOST.php:
Właśnie wysłałem ponad 12 000 znaków bez żadnych problemów.
źródło
Mam proste obejście.
Załóżmy, że Twój identyfikator URI zawiera
stringdata
zbyt długi ciąg . Możesz po prostu podzielić go na kilka części w zależności od ograniczeń serwera. Następnie prześlij pierwszy, w moim przypadku do napisania pliku. Następnie prześlij kolejne, aby dołączyć do wcześniej dodanych danych.źródło
Otrzymałem ten błąd po użyciu $ .getJSON () z JQuery. Właśnie zmieniłem post:
źródło
Fragment dokumentu RFC 2616: Hypertext Transfer Protocol - HTTP / 1.1 :
źródło