>  기사  >  백엔드 개발  >  크로스 도메인 PHP의 여러 가지 방법

크로스 도메인 PHP의 여러 가지 방법

王林
王林원래의
2019-09-21 17:55:447442검색

크로스 도메인 PHP의 여러 가지 방법

PHP에서 여러 형태의 도메인 간 구현

1 , JSONP(패딩이 있는 JSON) 원칙

다른 도메인에서 js를 로드하려면 스크립트 src 형식을 사용하세요. 그러나 다른 도메인의 데이터는 태그를 통해 도입되므로 요청한 JSON 형식의 데이터는 js로 실행되어 처리됩니다.

따라서 연산 및 처리를 위해 반환된 데이터를 미리 패키징하고 함수로 캡슐화해야 합니다. 함수 이름은 인터페이스 매개변수를 통해 백그라운드로 전달됩니다. 백그라운드는 함수 이름을 구문 분석하고, 원본 데이터는 이 함수 이름으로 래핑되어 프런트 엔드로 전송됩니다. (JSONP를 구현하려면 해당 인터페이스의 백엔드 협조가 필요합니다.)

예:

<script>function showData(ret){
console.log(ret);
}</script><script src="http://api.jirengu.com/weather.php?callback=showData"></script>

스크립트 src 요청이 백엔드에 도달한 후 백엔드는 콜백 매개변수를 구문 분석하고, 문자열 showData를 얻고, 데이터를 보낸 후 데이터를 반환하고, 이를 showData(즉, showData({"json data"}))로 캡슐화합니다. 프런트엔드 스크립트 태그가 로드됩니다. 데이터를 수신한 후 json 데이터가 showData의 매개변수로 사용되고 함수가 호출되어 실행됩니다.

2. CORS

CORS는 Cross-Origin Resource Sharing(Cross-Origin)을 나타냅니다. 리소스 공유)는 최신 브라우저를 지원하는 ajax 도메인 간 리소스 요청 방법이며 IE는 10 이상을 지원합니다. Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。

实现方式:

当使用XMLHttpRequest发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求,则在返回结果中加入一个响应头:Access-Control-Allow-Origin

구현 방법:

XMLHttpRequest를 사용하여 요청을 보낼 때 브라우저에서 요청이 전송되지 않은 것을 발견했습니다. 동일한 원본 전략을 준수하면 요청 헤더(Origin)가 요청에 추가되고, 요청이 수락되기로 결정되면 일련의 처리가 백그라운드에서 수행됩니다. 반환 결과에 추가됩니다: Access-Control-Allow-Origin; 브라우저는 해당 헤더에 Origin 값이 포함되어 있는지 확인합니다. 그렇다면 브라우저는 응답을 처리하고 우리는 이를 얻을 수 있습니다. 응답 데이터가 포함되어 있지 않으면 브라우저가 이를 직접 거부합니다. 이때 응답 데이터를 가져올 수 없습니다.

예:

server.js

var http = require(&#39;http&#39;)
var fs = require(&#39;fs&#39;)
var path = require(&#39;path&#39;)
var url = require(&#39;url&#39;)http.createServer(function(req, res){
var pathObj = url.parse(req.url, true)

  switch (pathObj.pathname) {
    case &#39;/getNews&#39;:
      var news = [
        "第11日前瞻:中国冲击4金 博尔特再战200米羽球",
        "正直播柴飚/洪炜出战 男双力争会师决赛",
        "女排将死磕巴西!郎平安排男陪练模仿对方核心"
        ]

      res.setHeader(&#39;Access-Control-Allow-Origin&#39;,&#39;http://localhost:8080&#39;)
      //res.setHeader(&#39;Access-Control-Allow-Origin&#39;,&#39;*&#39;)
      res.end(JSON.stringify(news))
      break;
    default:
      fs.readFile(path.join(__dirname, pathObj.pathname), function(e, data){
        if(e){
          res.writeHead(404, &#39;not found&#39;)
          res.end(&#39;<h1>404 Not Found</h1>&#39;)
        }else{
          res.end(data)
        }
      }) 
  }}).listen(8080)
index.html# 🎜🎜#
<!DOCTYPE html><html><body>
  <div class="container">
    <ul class="news"></ul>
    <button class="show">show news</button>
  </div><script>
  $(&#39;.show&#39;).addEventListener(&#39;click&#39;, function(){
    var xhr = new XMLHttpRequest()
    xhr.open(&#39;GET&#39;, &#39;http://127.0.0.1:8080/getNews&#39;, true)
    xhr.send()
    xhr.onload = function(){
      appendHtml(JSON.parse(xhr.responseText))
    }
  })
  function appendHtml(news){
    var html = &#39;&#39;
    for( var i=0; i<news.length; i++){
      html += &#39;<li>&#39; + news[i] + &#39;</li>&#39;
    }
    $(&#39;.news&#39;).innerHTML = html
  }
  function $(selector){
    return document.querySelector(selector)
  }
  </script>
  </html>

3,

postMessage

두 개의 도메인 이름이 있다고 가정합니다(기본 도메인 도메인 이름이 일치하지 않습니다) , iframe 페이지는 액세스 호출을 허용하는 것이며 postMessage를 사용하여 구현할 수 있습니다.

Principle:

A 도메인 이름은 postMessage에 대한 요청을 보내고 B 도메인 이름은 메시지 이벤트를 듣고 데이터를 처리하고 반환합니다

//b域名<script>window.frames[0].postMessage(this.value, &#39;*&#39;);
//*号表示在任何域下都可以接收message
window.addEventListener(&#39;message&#39;, function(e){
  console.log(e.data);
});</script>
위 내용은 참고용입니다!

추천 튜토리얼: #🎜🎜#PHP 비디오 튜토리얼#🎜🎜##🎜🎜##🎜🎜#

위 내용은 크로스 도메인 PHP의 여러 가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.