任何POST请求都会创建错误413

时间:2015-12-11 21:10:47

标签: python post lighttpd web.py

我正在尝试使用lighttpd和web.py在Beaglebone Black上托管一个网站。任何发布请求都会创建错误413 - 请求实体太大。我对网络开发很陌生,所以如果我使用了错误的术语,我会道歉。要清楚,我不是要上传任何类型的文件。我创建了一个简单的页面,测试,以说明错误。我的代码:

首先,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文件位于templates文件夹中:

$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"

1 个答案:

答案 0 :(得分:1)

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为单位)