पोस्ट अनुरोध का आकार सीमा क्या है?


268

क्षमा करें यदि यह डुप्लिकेट है, तो मुझे लगता है कि यह होगा, लेकिन कुछ भी नहीं मिल सकता है।

मेरे पास एक फ्लेक्स एप्लिकेशन है जिसे मैं IE के माध्यम से वापस php / mysql सर्वर पर डेटा पोस्ट कर रहा हूं। मैं अभी तक किसी भी समस्या में नहीं आया हूं, लेकिन समय से पहले यह जानने से मुझे निराशा और काम का एक गुच्छा बच सकता है। क्या http के माध्यम से डेटा पोस्ट करने की कोई आकार सीमा है?

यह लेख कहता है: http://www.netlobo.com/ie_form_submit.html

यह चर्चा हाँ कहती है: http://bytes.com/topic/php/answers/538226-what-maximum-limit-use-post-method

और यह सब आगे और पीछे चला जाता है जो मैं ऑनलाइन पा रहा हूं। तो कृपया व्यक्तिगत रूप से परीक्षण / सत्यापित संख्याओं के जवाबों को सीमित करें।

मैं एक XML स्ट्रिंग को वापस पोस्ट करना चाहता हूं जो काफी बड़ी हो सकती है (5mb तक कह सकते हैं)।

अगर इससे कोई फर्क पड़ता है: ब्राउज़र हमेशा IE होगा (हमारे उत्पाद को इसकी आवश्यकता है), पोस्ट से आ रहा है और फ्लेक्स में httpService, वेब सर्वर php है, DB mySql है।


जवाबों:


203

यह एक सर्वर कॉन्फ़िगरेशन पर निर्भर करता है। यदि आप लिनक्स या इसी तरह के तहत PHP के साथ काम कर रहे हैं, तो आप इसे .htaccess कॉन्फ़िगरेशन फ़ाइल का उपयोग करके नियंत्रित कर सकते हैं, जैसे:

#set max post size
php_value post_max_size 20M

और, हां, मैं व्यक्तिगत रूप से इस तथ्य पर ध्यान दे सकता हूं कि यह काम करता है :)

यदि आप IIS का उपयोग कर रहे हैं, तो मुझे नहीं पता कि आप इस विशेष मूल्य को कैसे सेट करेंगे।


3
यह कहां post_max_sizeपर स्थापित है? मैं php के लिए नया हूँ और मैं इसे हमारे कोड बेस में कहीं भी नहीं पा सकता (स्वप्न देखने वाले सभी प्रक्रिया का उपयोग करके)। मैं हमारे sys व्यवस्थापक पूछना चाहता हूँ, लेकिन वे मतलब है। :-P
उल्टास्पर्शी

10
तो क्या आप इस मान को जो भी आकार निर्धारित कर सकते हैं? क्या प्रोटोकॉल की कोई सीमा नहीं है? क्या आप इसे 999999999999999999999M पर सेट कर सकते हैं?
पैरा

8
@ पारा - इस पोस्ट में कहा गया है कि आप इसे अपनी मशीन की मेमोरी जितना ऊंचा सेट कर सकते हैं। यह भी कहता है कि डिफ़ॉल्ट 2 एमबी है।
RustyTheBoyRobot

37
चूंकि यह PHP है, मैं इसे किसी भी मूल्य को स्वीकार करने की उम्मीद कर रहा था और सिर्फ SEGFAULT जब यह आपकी मशीन की सीमा तक पहुँच जाता है ....
RustyTheBoyRobot

12
इसके अलावा, PNP.INI फ़ाइल में एक सेटिंग है: max_input_vars जो PHP के मेरे संस्करण में: 5.4.16 से 1000 तक डिफॉल्ट करता है। मैनुअल से: "कितने इनपुट चर स्वीकार किए जा सकते हैं (सीमा $ _MET, $ _POST और पर लागू होती है) $ _COOKIE सुपरग्लोबल
निकोले इवानोव

73

एक अनुरोध (GET और POST) के url भाग को ब्राउज़र और सर्वर दोनों द्वारा सीमित किया जा सकता है - आमतौर पर सुरक्षित आकार 2KB है क्योंकि लगभग कोई ब्राउज़र या सर्वर नहीं हैं जो एक छोटी सीमा का उपयोग करते हैं।

