Tôi đã phát triển một ứng dụng web PHP. Tôi đang đưa ra một tùy chọn để người dùng cập nhật nhiều vấn đề trên một lần. Khi làm như vậy, đôi khi người dùng gặp phải lỗi này. Có cách nào để tăng chiều dài của URL trong apache?Làm cách nào để giải quyết lỗi HTTP U14 "Yêu cầu URI quá dài"?
Trả lời
Dưới Apache, giới hạn là giá trị có thể định cấu hình, LimitRequestLine
. Thay đổi giá trị này thành giá trị lớn hơn giá trị mặc định là 8190 nếu bạn muốn hỗ trợ URI yêu cầu dài hơn. Giá trị nằm ở /etc/apache2/apache2.conf. Nếu không, hãy thêm một dòng mới (LimitRequestLine 10000
) theo AccessFileName .htaccess
.
Tuy nhiên, lưu ý rằng nếu bạn đang thực sự chạy vào giới hạn này, có thể bạn đang lạm dụng GET
để bắt đầu. Bạn nên sử dụng POST
để truyền loại dữ liệu này - đặc biệt vì bạn thậm chí thừa nhận rằng bạn đang sử dụng dữ liệu đó để cập nhật giá trị. Nếu bạn kiểm tra liên kết ở trên, bạn sẽ nhận thấy rằng Apache thậm chí còn nói "Trong điều kiện bình thường, giá trị không nên thay đổi từ mặc định."
Tôi đã thử sử dụng POST lúc đầu, nhưng đây là một hoạt động cập nhật trên cơ sở dữ liệu, và tôi đang làm mới trang gốc bằng cách sử dụng các giá trị ban đầu được đăng lên trang đó. – JPro
JPro: Việc cập nhật cơ sở dữ liệu ít nhiều là lý do chính xác bạn sẽ sử dụng 'POST'. Không có gì về việc sử dụng POST ngăn cản bạn điền vào cùng một biểu mẫu với các trường vừa được đăng, vì vậy tôi không chắc chắn ý của bạn là gì. –
@JPro: Kỹ thuật thông thường trong trường hợp đó là POST tới cùng một trang. Trình xử lý cho trang (có thể là mã giống nhau cho cả GET và POST) trước tiên kiểm tra các tham số POST, xử lý chúng nếu nó tìm thấy chúng, sau đó trả về trang với các giá trị thích hợp được điền vào, sẽ là giá trị cập nhật (nếu POST và bản cập nhật thành công) hoặc các giá trị ban đầu (nếu GET, hoặc nếu POST và bản cập nhật không thành công). Nếu bản cập nhật không thành công, bạn thậm chí có thể có thông báo lỗi cho mỗi trường mô tả lỗi. –
Một đoạn trích từ RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1
Các POST phương pháp được sử dụng để yêu cầu các máy chủ gốc chấp nhận thực thể khép kín trong yêu cầu như một cấp dưới mới của tài nguyên xác định bởi các yêu cầu-URI trong Dòng yêu cầu. POST được thiết kế để cho phép phương pháp thống nhất bao gồm các chức năng sau:
- Chú thích tài nguyên hiện có;
- Đăng thông báo lên bảng thông báo, nhóm tin tức, danh sách gửi thư, hoặc nhóm bài viết tương tự;
- Cung cấp khối dữ liệu, chẳng hạn như kết quả gửi biểu mẫu , đến quy trình xử lý dữ liệu;
- Mở rộng cơ sở dữ liệu thông qua thao tác chắp thêm.
Không thấy cách này trả lời câu hỏi ..? – default
Tôi có cách giải quyết đơn giản.
Giả sử URI của bạn có chuỗi stringdata
quá dài. Bạn có thể chỉ cần chia nhỏ nó thành một số phần phụ thuộc vào giới hạn của máy chủ của bạn. Sau đó gửi bản đầu tiên, trong trường hợp của tôi để viết một tập tin. Sau đó gửi các tệp tiếp theo để thêm vào dữ liệu đã thêm trước đó.
Bạn có thể cung cấp một ví dụ không? Tôi có thể xem cách bạn tách chuỗi khi người dùng tạo ... – endyourif
Giải pháp rất rẻ. Tốt hơn là xem xét lại vấn đề miền! –
Điều này không xứng đáng để có quá nhiều downvotes. Chắc chắn có những tình huống trong đó việc gửi nhiều yêu cầu có thể là giải pháp có thể chấp nhận được. Đúng, chất lượng của câu trả lời là một chút thấp, nhưng đó là để được mong đợi từ một người dùng là thương hiệu mới để SO. Hãy cho thấy một số tình yêu và cung cấp thông tin phản hồi thay vì chỉ downvoting người mới đến mà không "có được" SO chưa! – rinogo
Dựa trên câu trả lời của John, tôi đã thay đổi yêu cầu GET thành yêu cầu POST. Nó hoạt động, mà không cần phải thay đổi cấu hình máy chủ. Vì vậy, tôi đã đi tìm cách để thực hiện điều này.Các trang sau đều hữu ích:
jQuery Ajax POST example with PHP (Lưu ý Sanitize gửi dữ liệu nhận xét) và
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
Về cơ bản, sự khác biệt là các yêu cầu GET có url và các thông số trong một chuỗi và sau đó gửi null:
http.open("GET", url+"?"+params, true);
http.send(null);
trong khi yêu cầu POST gửi url và các thông số trong lệnh riêng biệt:
http.open("POST", url, true);
http.send(params);
Dưới đây là một ví dụ làm việc:
ajaxPOST.html:
<html>
<head>
<script type="text/javascript">
function ajaxPOSTTest() {
try {
// Opera 8.0+, Firefox, Safari
ajaxPOSTTestRequest = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
ajaxPOSTTestRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajaxPOSTTestRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
ajaxPOSTTestRequest.onreadystatechange = ajaxCalled_POSTTest;
var url = "ajaxPOST.php";
var params = "lorem=ipsum&name=binny";
ajaxPOSTTestRequest.open("POST", url, true);
ajaxPOSTTestRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxPOSTTestRequest.send(params);
}
//Create a function that will receive data sent from the server
function ajaxCalled_POSTTest() {
if (ajaxPOSTTestRequest.readyState == 4) {
document.getElementById("output").innerHTML = ajaxPOSTTestRequest.responseText;
}
}
</script>
</head>
<body>
<button onclick="ajaxPOSTTest()">ajax POST Test</button>
<div id="output"></div>
</body>
</html>
ajaxPOST.php:
<?php
$lorem=$_POST['lorem'];
print $lorem.'<br>';
?>
tôi chỉ gửi qua 12.000 ký tự mà không cần bất kỳ vấn đề.
Tôi gặp lỗi này sau khi sử dụng $ .getJSON() từ JQuery. Tôi vừa thay đổi thành bài đăng:
data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
.done(function (response) {
if (response instanceof Object)
var json = response;
else
var json = $.parseJSON(response);
// console.log(response);
// console.log(json);
jsonToDom(json);
if (json.reload != undefined && json.reload)
location.reload();
$("body").delay(1000).css("cursor", "default");
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
alert("Fehler!");
});
- 1. Lỗi HTTP 414. URL yêu cầu quá dài
- 2. Làm cách nào để giải quyết "ngoại lệ yêu cầu tối đa đã vượt quá"?
- 3. Yêu cầu không hợp lệ - Yêu cầu lỗi HTTP quá dài 400. Kích thước của tiêu đề yêu cầu quá dài
- 4. Cách đặt độ dài url được phép cho yêu cầu nginx (mã lỗi: 414, uri quá lớn)
- 5. Thực hành tốt nhất để giải quyết lỗi URI
- 6. Rails datatables ajax json 414 yêu cầu URI quá lớn
- 7. SSRS: Tại sao SKA-cookie tích hợp cho đến khi "Yêu cầu HTTP 400 - Yêu cầu quá dài" xảy ra?
- 8. Cách viết Yêu cầu HTTP
- 9. Làm cách nào để giải quyết lỗi 'Độ dài gói tin xấu' trong SSH.NET?
- 10. làm thế nào để tăng Apache 2 uri dài hạn
- 11. Cách giải quyết 400 lỗi yêu cầu không hợp lệ trong WCF
- 12. Doesnt http Keep-Alive giải quyết vấn đề mà giải quyết cuộc thăm dò dài?
- 13. Chrome bị treo khi URI quá dài
- 14. Google plus Yêu cầu vấn đề URI
- 15. làm cách nào để giải quyết brut.androlib.AndrolibException
- 16. Nhận "Yêu cầu chiều dài 411" sau yêu cầu PUT từ Máy khách HTTP
- 17. Làm thế nào để giải quyết lỗi Rack Lint?
- 18. Làm cách nào để ký yêu cầu HTTP có chứng chỉ X.509 trong Java?
- 19. Cách giải quyết lỗi LNK2019
- 20. Http Yêu cầu Vòng đời
- 21. Làm cách nào để tránh lỗi "độ dài biến số liệu quá dài" trong SQL Developer?
- 22. Cách giải quyết lỗi java.lang.NullPointerException?
- 23. Làm thế nào để gửi yêu cầu HTTP trong java?
- 24. Không tìm thấy tài nguyên HTTP nào khớp với yêu cầu URI
- 25. Yêu cầu DELETE HTTP
- 26. Làm cách nào để gỡ lỗi yêu cầu jQuery Ajax?
- 27. PHP Zend Framework - Làm thế nào để yêu cầu phân đoạn URI từ đối tượng yêu cầu?
- 28. Làm thế nào để giải quyết các thông điệp “Bị hủy bỏ” của Firebug khi có yêu cầu Ajax?
- 29. Làm thế nào để mô phỏng yêu cầu bài HTTP bằng cách sử dụng mô-đun Yêu cầu Python?
- 30. JAVA: http yêu cầu đăng
Nếu bạn gặp lỗi này trên máy chủ Windows và/hoặc trong ứng dụng IIS/ASP.NET, hãy xem câu hỏi: http://stackoverflow.com/q/23237538/ 12484 –