Giới hạn kích thước của một yêu cầu bài là gì?


268

Xin lỗi nếu điều này là trùng lặp, tôi nghĩ nó sẽ như vậy nhưng không thể tìm thấy bất cứ điều gì.

Tôi có một ứng dụng flex mà tôi đang đăng dữ liệu trở lại máy chủ php / mysql thông qua IE. Tôi chưa gặp phải bất kỳ vấn đề nào, nhưng biết điều này trước thời hạn có thể giúp tôi tiết kiệm được rất nhiều thất vọng và công việc. Có giới hạn kích thước để đăng dữ liệu qua http?

Bài viết này nói không: http://www.netlobo.com/ie_form_submit.html

Thảo luận này nói có: http://bytes.com/topic/php/answers/538226-what-maximum-limit-USE-post-method

Và tất cả quay trở lại những gì tôi có thể tìm thấy trực tuyến. Vì vậy, xin vui lòng giới hạn câu trả lời cho các số kiểm tra / xác minh cá nhân.

Tôi muốn đăng lại một chuỗi XML có thể khá lớn (tối đa 5mb).

Nếu nó làm cho bất kỳ sự khác biệt: trình duyệt sẽ luôn là IE (sản phẩm của chúng tôi yêu cầu nó), bài đăng đến từ và httpService trong flex, máy chủ web là php, DB là mySql.


Câu trả lời:


203

Nó phụ thuộc vào cấu hình máy chủ. Nếu bạn đang làm việc với PHP trong Linux hoặc tương tự, bạn có thể kiểm soát nó bằng tệp cấu hình .htaccess, như vậy:

#set max post size
php_value post_max_size 20M

Và, vâng, cá nhân tôi có thể chứng thực rằng điều này hoạt động :)

Nếu bạn đang sử dụng IIS, tôi không biết bạn sẽ đặt giá trị cụ thể này như thế nào.


3
post_max_sizeCài đặt này ở đâu? Tôi còn khá mới với php và tôi không thể tìm thấy nó ở bất cứ đâu trong cơ sở mã của chúng tôi (sử dụng quy trình tìm tất cả dreamWeaver). Tôi muốn hỏi quản trị viên hệ thống của chúng tôi nhưng họ có ý nghĩa. :-P
đảo ngượcSpear

10
Vì vậy, bạn có thể đặt giá trị này thành bất kỳ kích thước nào? Không có bất kỳ loại giới hạn giao thức? Bạn có thể đặt nó thành 999999999999999999999M không?
Para

8
@Para - Bài đăng này nói rằng bạn có thể đặt nó cao bằng bộ nhớ của máy. Nó cũng nói rằng mặc định là 2MB.
RustyTheBoyRobot

37
Vì đây là PHP, tôi đã hy vọng nó sẽ chấp nhận bất kỳ giá trị nào và chỉ SEGFAULT khi nó đạt đến giới hạn của máy của bạn ....
RustyTheBoyRobot

12
Ngoài ra, trong tệp PNP.INI có cài đặt: max_input_vars mà trong phiên bản PHP của tôi: 5.4.16 mặc định là 1000. Từ hướng dẫn: "Có thể chấp nhận bao nhiêu biến đầu vào (giới hạn được áp dụng cho $ _GET, $ _POST và $ _COOKIE superglobal riêng biệt) "Ref.: Php.net/manual/en/info.configuration.php#ini.max-input-vars
Nikolay Ivanov

73

Phần url của yêu cầu (GET và POST) có thể bị giới hạn bởi cả trình duyệt và máy chủ - nói chung kích thước an toàn là 2KB vì hầu như không có trình duyệt hoặc máy chủ nào sử dụng giới hạn nhỏ hơn.

Phần thân của một yêu cầu (POST) thường được giới hạn bởi máy chủ trên cơ sở kích thước byte để ngăn chặn kiểu tấn công DoS (lưu ý rằng điều này có nghĩa là thoát ký tự có thể tăng kích thước byte của phần thân). Cài đặt máy chủ phổ biến nhất là 10MB, mặc dù tất cả các máy chủ phổ biến cho phép tăng hoặc giảm thông qua tệp cài đặt hoặc bảng điều khiển.

* Một số trường hợp ngoại lệ tồn tại với điện thoại di động cũ hoặc các trình duyệt thiết bị nhỏ khác - trong những trường hợp đó, đó là chức năng của không gian heap dành cho mục đích này trên thiết bị, sau đó là bất cứ điều gì khác.


2
Nói điều gì đó về các giới hạn của trình duyệt, xem xétcurl
Yrif Julum

12
Tôi biết tôi hơi lạc hậu so với thời gian ở đây nhưng những câu trả lời như thế này là lý do tôi yêu StackOverflow. Trên và ngoài những gì cần thiết và cung cấp một số thông tin cơ bản có giá trị.
túc xá


14

