当前位置: 首页 > 面试题库 >

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

韩涵衍
2023-03-14
问题内容

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

#!/bin/sh

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

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


问题答案:

不幸的是,简单的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)


 类似资料:
  • 我正在尝试学习如何在安装了centos 8的远程服务器上使用< code>npm start命令。我下载了别人的jekyll项目,然后运行命令: 我收到的成功消息如下: 我打开一个单独的终端窗口(为了不杀死当前进程),SSH进入服务器并键入: 这将成功下载<code>索引。html文件,其中包含我希望从这个jekyll项目网站获得的内容。然后我转到我的web浏览器并键入<code>http://e

  • 本文向大家介绍C++实现简单的HTTP服务器,包括了C++实现简单的HTTP服务器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现HTTP服务器的相关代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。

  • 问题内容: 我目前正在创建一个返回静态页面的小型HTTP服务器…我尝试使用Java套接字: 该代码不包含任何错误,我从浏览器得到了如下响应: 但是我的问题是浏览器没有页面?有什么帮助吗? PS:我已经读过这篇文章:http : //en.wikipedia.org/wiki/Hypertext_Transfer_Protocol,(对不起法语,…) 问题答案: 除了每个请求标头行之后,您还必须在标

  • 本文向大家介绍超简单的Python HTTP服务,包括了超简单的Python HTTP服务的使用技巧和注意事项,需要的朋友参考一下 超如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Python 可能帮助你。使用Python可以完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出

  • 在云服务器上写一个linux上运行的Http服务器时,绑定了任意IP和8080端口, 云服务器上的telnet是能直接和这个服务器交互的, 但是在浏览器 或者 在我windows上的telnet不能连接这个Http服务器(云服务器的公网ip可以ping通) 浏览器向服务器发请求时,我是会把请求的报文全打印出来的,这里没打印是没有连接上 我的防火墙全部关了也连不了,怎么办? 求大佬指教 。。。

  • 我希望我的访问者能够同时使用HTTP和HTTPS。我使用的是一个用Socket创建的简单Python webserver。我遵循了以下指南:Python Simple SSL Socket Server,但它没有那么大的帮助,因为如果证书在某个客户端中不可信,服务器就会崩溃。下面是运行服务器的webserver中的几行代码:def start(self):#create a socket obje

  • 我有以下两个脚本,它们几乎完全遵循流示例。代码的来源如下:https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/streaming/StreamTransformerExample.java 然而,尽管客户端很好地连接到服务器,但在运行流时,我在服务器端遇到了可怕

  • 我想用Java创建一个非常简单的HTTP服务器应用程序。 例如,如果我在localhost端口8080上运行服务器,并且从浏览器发出以下调用,我希望获得一个带有字符串“hello world!”的Json数组: 我希望在服务器中有类似这样的东西(非常抽象的代码): 我想这个函数实际上不应该“返回”json,而是使用某种HTTP响应处理程序或类似的东西发送它... 最简单的方法是什么,而不需要熟悉许