ASP 형식의 TEXTAREA와 같이 POST 데이터의 일부로 IIS 서버에 대량의 XML을 보낼 때 예상치 못한 결과가 나타날 수 있습니다. 서버에서 데이터를 처리할 때 데이터 처리 방식으로 인해 오류가 발생할 수 있습니다. 그 이유는 서버에 데이터를 다시 제출할 때 POST 필드에 (데이터) 크기 제한이 있기 때문입니다. 이것의 목적은 침입자가 서비스 거부(DoS) 공격으로 서버에 엄청난 양의 데이터를 보내는 것을 방지하는 것입니다.
이 제한은 또한 귀하의 능력을 제한합니다. 하지만 이 문제를 해결할 수 있는 방법이 있습니다. FORM 제출을 통한 데이터 전송에만 국한되지 않는 경우 xmlhttp 개체(Microsoft XML 세트의 DOM 개체)를 사용하여 필요한 XML을 보낼 수 있습니다.
var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP"); oXMLHTTP.open("POST", "xml_handler.asp", false); oXMLHTTP.send(xml_to_send);
Request 개체는 IStream 인터페이스에서는 DOMDocument 개체의 load() 메서드를 사용하여 제출할 XML을 로드할 수 있습니다.
Dim oDOM Set oDOM = Server.CreateObject("MSXML2.DOMDocument") oDOM.load Request
FORM을 통해서만 제출하도록 제한되어 있는 경우 이 제한을 극복할 수 있습니다. 여러 개의 TEXTAREA 또는 INPUT을 제출하면 서버가 FORM 데이터를 수신하자마자 처음 두 개를 다시 어셈블할 수 있습니다.
var MAXLEN = 90000; var oForm = document.createElement("FORM"); oFORM.method = "POST"; oFORM.action = "xml_handler.asp"; oFORM = document.body.appendChild(oFORM); var s = document.someForm.txtXML.value; if (s.length > MAXLEN) { while (s.length > MAXLEN) { var o = document.createElement("INPUT"); o.type = "hidden"; o.name = "txtXML"; o.value = s.substr(0, MAXLEN); oFORM.appendChild(o); s = s.substr(MAXLEN); } var o = document.createElement("INPUT"); o.type = "hidden"; o.name = "txtXML"; o.value = s.substr(0, MAXLEN); oFORM.appendChild(o); } else { var o = document.createElement("INPUT"); o.type = "hidden"; o.name = "txtXML"; o.value = s; oFORM.appendChild(o); }
이 코드는 데이터를 제출하고 BODY 요소 내에 배치합니다. 그런 다음 서버에 제출할 XML의 길이를 확인합니다. 이 XML은 someForm 내부의 txtXML이라는 TEXTAREA에 있습니다.
XML이 90,000자 MAXLEN보다 큰 경우 이 코드는 여러 개의 숨겨진 INPUT 요소를 생성하고 값 속성을 90,000자 XML 데이터로 설정하거나 데이터를 여러 부분으로 분할하려면 XML 끝에 값을 추가하세요. 이 XML의 크기가 MAXLEN보다 작으면 이 코드는 INPUT을 생성하고 이에 따라 값을 설정합니다. 그런 다음 이 데이터는 처리를 위해 서버에 제출됩니다.
새 양식의 각 필드에 동일한 이름(txtXML)을 할당한 것을 눈치채셨을 것입니다. 이렇게 하면 제출될 수 있는 다른 데이터와 XML 데이터를 분리하는 데 도움이 되며 XML 데이터를 쉽게 재구성할 수 있습니다. 데이터를 재구성할 때 필드의 데이터를 연결하는 간단한 루프가 필요합니다.
Dim str, fld For Each fld In Request.Form("txtXML") str = str & fld Next
각 FORM 요소에 대해 필드 세트가 생성되었으므로 필드를 반복할 수 있습니다. 같은 이름으로. 클라이언트 측에서 올바른 순서로 FORM 요소를 생성하는 한 필드가 탐색되는 순서에 대해 걱정할 필요가 없습니다. 이는 FORM의appendChild() 메소드를 통해 쉽게 수행할 수 있습니다.
클라이언트에서는 데이터가 왼쪽에서 오른쪽, 위에서 아래로 제출되므로 FORM 요소 끝에 INPUT 요소를 추가하면 항상 동일한 순서로 데이터가 수신됩니다.
클라이언트 시스템에서 서버로 대용량 Excel 데이터를 전송하는 등 대용량 데이터 솔루션을 구현하려는 경우 FORM 제출을 사용할지, 아니면 데이터를 논리적으로 전송할지 다시 고려해야 합니다. 더 작은 부분으로. 파일 유형 INPUT 요소를 사용할 수 없으므로 가장 창의적인 솔루션은 데이터를 로컬에서 XML로 변환한 다음 XML 데이터를 서버에 제출하는 것입니다. 그러면 데이터는 추가 처리가 필요할 때까지 서버에 저장됩니다.
물론 이 문제를 처리하는 더 좋은 방법이 있을 수 있습니다. 하지만 시간이 많지 않을 때 필요한 것은 빠르고 사용 가능한 솔루션뿐입니다.
위 내용은 XMLHTTP를 사용하여 매우 긴 XML 형식의 데이터를 보내는 내용입니다. 자세한 내용은 PHP 중국어 사이트(www.php.cn)를 참고해주세요!