PHP 웹 앱을 개발했습니다. 사용자에게 한 번에 여러 문제를 업데이트 할 수있는 옵션을 제공하고 있습니다. 이 과정에서 때때로 사용자에게이 오류가 발생합니다. 아파치에서 URL 길이를 늘리는 방법이 있습니까?
답변
Apache에서 제한은 구성 가능한 값인 LimitRequestLine
. 더 긴 요청 URI를 지원하려면이 값을 기본값 인 8190보다 큰 값으로 변경하십시오. 값은 /etc/apache2/apache2.conf에 있습니다. 그렇지 않은 경우 LimitRequestLine 10000
아래에 새 줄 ( )을 추가합니다 AccessFileName .htaccess
.
그러나 실제로이 한도에 도달하면 처음 GET
부터 악용 하는 것일 수 있습니다 . POST
이러한 종류의 데이터를 전송 하는 데 사용해야 합니다. 특히 값을 업데이트하는 데 사용하고 있다는 것을 인정하기 때문에 특히 그렇습니다. 위의 링크를 확인하면 아파치가 “정상 조건에서는 기본값에서 값을 변경해서는 안됩니다.”라고 말하는 것을 알 수 있습니다.
답변
John의 답변에 따라 GET 요청을 POST 요청으로 변경했습니다. 서버 구성을 변경하지 않고도 작동합니다. 그래서 이것을 구현하는 방법을 찾아 보았습니다. 다음 페이지가 도움이되었습니다.
PHP를 사용한 jQuery Ajax POST 예제
(게시 된 데이터 삭제 설명 참고) 및
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
기본적으로 차이점은 GET 요청이 하나의 문자열에 url과 매개 변수를 포함하고 null을 전송한다는 것입니다.
http.open("GET", url+"?"+params, true);
http.send(null);
반면 POST 요청은 URL과 매개 변수를 별도의 명령으로 보냅니다.
http.open("POST", url, true);
http.send(params);
다음은 작동하는 예입니다.
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>';
?>
문제없이 12,000 자 이상을 보냈습니다.
답변
간단한 해결 방법이 있습니다.
URI stringdata
에 너무 긴 문자열이 있다고 가정합니다 . 서버의 한계에 따라 간단히 여러 부분으로 나눌 수 있습니다. 그런 다음 첫 번째 파일을 제출하십시오. 제 경우에는 파일을 작성하십시오. 그런 다음 이전에 추가 된 데이터에 추가 할 다음 항목을 제출합니다.
답변
JQuery에서 $ .getJSON ()을 사용한 후이 오류가 발생했습니다. 방금 게시하도록 변경했습니다.
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!");
});
답변
에서 발췌 RFC 2616 : Hypertext Transfer Protocol-HTTP / 1.1 :
그만큼 POST의 방법은 원본 서버가 Request-Line의 Request-URI가 식별하는 자원의 새로운 부속물로서 요구에 포함 된 엔터티를 접수 할 것을 요구하는 데 사용한다. POST는 균일 한 방법으로 다음 기능을 처리 할 수 있도록 설계되었습니다.
- 기존 자원의 주석
- 게시판, 뉴스 그룹, 메일 링리스트 또는 유사한 기사 그룹에 메시지 게시
- 양식 제출 결과와 같은 데이터 블록을 데이터 처리 프로세스에 제공 .
- 추가 작업을 통해 데이터베이스 확장.
답변
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)