読者です 読者をやめる 読者になる 読者になる

flupのエラーページをHTTP 500で返す

Python

flupのUnhandled ExceptionというエラーがHTTP 200で返ってしまうという問題があり、lighttpd, flupのどちらが悪いのか検討した結果、flupだったことが判明。
Apache, lighttpd, nginx等、どんなサーバを使っていても、プロトコルがfcgiならば*1、同様の問題があるはずです。

Index: flup/server/fcgi_base.py
===================================================================
--- flup/server/fcgi_base.py    (revision 2363)
+++ flup/server/fcgi_base.py    (working copy)
@@ -1165,11 +1165,13 @@
         else:
             errorpage = """<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
 <html><head>
+<meta http-equiv="Cache-Control" content="no-cache" />
 <title>Unhandled Exception</title>
 </head><body>
 <h1>Unhandled Exception</h1>
 <p>An unhandled exception was thrown by the application.</p>
 </body></html>
 """
-            req.stdout.write('Content-Type: text/html\r\n\r\n' +
+            req.stdout.write('Status: 500 Internal Server Error\r\n' +
+                             'Content-Type: text/html\r\n\r\n' +
                              errorpage)

*1:もしかしたらfcgi以外のプロトコルでも