为什么我的WSGI应用程序总是在environ['path_INFO']中获取URL解码路径?

2024-04-19 14:35:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的WSGI应用程序:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    print('PATH_INFO:', environ['PATH_INFO'])
    return [b'<p>Hello World</p>']

if __name__ == '__main__':
    from wsgiref import simple_server
    server = simple_server.make_server('0.0.0.0', 8080, application)
    server.serve_forever()

我提出两个要求:

^{pr2}$

我得到这个输出:

C:\code>python foo.py
PATH_INFO: /<foo>
127.0.0.1 - - [09/Mar/2014 13:48:39] "GET /<foo> HTTP/1.1" 200 18
PATH_INFO: /<foo>
127.0.0.1 - - [09/Mar/2014 13:48:47] "GET /%3Cfoo%3E HTTP/1.1" 200 18

查看我的应用程序如何获得URL解码路径/foo,即使客户机请求/%3Cfoo%3E。在

它表明wsgiref.simple_服务器{d>始终确保我的应用程序中的路径^始终得到解码的URL。在

但我在PEP-3333中找不到这种行为的记录。你能给我指一下记录这种行为的官方文件吗?在


Tags: pathinfo应用程序httpurlgetserverfoo
1条回答
网友
1楼 · 发布于 2024-04-19 14:35:41

如果服务器使实际的HTTP请求行可用,则来自实际HTTP请求行的REQUEST_URI的值将为:

REQUEST_URI: '/%3Cfoo%3E'

即使你使用了:

^{pr2}$

因为curl会在发送之前对URL进行编码以使用%转义符。在

我认为请求的URI不是由任何RFC覆盖的,而是由许多服务器提供的一个变量。但是您不能依赖它的存在,所以不要编写WSGI应用程序来依赖它的存在。在

web服务器将在处理请求\u URI中对%escapes进行解码。因此,最终进入路径_INFO的结果将始终是:

PATH_INFO: '/<foo>'

解码由WSGI构建的CGI和相关rfc覆盖。在

示例见:

相关问题 更多 >