programing

교차 도메인(하위 도메인) 에이잭스 요청에 대한 질문

telecom 2023. 3. 1. 09:30
반응형

교차 도메인(하위 도메인) 에이잭스 요청에 대한 질문

예를 들어 http://www.example.com/index.html에서 메인 페이지를 로드했다고 칩시다.이 페이지에는 http://n1.example.com//message?message=hello에 Ajax 요청을 하는 js 코드가 있습니다.응답이 수신되면 메인 페이지의 div가 응답 본문으로 업데이트됩니다.

인기 있는 브라우저 모두 사용할 수 있습니까?

편집:

분명한 해결책은 www.example.com 및 n1.example.com 앞에 프록시를 배치하고 http://www.example.com/n1의 서브리소스로 전송되는 모든 요구가 http://n1.example.com/로 프록시 되도록 설정하는 것입니다.

교차 도메인은 완전히 다른 주제이다.그러나 교차 하위 도메인은 비교적 쉽습니다.document.domain을 부모 페이지와 iframe 페이지 모두에서 동일하게 설정하기만 하면 됩니다.

document.domain = "yourdomain.com"

자세한 내용은 이쪽

주의: 이 기술사용하면 도메인의 부모로부터 받은 iframe과만 대화할 수 있습니다.XMLHttpRequest에 의해 송신된 오리진은 변경되지 않습니다.

최신 브라우저는 모두 CORS를 지원하므로 이 추가 기능을 활용해야 합니다.

이것은 간단한 핸드쉐이크 기술로 동작합니다.즉, 송수신된HTTP 헤더를 통해 서로 신뢰관계를 통신하는 2개의 도메인입니다.XSS 및 기타 악의적인 시도를 피하기 위해 동일한 오리진 정책이 필요하기 때문에 오랫동안 기다려 왔습니다.

크로스 오리진 요구를 개시하기 위해서, 브라우저는 요구를 오리진HTTP 헤더와 함께 송신합니다.이 헤더의 값은 페이지를 제공한 사이트입니다.예를 들어, http://www.example-social-network.com의 페이지가 online-personal-calendar.com의 사용자 데이터에 액세스하려고 한다고 가정합니다.사용자의 브라우저가 CORS를 구현하면 다음 요청 헤더가 전송됩니다.

출처 : http://www.example-social-network.com

online-personal-calendar.com 가 요구를 허가하면, 응답으로 Access-Control-Allow-Origin 헤더를 송신합니다.헤더 값은 허용되는 원본 사이트를 나타냅니다.예를 들어, 이전 요청에 대한 응답에는 다음이 포함됩니다.

Access-Control-Allow-Origin : http://www.example-social-network.com

서버가 크로스오버 요구를 허용하지 않을 경우 브라우저는 online-personal-calendar.com 응답이 아닌 example-social-network.com 페이지로 오류를 전달합니다.

모든 페이지에 대한 접근을 허용하기 위해 서버는 다음 응답 헤더를 발송할 수 있습니다.

액세스 제어 허가 발신지: *

다만, 시큐러티가 염려되는 상황에서는 적합하지 않을 수 있습니다.

아래 Wiki 페이지에서 매우 잘 설명되었습니다.http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

또 다른 솔루션은 타겟 도메인을 가리키는 스크립트태그를 DOM에 동적으로 삽입/삭제하는 것입니다.대상이 json을 반환하고 콜백을 지원하는 경우 이 작업은 작동합니다.

결과를 처리하는 기능:

<script type="text/javascript">
  function foo(result) {
    alert( result );
  }
</script>

AJAX 요구를 실행하는 대신 다음과 같은 것을 동적으로 삽입합니다.

<script type="text/javascript" src="http://n1.example.com/echo?callback=foo"></script>

또 다른 회피책은 도메인의 php(예를 들어) 페이지로 ajax 요청을 전송하고 해당 페이지에서 서브도메인에 cURL 요청을 작성하는 것입니다.

내가 찾은 가장 간단한 해결책은 당신의 서브도메인에 php를 만들고 풀패스를 사용하여 당신의 원래 함수파일을 그 안에 포함시키는 것입니다.

예:

www.domain.com/ajax/this_is_where_the_php_is_called.php

하위 도메인:

sub.domain.com

작성 : sub.domain.com/I_need_the_function.php

내부에는 기능이 필요합니다.php는 포함만 사용합니다.

include_once/server/path/public_called/this_is_where_the_called.called.";

이제 javascript에서 sub.domain.com/I_need_the_function.php으로 전화하세요.

var sub="";
switch(window.location.hostname)
{
case "www.domain.com":
sub = "/ajax/this_is_where_the_php_is_called.php";
break;
case "domain.com":
sub = "";
break;
default: ///your subdomain (or add more "case" 's)
sub = "/I_need_the_function.php";
}


xmlHttp.open("GET",sub,true);

그 예는 내가 만들 수 있는 한 간단하다.더 나은 형식의 경로를 사용할 수 있습니다.

이게 도움이 됐으면 좋겠네요.여기에는 문제가 없습니다.또, 원래의 파일을 호출하고 있기 때문에, 편집은 모든 기능에 적용됩니다.

새로운 아이디어: 교차 서브도메인(www.domain.com 및 sub.domain.com)을 필요로 하며 Apache를 작업하고 있는 경우.일이 훨씬 쉬워질 수 있어서브도메인이 실제로 public_domains(sub.domain.com = sub.domain.com )의 서브디렉토리인 경우 www.domain.com/ajax/?request=domains가 있는 경우 다음과 같은 작업을 수행할 수 있습니다.www.domain.com/ajax/?request=domains

저에겐 마법처럼 작용하고, 바보 같은 해킹이나 프록시, 어려운 일을 몇 가지 Ajax 요청만으로 할 수 없습니다!

크로스 서브 도메인용 솔루션을 작성해, 애플리케이션에 대응하고 있습니다.양쪽에서 iframe과 setting document.domain="domain.com"을 사용했습니다.다음 사이트에서 솔루션을 찾을 수 있습니다.

https://github.com/emphaticsunshine/Cross-sub-domain-solution

언급URL : https://stackoverflow.com/questions/648899/a-question-about-cross-domain-subdomain-ajax-request

반응형