एक अनुरोध (POST) का शरीर सामान्य रूप से एक बाइट आकार के आधार पर सर्वर द्वारा सीमित होता है ताकि एक प्रकार के DoS हमले को रोका जा सके (ध्यान दें कि इसका मतलब है कि चरित्र का पलायन शरीर के बाइट के आकार को बढ़ा सकता है)। सबसे आम सर्वर सेटिंग 10 एमबी है, हालांकि सभी लोकप्रिय सर्वर इसे सेटिंग फ़ाइल या पैनल के माध्यम से बढ़ाया या घटाया जा सकता है।

* कुछ अपवाद पुराने सेल फोन या अन्य छोटे डिवाइस ब्राउज़रों के साथ मौजूद हैं - उन मामलों में यह डिवाइस पर इस उद्देश्य के लिए आरक्षित ढेर स्थान का एक कार्य है, फिर कुछ और।


2
ब्राउज़र सीमा के बारे में कुछ बताएं, विचार करते हुएcurl
युगल जिंदल

12
मुझे पता है कि मैं यहां के समय से थोड़ा पीछे हूं लेकिन इन जैसे जवाबों का कारण मैं स्टैकऑवरफ्लो से प्यार करता हूं। ऊपर और परे क्या आवश्यक है और कुछ मूल्यवान पृष्ठभूमि जानकारी प्रदान करना।
डोरमाउस

50

इसके अलावा, PHP.INI फ़ाइल में एक सेटिंग है:

max_input_vars

PHP के मेरे संस्करण में जो: 5.4.16 डिफॉल्ट से 1000 तक।

मैनुअल से: "कितने इनपुट चर स्वीकार किए जा सकते हैं (सीमा $ _GET, $ _POST और $ _COOKIE सुपरग्लोबल पर अलग से लागू होती है)"

रेफरी: http://www.php.net/manual/en/info.configuration.php#ini.max-input-nars


14

आप php.ini वैरिएबल को सेट करके बड़ी मात्रा में डेटा पोस्ट कर सकते हैं: max_input_vars इस वेरिएबल का डिफॉल्ट साइज 1000 है लेकिन अगर आप बड़ी मात्रा में डेटा भेजना चाहते हैं तो आपको अपने अनुसार साइज बढ़ाना होगा। यदि आप ini_set से आकार निर्धारित नहीं कर सकते हैं तो आपको इसे htaccessसीधे या php.ini फ़ाइल में परिवर्तन करके करना होगा।

max_input_vars  2500
memory_limit    256M

5

जैसा कि डेविड ने बताया, मैं ज्यादातर मामलों में केबी के साथ जाऊंगा।

php_value post_max_size 2KB

नोट: मेरा फॉर्म सरल है, बस कुछ टेक्स्ट बॉक्स हैं, लंबे टेक्स्ट नहीं।


2

डिफ़ॉल्ट रूप से, पोस्ट अनुरोध का अधिकतम आकार 8mb है। लेकिन आप इसे अपनी आवश्यकताओं के अनुसार संशोधित कर सकते हैं। संशोधन php.ini फ़ाइल (php कॉन्फ़िगरेशन सेटिंग) खोलकर किया जा सकता है।

खोज

post_max_size=8M  //for me, that was on line:771

अपनी आवश्यकताओं के अनुसार 8 बदलें।


1

यह तय करने के लिए http सर्वर पर निर्भर है कि क्या कोई सीमा है। मैं जिस उत्पाद पर काम करता हूं वह व्यवस्थापक को सीमा को कॉन्फ़िगर करने की अनुमति देता है।


