2012-06-11 5 views
10

내 홈페이지에 XHR POST를 통해 URL https://mydomain.com/send_sms에 제출할 양식이 있습니다.브라우저가 동일한 출처 정책을 구현하는 방식에 상당한 차이가 있습니까?

인터넷 익스플로러 (http://mydomain.com) &의 홈페이지의 비 SSL 버전을 방문하면 아무 일도 일어나지 않습니다. Webkit 콘솔에서 도움이되는 오류 메시지가 나타납니다. Origin http://mydomain.com is not allowed by Access-Control-Allow-Origin.

그러나 Firefox 13에서는 응답 본문이 & a로 명확하게 제출됩니다. 응답 본문은 200 OK이지만 응답 본문은 비어 있습니다. 또한 서버 측 작업 (SMS 전송)은 Firefox 요청에 의해 실제로 트리거되지만 다른 브라우저에서는 트리거되지 않습니다.

나는 항상 같은 출처 정책이 요청 전송도 거부했다고 생각하지만, 허용되지 않는 응답에서 데이터를 수신하는 브라우저가있을 것입니다.

이것이 모질라의 구현 (또는 심지어 감시까지)의 목적과 다른 점은 누구나 알고 있습니까?

+0

필자는 firefox 13에서는 크로스 프로토콜 요청 (적어도 http-> https)을 할 수 있지만 google 크롬에서는 할 수 없습니다. 나는 심지어 CORS 헤더를 보내지 않는 서버에서 테스트했습니다. – Esailija

+0

관련 항목 : http://stackoverflow.com/questions/10212071/jquery-ajax-post-to-rails-3-2-2-not-allowed-by-access-control-allow-origin –

답변

2

우선, http://example.comhttps://example.com은 다른 출처입니다. XHR Level 1의 경우 교차 출처 요청이 허용되지 않습니다.

그러나 CORS가 지원 될 때 출처 간 요청을 지원하는 현재 XHR (Level 2)에 대한

(서버 및 클라이언트 모두에 의해!), 크로스 원산지 요청하거나,

간단한 출처 요청의 경우 브라우저가 요청을 보낼 수 있습니다. 그러나 응답을 받으면 check whether the server allows to share the resource이 필요합니다. 여기에서 Access-Control-Allow-Origin 헤더 필드 및 기타 Access-Control-* 응답 헤더 필드를 확인합니다. 이 검사가 통과 된 경우에만 브라우저가 스크립트로 응답을 읽을 수 있습니다.

다른 교차 출처 요청의 경우 실제 요청에서 어떤 정보를 보낼 수 있는지 서버와 협상하기 위해 프리 플라이트가 필요합니다. 이 프리 플라이트 요청은 기본적으로 서버에 실제 요청에 포함될 내용 (요청 메소드 및 헤더 필드)을 알려주는 OPTIONS 요청입니다. 그런 다음 서버는 이러한 요청을 허용하는지 여부를 결정할 수 있습니다.

귀하의 경우, 관찰 된 동작에는 여러 가지 이유가있을 수 있습니다. send_sms 스크립트는 단지 support the server side part for CORS이 아닙니다.

+0

좋은 답변입니다! CORS에 대한 나의 지식은 제한되어있어서 깊은 이해를 가진 누군가가 약간의 빛을 비춰 줄 수있어서 기뻤다. – WickyNilliams

0

데이터를 보내는 것과 마찬가지로 데이터 보내기도 금지해야합니다. 이 페이지에 악의적 인 JS가 있고 각 키 스트로크를 임의의 서버에 제출하면 어떨까요? 이 경우, 송신은 수신보다 더 사악합니다 (같은 출발지 정책의 적용을받지 않기 때문에 이미지 문자열이나 스크립트와 같은 자원을 쿼리 문자열로 요청하여 실제로 수신 할 수 있습니다).

나는 과거에 약간의 차이가 있었지만 일반적으로 기존 IE에서 발생했습니다.

저에게 파이어 폭스의 불일치는 버그입니다 (바닐라 설치에는이 특성이 있습니다). 다른 프로토콜 (HTTP 대 HTTPS)은 다른 출발점과 동일합니다. 동일한 프로토콜의 하위 도메인도 다른 출발점으로 간주되므로 FF13은 AJAX 요청을 확실히 작성하지 않아야합니다.

CORS (Cross-Origin Resource Sharing)를 설정하지 않았습니까? FF13을 지원하도록 테스트 한 유일한 브라우저는 FF13입니까?

+0

CORS가 요청을 보내야합니다. 응답에'Access-Control-Allow-Origin' 헤더가 포함되어 있는지 확인 하시겠습니까? 따라서 요청이 이루어지고 서버가 원하는대로 처리 할 수 ​​있지만 헤더를 함께 보내지 않으면 응답 데이터를 브라우저에 반환 할 수 없습니다. – Paulpro

+0

이것은 레일즈 애플리케이션이며이 양식은 jQuery를 통해 레일스의 'data-remote' 기능을 사용합니다. CORS 설정 없음 & 응답에'Access-Control-Allow-Origin' 헤더 없음 (문제가있는'Set-Cookie' 헤더가 있음에도 불구하고). 버전 13은 내가 테스트 한 유일한 Firefox입니다. –

+0

rails/Ruby에만 해당하는 사항은 브라우저 수준에서 시행되는 것과 동일한 원본 정책에 영향을 미치지 않아야합니다. 따라서 기술 스택은 중요하지 않습니다. 쿠키를 직접 설정하지 않으면'set-cookie' 헤더가 세션 쿠키 일 가능성이 높습니다. – WickyNilliams

관련 문제