CORS 정보 (1)

7599 단어 CORStornado

CORS란?



EN: Cross-origin resource sharing (CORS)
KO: 오리진 간 리소스 공유

아래 사이트에서 이렇게 정의되어 있습니다.
htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 그럼 / cs / u b / Ht tP / RS

오리진 간 리소스 공유 Cross-Origin Resource Sharing (CORS)은 추가 HTTP 헤더를 사용하여 한 오리진에서 실행되는 웹 응용 프로그램에 다른 오리진의 선택한 리소스에 대한 액세스 권한을 부여하도록 브라우저 에 지시하는 메커니즘입니다.

보충) origin 정보
htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 cs / G ぉ さ ry / 오리 긴

실제로 만져 보자.



파이썬 tornado라는 라이브러리를 사용하여 다양한 검증
htps //w w. 그리고 r 어쨌든 b. rg/엔/s타 bぇ/
아래 코드를 test.py에 쓰고 python test.py를 실행하면 간단한 웹 서버가 시작됩니다.
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

시도에 브라우저에서 설정한 URL에 액세스해 보니 무사히 표시되었다.
http://localhost:8888/


개발자 툴의 콘솔에 시험에 아래의 커맨드를 쳐 보면 무사히 내용을 얻을 수 있었다.
fetch('http://localhost:8888').then(a => a.text()).then(console.log)



같은 오리진으로부터의 get 리퀘스트이므로, 취득할 수 있는 것은 당연과 같은 느낌이군요.

Google 홈페이지를 열고 같은 일을 하면 어떻게 되는지 확인해보자.
얻을 수 없었다.

クロスオリジン要求をブロックしました: 
同一生成元ポリシーにより、http://localhost:8888/ にあるリモートリソースの読み込みは拒否されます 
(理由: CORS ヘッダー ‘Access-Control-Allow-Origin’ が足りない)。

요청에 'Access-Control-Allow-Origin'의 지정이 필요하다는 것을 알았다.

test.py의 get에 아래의 한 줄을 더하여 프로그램을 다시 시작해 보았다.

self.add_header("Access-Control-Allow-Origin","htps //w w. 오, ぇ. 이 m” )
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.add_header("Access-Control-Allow-Origin","https://www.google.com")
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

이전과 마찬가지로 google에서 get 요청을 보내 보면 안전한 텍스트를 얻을 수 있습니다.


즉, 오리진 A로부터 오리진 B에 어떠한 요청을 보낼 때, 오리진 B 측에서 오리진 A로부터의 요청을 허가하는 설정을 하지 않는 한, 오리진 A로부터 오리진 B의 내용을 취득할 수 없다.

반대로, 오리진 B측에서 오리진 A로부터의 리퀘스트에 대해 사전 허가해 주면, 오리진 A로부터 오리진 B의 컨텐츠를 취득할 수 있게 된다는 것이다.

이번 정리



1.CORS는 오리진간 자원 공유 시에 사용하는 정책적인 것
2. 방문처의 오리진측에서 사전에 Access-Control-Allow-Origin을 설정해 두면, 방문원의 오리진으로부터 방문처의 자원을 취득할 수 있지만, 설정이 없는 경우, 취득할 수 없다.

좋은 웹페이지 즐겨찾기