在简单的HTTP服务器上启用访问控制

发布于 2021-01-29 17:10:27

对于非常简单的HTTP服务器,我具有以下shell脚本:

#!/bin/sh

echo "Serving at http://localhost:3000"
python -m SimpleHTTPServer 3000

我想知道我怎么可以启用或添加CORS标题喜欢Access-Control-Allow-Origin: *到这台服务器?

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    不幸的是,简单的HTTP服务器是如此简单,以至于它不允许任何自定义,尤其是不允许其发送的标头。但是,您可以使用的大部分内容自己创建一个简单的HTTP服务器SimpleHTTPRequestHandler,而只需添加所需的标头即可。

    为此,只需创建一个文件simple-cors-http-server.py(或其他文件),然后根据所使用的Python版本,将以下代码之一放入其中。

    然后您可以做python simple-cors-http-server.py,它将启动您的修改后的服务器,该服务器将为每个响应设置CORS标头。

    shebang放在顶部,将文件设为可执行文件并将其放入PATH,您也可以使用它来运行它simple- cors-http-server.py

    Python 3解决方案

    Python
    3使用SimpleHTTPRequestHandlerHTTPServerhttp.server模块运行服务器:

    #!/usr/bin/env python3
    from http.server import HTTPServer, SimpleHTTPRequestHandler, test
    import sys
    
    class CORSRequestHandler (SimpleHTTPRequestHandler):
        def end_headers (self):
            self.send_header('Access-Control-Allow-Origin', '*')
            SimpleHTTPRequestHandler.end_headers(self)
    
    if __name__ == '__main__':
        test(CORSRequestHandler, HTTPServer, port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000)
    

    Python 2解决方案

    Python
    2使用SimpleHTTPServer.SimpleHTTPRequestHandlerBaseHTTPServer模块来运行服务器。

    #!/usr/bin/env python2
    from SimpleHTTPServer import SimpleHTTPRequestHandler
    import BaseHTTPServer
    
    class CORSRequestHandler (SimpleHTTPRequestHandler):
        def end_headers (self):
            self.send_header('Access-Control-Allow-Origin', '*')
            SimpleHTTPRequestHandler.end_headers(self)
    
    if __name__ == '__main__':
        BaseHTTPServer.test(CORSRequestHandler, BaseHTTPServer.HTTPServer)
    

    Python 2和3解决方案

    如果您需要同时兼容Python 3和Python 2,则可以使用在两个版本中都可以使用的多语言脚本。它首先尝试从Python
    3位置导入,否则回落到Python 2:

    #!/usr/bin/env python
    try:
        # Python 3
        from http.server import HTTPServer, SimpleHTTPRequestHandler, test as test_orig
        import sys
        def test (*args):
            test_orig(*args, port=int(sys.argv[1]) if len(sys.argv) > 1 else 8000)
    except ImportError: # Python 2
        from BaseHTTPServer import HTTPServer, test
        from SimpleHTTPServer import SimpleHTTPRequestHandler
    
    class CORSRequestHandler (SimpleHTTPRequestHandler):
        def end_headers (self):
            self.send_header('Access-Control-Allow-Origin', '*')
            SimpleHTTPRequestHandler.end_headers(self)
    
    if __name__ == '__main__':
        test(CORSRequestHandler, HTTPServer)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看