任何 POST 请求都会产生错误 413

Any POST request creates error 413

我正在尝试使用 lighttpd 和 web.py 在 Beaglebone Black 上托管一个网站。任何 post 请求都会产生错误 413 - 请求实体太大。我是网络开发的新手,所以如果我使用了错误的术语,我深表歉意。需要说明的是,我并不是要上传任何类型的文件。我创建了一个简单的页面 test 来说明错误。我的代码:

首先,Monitor.py:

#!/usr/bin/env python

import web
import Model
from Account  import Account
from Forgot   import Forgot
from Login    import Login
from Reset    import Reset
from Subscribe import Subscribe
from Success  import Success
from Status   import Status
from Test     import Test

urls = ('/', 'Status',
       '/test', 'Test',
       '/account', 'Account',
       '/forgot', 'Forgot',
       '/login', 'Login',
       '/reset/(\d+)', 'Reset',
       '/success', 'Success',
       '/subscribe', 'Subscribe',
)

render = web.template.render('templates')
app = web.application(urls, globals())
web.config.debug = False
session = Model.create_session(app)

if __name__ == '__main__':
       app.run()

现在,Test.py:

#!/usr/bin/env python

import web
import Model

render = web.template.render('templates')

class Test:

       def GET(self):
              return render.test()

       def POST(self):
              i = web.input()
              raise web.seeother('/test')

现在,位于模板文件夹中的 html 文件:

$def with()
<html>
<head>
    <link rel="stylesheet" href="static/stylesheet.css" type="text/css" media="screen" charset="utf-8"/>
    <title>Account Page</title>
</head>
<body>
       div>
              <form action="/test" method="POST">
                     <table class="std-element">
                            <tr>
                                   <th>
                                          <input type="text" name="example_text">
                                   </th>
                            </tr>
                     </table>
              </form>
       </div>
</body>
</html>

模型文件的相关部分:

session = None

def create_session(app):
       global session
       session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'username':default_username})
       session['username'] = default_username
       return session

def get_session():
       global session
       return session

最后,lighttpd.config 文件:

server.modules = (
       "mod_access",
       "mod_accesslog",
       "mod_alias",
       "mod_compress",
)

server.document-root = "/var/www/"
server.upload-dirs   = ( "/var/cache/lighttpd/uploads" )
server.errorlog      = "/var/log/lighttpd/error.log"
server.pid-file      = "/var/run/lighttpd.pid"
server.username      = "www-data"
server.groupname     = "www-data"
server.port          = 80
server.breakagelog   = "/var/log/lighttpd/breakage.log"
server.max-request-size=100000000
server.uploads-dirs=("/mnt")
server.network-backend="write"

## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl"


compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/x-javascript", "text/css", "text/html", "text/plain" )

include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

server.max-request-size=100000000 太大了。它以 KB 为单位。在内部,lighttpd 将该数字左移 10 位,在您的 lighttpd 版本中,这会导致任何 POST 与 0 进行比较并因为它太大而被拒绝。这已在 lighttpd 1.4.40 中修复,但无论如何您应该减少该限制。拥有 100 TB (!) 请求大小限制可能不会保护您的 Beaglebone。试试这个:server.max-request-size=1024 将对 POST 请求设置 1 MB 的限制。 (同样,该配置指令以 KB 为单位)