UFO ET IT

단순 HTTP 서버에서 액세스 제어 사용

ufoet 2023. 6. 22. 23:08
반응형

단순 HTTP 서버에서 액세스 제어 사용

매우 간단한 HTTP 서버용 셸 스크립트가 있습니다.

#!/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 헤더를 설정하는 수정된 서버가 실행됩니다.

셰뱅을 맨 위에 두고 파일을 실행 파일로 만들어 PATH에 넣으면 다음을 사용하여 실행할 수 있습니다.simple-cors-http-server.py너무.

Python 3 솔루션

Python 3은 모듈에서 와 를 사용하여 서버를 실행합니다.

#!/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는 및 모듈을 사용하여 서버를 실행합니다.

#!/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)

http-server와 같은 대안을 시도합니다.

애즈 심플HTTPS 서버는 실제 운영 환경에 배포하는 서버가 아닙니다. 여기서는 파일을 노출하는 작업을 수행하는 한 어떤 도구를 사용하는지에 대해 그다지 신경 쓰지 않는다고 생각합니다.http://localhost:3000단순 명령줄에 CORS 헤더 포함

# install (it requires nodejs/npm)
npm install http-server -g

#run
http-server -p 3000 --cors

HTTPS가 필요합니까?

로컬에서 https가 필요하다면 캐디certbot도 시도할 수 있습니다.


2022년 편집: 제가 가장 좋아하는 솔루션은 이제 Next.js에서 내부적으로 사용하는 serve입니다.

그냥 도망가npx serve --cors


유용할 수 있는 몇 가지 관련 도구

  • ngrok: 실행 시ngrok http 3000그것은 URL을 만듭니다.https://$random.ngrok.com누구나 액세스할 수 있는http://localhost:3000서버.컴퓨터에서 로컬로 실행되는 내용(로컬 백엔드/apis 포함)을 세상에 노출할 수 있습니다.

  • 로컬 터널: ngrok와 거의 같습니다.

  • now: 실행 시now정적 자산을 온라인으로 업로드하고 배포합니다.https://$random.now.sh사용자가 달리 결정하지 않는 한 이러한 사용자는 영원히 온라인 상태로 유지됩니다.디핑 덕분에 배포 속도가 빠릅니다(첫 번째 배포 제외).이제 프로덕션 프런트엔드/SPA 코드 배포에 적합합니다. 도커 및 NodeJS 앱도 배포할 수 있습니다.그것은 정말 무료는 아니지만, 그들은 무료 요금제를 가지고 있습니다.

저도 같은 문제를 안고 다음과 같은 해결책에 도달했습니다.

class Handler(SimpleHTTPRequestHandler):
    def send_response(self, *args, **kwargs):
        SimpleHTTPRequestHandler.send_response(self, *args, **kwargs)
        self.send_header('Access-Control-Allow-Origin', '*')

SimpleSimple에서 . HTTP 는 HTTP RequestHandler합니다.send_response방법.

사용해 보세요: https://github.com/zk4/livehttp . CORS를 지원합니다.

python3 -m pip install livehttp

하여 를 실행합니다.livehttp그게 다야.

http://localhost:hosts

자체 do_GET() 인스턴스를 제공해야 합니다(HEAD 작업을 지원하도록 선택한 경우 do_HEAD()).다음과 같은 것:

class MyHTTPServer(SimpleHTTPServer):

    allowed_hosts = (('127.0.0.1', 80),)

    def do_GET(self):
        if self.client_address not in allowed_hosts:
            self.send_response(401, 'request not allowed')
        else:
            super(MyHTTPServer, self).do_Get()

내 작업 코드:

self.send_response(200)
        self.send_header( "Access-Control-Allow-Origin", "*")
        self.end_headers()
        self.wfile.write( bytes(json.dumps( answ ), 'utf-8'))

언급URL : https://stackoverflow.com/questions/21956683/enable-access-control-on-simple-http-server

반응형