programing

HTTP 414 "Request URI too long" 오류를 해결하려면 어떻게 해야 하나요?

yoursource 2022. 12. 21. 23:11
반응형

HTTP 414 "Request URI too long" 오류를 해결하려면 어떻게 해야 하나요?

저는 PHP 웹 앱을 개발했습니다.사용자에게 여러 문제를 한 번에 업데이트할 수 있는 옵션을 제공하고 있습니다.이 경우 사용자에게 이 오류가 발생할 수 있습니다.apache에서 URL의 lenight를 높일 수 있는 방법이 있나요?

Apache에서 제한은 구성 가능한 값입니다. 더 긴 요청 URI를 지원하려면 이 값을 기본값인 8190보다 큰 값으로 변경하십시오.값은 /etc/apache2/apache2.conf에 있습니다.그렇지 않은 경우 새 행을 추가합니다.LimitRequestLine 10000)의 아래AccessFileName .htaccess.

단, 실제로 이 한계에 도달하고 있는 경우, 당신은 아마도 이 제한을 악용하고 있을 것입니다.GET우선은요.를 사용해 주세요.POST이런 종류의 데이터를 전송할 수 있습니다. 특히 값을 업데이트하기 위해 데이터를 사용하고 있다는 사실조차 인정하기 때문입니다.위의 링크를 체크하면 Apache가 "정상적인 상황에서는 값을 기본값에서 변경하지 않아야 합니다."라고 말하는 것을 알 수 있습니다.

존의 답변을 바탕으로 GET 요청을 POST 요청으로 변경했습니다.서버 설정을 변경하지 않아도 동작합니다.그래서 어떻게 구현해야 하는지 찾아봤습니다.다음 페이지가 도움이 되었습니다.

jQuery Ajax POST의 예와 PHP (투고된 데이터 삭제에 주의)

http://www.openjs.com/articles/ajax_xmlhttp_using_post.php

기본적으로는 GET 요구의 URL과 파라미터가1개의 문자열에 포함되어 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()을 사용한 후 이 오류가 발생하였습니다.방금 POST로 변경했습니다.

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는, 통일된 방법으로 다음의 기능을 커버할 수 있도록 설계되어 있습니다.

  • 기존 자원의 주석
  • 게시판, 뉴스그룹, 메일링 리스트 또는 이와 유사한 기사 그룹에 메시지 게시
  • 데이터 처리 프로세스에 양식 제출 결과 등의 데이터 블록 제공
  • 추가 작업을 통해 데이터베이스 확장

언급URL : https://stackoverflow.com/questions/2891574/how-do-i-resolve-a-http-414-request-uri-too-long-error

반응형