इसके अलावा, PNP.INI फ़ाइल में एक सेटिंग है: max_input_vars जो PHP के मेरे संस्करण में: 5.4.16 से 1000 तक डिफॉल्ट करता है। मैनुअल से: "कितने इनपुट चर स्वीकार किए जा सकते हैं (सीमा $ _MET, $ _POST और पर लागू होती है) $ _COOKIE सुपरग्लोबल अलग से) "रेफरी: [ php.net/manual/en/info.configuration.php#ini.max-input-varsactions [1]: [1]: php.net/manfo/en/info.configuration .php # ini.max-input-vars
निकोले इवानोव

1

इसके लिए सबसे अच्छे समाधानों में से एक, आप एक से अधिक या 1,000 से अधिक इनपुट फ़ील्ड का उपयोग नहीं करते हैं। आप पूर्व के लिए किसी भी विशेष चरित्र के साथ कई आदानों को संक्षिप्त कर सकते हैं। @

यह देखो:

<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>

<input type='hidden' name='hd' id='hd'>

किसी भी स्क्रिप्ट (जावास्क्रिप्ट या JScript) का उपयोग करना,

document.getElementById("hd").value = document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value

इसके साथ, आप max_input_varsसमस्या को दरकिनार कर देंगे । यदि आप max_input_varsphp.ini फ़ाइल में वृद्धि करते हैं, तो यह सर्वर के लिए हानिकारक है क्योंकि यह अधिक सर्वर कैश मेमोरी का उपयोग करता है, और यह कभी-कभी सर्वर को क्रैश कर सकता है।


1
मैं यह नहीं देखता कि कैसे चर चर स्मृति को बचाता है। प्रत्येक ASCII-Character स्मृति के 1 बाइट का उपयोग करता है। एक स्ट्रिंग (तकनीकी रूप से एक चर सरणी अगर मैं गलत नहीं हूं) n * 1 बाइट्स का उपयोग स्ट्रिंग लंबाई के रूप में n के साथ करता है। एक और चरित्र को जोड़ने से उपयोग की जाने वाली स्मृति कम हो जाएगी? इस गणना में आप प्रत्येक स्ट्रिंग के लिए एक "बाइट" जोड़ेंगे। बेशक आप इस्तेमाल किए गए चर की गिनती को कम करते हैं, लेकिन आप इस "जीत" को अतिरिक्त काम के साथ फिर से विभाजित करते हुए भुगतान करते हैं।
DBX12

2
@ DBX12 जब आप इस ट्रिक के साथ मेमोरी सेव नहीं करते हैं, तो आप इसके साथ max_input_varsऑप्शन को बायपास कर सकते हैं php.ini। बिल्कुल नहीं, जो पूछा गया था, लेकिन अभी भी उपयोगी है।
रिकोब्रैसर

आकार की सीमा दो कारकों पर निर्भर करती है: पहला, व्यक्तिगत कुंजी / मान स्ट्रिंग आकार का आकार, कुंजी और / या मान पक्ष में वर्ण गणना। दूसरा, कुंजी / मूल्य जोड़े की राशि, भले ही प्रत्येक जोड़ी में छोटी वर्ण राशि हो। कुल मिलाकर ऊपर के दो कारक आकार सीमा के साथ समाप्त होते हैं। इसलिए, मेरे लिए, यह उत्तर सही है और प्रश्न से संबंधित है और किसी समस्या के एक पक्ष को उजागर करता है।
एलनूर शाबानोव

0

उन डेवलपर्स के लिए जो वेबहोस्टिंग के कारण php कॉन्फ़िगरेशन को नहीं बदल सकते। (मेरी सेटिंग्स 256MB अधिकतम आकार, 1000 अधिकतम चर)

मुझे एक ही मुद्दा मिला कि 5 बड़े डेटा ऑब्जेक्ट्स (साहचर्य सरणियों) में से केवल 2 सबस्ट्रक्चर के साथ सर्वर साइड पर प्राप्त हुए थे।

मुझे पता चला है कि पोस्ट अनुरोध में पूरे उपप्रकार को "चपटा" किया जा रहा है। तो, एक वस्तु सैकड़ों शाब्दिक चर बन जाती है। अंत में, 5 ऑब्जेक्ट वेरिएबल्स के बजाय यह वास्तव में दर्जनों सैकड़ों एलिमेंट वैरिएबल भेज रहा है।

इस मामले में समाधान स्ट्रिंग में प्रत्येक उपग्रहों को क्रमबद्ध करना है । फिर इसे सर्वर पर 5 स्ट्रिंग चर के रूप में प्राप्त किया जाता है। उदाहरण: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.