답변:
안타깝게도 간단한 HTTP 서버는 특히 보내는 헤더가 아닌 사용자 정의를 허용하지 않을 정도로 간단합니다. 그러나 대부분의을 사용하여 간단한 HTTP 서버를 직접 만들고 SimpleHTTPRequestHandler
원하는 헤더를 추가 할 수 있습니다.
이를 위해 파일 simple-cors-http-server.py
(또는 기타)을 만들고 사용중인 Python 버전에 따라 다음 코드 중 하나를 내부에 넣으십시오.
그런 다음 할 수 있으며 python simple-cors-http-server.py
모든 응답에 대해 CORS 헤더를 설정하는 수정 된 서버를 시작합니다.
으로 오두막 상단의 파일을 실행하고 사용자의 PATH에 넣어, 당신은 단지 사용하여 실행할 수 있습니다 simple-cors-http-server.py
도.
파이썬 3 사용 SimpleHTTPRequestHandler
하고 HTTPServer
로부터 http.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는 SimpleHTTPServer.SimpleHTTPRequestHandler
및 BaseHTTPServer
모듈 을 사용 하여 서버를 실행합니다.
#!/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 3과 Python 2 모두에 대한 호환성이 필요한 경우 두 버전 모두에서 작동하는이 polyglot 스크립트를 사용할 수 있습니다. 먼저 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/1.0 501 Unsupported method ('OPTIONS') Server: SimpleHTTP/0.6 Python/2.7.6 Date: Wed, 21 Jan 2015 23:16:10 GMT Content-Type: text/html Connection: close Access-Control-Allow-Origin: *
OPTIONS
. 간단한 요청의 경우 Access-Control-Allow-Origin
헤더 만 보내는 솔루션 은 여전히 잘 작동합니다.
http-server와 같은 대안을 시도하십시오.
SimpleHTTPServer는 실제로 프로덕션에 배포하는 종류의 서버가 아니기 때문에 http://localhost:3000
CORS 헤더로 파일을 간단하게 노출하는 작업을 수행하는 한 사용하는 도구에 대해별로 신경 쓰지 않는다고 가정 합니다. 명령 줄
# install (it requires nodejs/npm)
npm install http-server -g
#run
http-server -p 3000 --cors
HTTPS가 필요하십니까?
로컬에서 https가 필요한 경우 캐디 또는 certbot을
유용 할 수있는 관련 도구
ngrok : 실행할 때 누구나 액세스 할 수 ngrok http 3000
있는 URL https://$random.ngrok.com
을 생성 합니다.http://localhost:3000
서버 합니다. 컴퓨터에서 로컬로 실행되는 항목 (로컬 백엔드 / api 포함)을 세상에 노출 할 수 있습니다.
지역 터널 : 와 거의 동일
now : 실행할 때 now
정적 자산을 온라인으로 업로드하고 https://$random.now.sh
. 달리 결정하지 않는 한 영원히 온라인 상태로 유지됩니다. diffing 덕분에 배포가 빠릅니다 (첫 번째 제외). 이제 프로덕션 프런트 엔드 / SPA 코드 배포에 적합합니다. Docker 및 NodeJS 앱도 배포 할 수 있습니다. 실제로 무료는 아니지만 무료 계획이 있습니다.
npm
를 가지고있는 것으로 만 알려진 시스템에 설치해야하는 솔루션을 발견했습니다 python
.
나는 같은 문제가 있었고이 해결책을 찾았습니다.
class Handler(SimpleHTTPRequestHandler):
def send_response(self, *args, **kwargs):
SimpleHTTPRequestHandler.send_response(self, *args, **kwargs)
self.send_header('Access-Control-Allow-Origin', '*')
send_response
메서드 만 변경하는 SimpleHTTPRequestHandler에서 상속 된 새 클래스를 만들었습니다 .
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()