Bạn có thể đăng lượng dữ liệu lớn bằng cách đặt biến php.ini: max_input_vars Kích thước mặc định của biến này là 1000 nhưng nếu bạn muốn gửi lượng dữ liệu lớn, bạn phải tăng kích thước tương ứng. Nếu bạn không thể đặt kích thước từ ini_set, bạn phải thực hiện thông qua htaccesshoặc bằng cách thay đổi trực tiếp thành tệp php.ini.

max_input_vars  2500
memory_limit    256M

5

Như David chỉ ra, tôi sẽ đi với KB trong hầu hết các trường hợp.

php_value post_max_size 2KB

Lưu ý: hình thức của tôi rất đơn giản, chỉ cần một vài hộp văn bản, không phải văn bản dài.


2

Theo mặc định, yêu cầu bài đăng có kích thước tối đa 8mb. Nhưng bạn có thể sửa đổi nó theo yêu cầu của bạn. Việc sửa đổi có thể được thực hiện bằng cách mở tệp php.ini (cài đặt cấu hình php).

Tìm thấy

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

thay 8 theo yêu cầu của bạn.


1

Tùy thuộc vào máy chủ http để quyết định xem có giới hạn nào không. Sản phẩm tôi làm việc cho phép quản trị viên định cấu hình giới hạn.


Ngoài ra, trong tệp PNP.INI có cài đặt: max_input_vars trong phiên bản PHP của tôi: 5.4.16 mặc định là 1000. Từ hướng dẫn: "Có thể chấp nhận bao nhiêu biến đầu vào (giới hạn được áp dụng cho $ _GET, $ _POST và $ _COOKIE superglobal riêng) "Ref.: [ Php.net/manual/en/info.configuration.php#ini.max-input-vars[[1] [1]: php.net/manual/en/info.configuration .php # ini.max-input-vars
Nikolay Ivanov

1

Một trong những giải pháp tốt nhất cho việc này, bạn không sử dụng nhiều hoặc hơn 1.000 trường nhập. Bạn có thể nối nhiều đầu vào với bất kỳ ký tự đặc biệt nào, ví dụ như. @.

Xem cái này:

<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'>

Sử dụng bất kỳ tập lệnh nào (JavaScript hoặc 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

Với điều này, bạn sẽ bỏ qua max_input_varsvấn đề. Nếu bạn tăng max_input_varstệp php.ini, điều đó có hại cho máy chủ vì nó sử dụng nhiều bộ nhớ đệm của máy chủ hơn và điều này đôi khi có thể làm sập máy chủ.


1
Tôi không thấy các biến nối nối tiết kiệm bộ nhớ. Mỗi ký tự ASCII sử dụng 1 byte bộ nhớ. Một chuỗi (về mặt kỹ thuật là một mảng char nếu tôi không nhầm) sử dụng n * 1 byte với n là độ dài chuỗi. Tại sao thêm một ký tự khác làm giảm bộ nhớ được sử dụng? Trong tính toán này, bạn sẽ thêm một byte khác cho mỗi '@' bạn thêm vào chuỗi. Tất nhiên, bạn giảm số lượng biến được sử dụng nhưng bạn phải trả "chiến thắng" này với công việc bổ sung để phân tách chúng một lần nữa.
DBX12

2
@ DBX12 Trong khi bạn không lưu bộ nhớ bằng thủ thuật này, bạn có thể bỏ qua max_input_varstùy chọn trong phần php.ininày. Không chính xác, những gì đã được hỏi, nhưng vẫn hữu ích.
RicoBrassers

Giới hạn kích thước vượt quá phụ thuộc vào hai yếu tố: thứ nhất, kích thước của kích thước chuỗi khóa / giá trị riêng lẻ, tức là số ký tự ở bên khóa và / hoặc giá trị. thứ hai, số lượng cặp khóa / giá trị, ngay cả khi mỗi cặp có số lượng ký tự nhỏ. Nhìn chung, hai yếu tố trên kết thúc với giới hạn kích thước vượt quá vấn đề. Vì vậy, với tôi, câu trả lời này là chính xác và liên quan đến câu hỏi và nêu bật một mặt của vấn đề.
Elnur Shabanov

0

Đối với các nhà phát triển không thể thay đổi cấu hình php vì webhosting. (Cài đặt của tôi kích thước tối đa 256MB, 1000 biến tối đa)

Tôi gặp vấn đề tương tự là chỉ có 2 trên 5 đối tượng dữ liệu lớn (mảng kết hợp) với các cấu trúc con được nhận ở phía máy chủ.

Tôi phát hiện ra rằng toàn bộ cấu trúc con đang bị "san phẳng" trong yêu cầu bài viết. Vì vậy, một đối tượng trở thành hàng trăm biến số theo nghĩa đen. Cuối cùng, thay vì 5 biến Object, thực tế nó đang gửi hàng chục hàng trăm biến số.

Giải pháp trong trường hợp này là tuần tự hóa từng cấu trúc con thành Chuỗi. Sau đó, nó được nhận trên máy chủ dưới dạng 5 biến Chuỗi. Thí dụ: {variable1:JSON.stringify(myDataObject1),variable2:JSON.stringify(myDataObject2)...}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.