[RUBY-ON-RAILS] 왜 들어오는 요청을 일으키는 내 CORS 구성은 필터 처리되지 않는 이유는 무엇입니까? 어떻게 그것이 단지 특정 기원의 요청을 수락 할 수 있습니까?
RUBY-ON-RAILS왜 들어오는 요청을 일으키는 내 CORS 구성은 필터 처리되지 않는 이유는 무엇입니까? 어떻게 그것이 단지 특정 기원의 요청을 수락 할 수 있습니까?
지금은 HTTP에서 실행을 위해, 내 레일 5 API 전용 응용 프로그램을하고 싶습니다 : // localhost를 : 3000 만 이제 HTTP에서 실행을 위해, 내 NodeJS의 요청 프런트 엔드 응용 프로그램을 받아들이 : // localhost를 : 8888.
나는이 같은 /config/initializers/cors.rb 구성 그래서 :
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins "http://localhost:8888"
resource "*",
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
그리고이 테스트를 썼다 :
#/spec/request/cors_request_spec.rb
RSpec.feature "CORS protection", type: :request do
it "should accept a request from a whitelisted domain" do
get "/api/v1/bodies.json", nil, "HTTP_ORIGIN": "http://localhost:8888"
expect(response.status).to eql(200)
end
it "should reject a request from a non-whitelisted domain" do
get "/api/v1/bodies.json", nil, "HTTP_ORIGIN": "https://foreign.domain"
expect(response.status).to eql(406)
end
end
예상대로 첫 번째 테스트는 통과된다. 그러나 두 번째는 200 이유의 응답 코드로 실패?
(나는 방법에 의해 406 응답 코드에 결혼 아니에요, 충족되지 않습니다 요청을 나타내는 하나입니다.)
해결법
-
==============================
1.CORS 구성은 원산지 요청 헤더의 값에 따라 요청을 승인에서 서버를 방지하지 않습니다. 당신은 CORS 구성을 통해 그렇게 할 수 없습니다.
CORS 구성은 원산지 요청 헤더의 값에 따라 요청을 승인에서 서버를 방지하지 않습니다. 당신은 CORS 구성을 통해 그렇게 할 수 없습니다.
당신은 CORS가 서버에서 지원 구성 할 때, 서버가 다르게 않는 모든 것을 바로 액세스 제어 - 허용 - 원산지 응답 헤더 및 기타 CORS 응답 헤더를 보내는 것입니다.
CORS 제한의 실제 집행은 브라우저에 의해서만 이루어집니다. 그것은 서버에 의해 강제 아닙니다.
프로토콜이 작동하는 방식에 관계없이 서버 측에서하게 구성 CORS 무엇인지, 서버는 모든 클라이언트 및 기원의 요청을 수락하는 것을 계속한다는 것입니다 그것은 다른 것 - 모든 기원에서 모든 클라이언트는 서버에서와 마찬가지로이 응답을 얻기 위해 계속 수 있도록 그들은 다른 것.
당신이 당신의 프론트 엔드 자바 스크립트 코드에서 출처 간 요청이 실패했음을 브라우저 DevTools로의 오류를 볼 때 그래서 심지어 당신은 여전히 브라우저 DevTools로의 반응을 볼 수 있습니다.
그러나 브라우저가 의미하지 않는다 응답을 볼 수있다해서 브라우저는 프론트 엔드 자바 스크립트 코드에 노출됩니다. 서버가 요청이 그 출처를 허용하는 액세스 제어 - 허용 - 원산지 헤더와 응답의 요청을 허용하는-에 OPTS로 전송 된 경우 브라우저는 특정 원점에 실행하는 프론트 엔드 코드 출처 간 요청의 응답을 노출합니다.
그래서 원점 요청 헤더 일치 HTTPS 어떤 요청 : //foreign.domain, 질문의 구성 조각은 HTTP 말을 클라이언트 측에서 메시지를 방출하는 브라우저를 야기한다 : // localhost를 : 3000 / API / V1 / 몸을. 이 때문에 JSON은로드 할 수 없습니다에는 액세스 제어 - 허용 - 원산지의 응답에 응답 헤더를 (당신의 구성 만 허용 목록 기원에 대한 응답에 해당 헤더를 보낼 수있는 서버를 유발하기 때문).
그러나 당신이 CORS를 통해 할 수있는 전부입니다. 당신은 서버 측에서 어떤 CORS 구성을 수행하여 받아들이는 특히 기원의 요청에 대한 응답에서 서버 측을 막을 수 없습니다. 당신이 그렇게하고 싶다면, 당신은 단지 CORS 구성이 아닌 다른 뭔가를 사용하여 할 필요가있다.
from https://stackoverflow.com/questions/44034905/why-isnt-my-cors-configuration-causing-incoming-requests-to-be-filtered-how-ca by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 가입 집합의 모든 값을 포함해야하지만, 더 포함 할 수 SQL (0) | 2020.02.21 |
---|---|
[RUBY-ON-RAILS] 때 "has_many을 :을 통해"사용하는 레일의 관계? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 동적 테이블 생성 (0) | 2020.02.20 |
[RUBY-ON-RAILS] CORS - JSONP없이 도메인 간 AJAX 기원 서버를 허용함으로써 (0) | 2020.02.20 |
[RUBY-ON-RAILS] 어떻게이 인스턴스를 레일 로컬 포트가 실행되고 찾는 방법은? (0) | 2020.02.20 |