JS를 사용하여 가장 간단한 도메인 간 달성 방법

php中世界最好的语言
풀어 주다: 2018-06-04 14:25:06
원래의
1566명이 탐색했습니다.

이번에는 JS를 사용하여 가장 간단한 크로스 도메인을 달성하는 방법과 JS를 사용하여 가장 간단한 크로스 도메인을 달성할 때 주의할 점은 무엇인지 보여드리겠습니다. 다음은 실제 사례입니다.

어느 날 누군가가 나에게 Cors의 원리가 무엇인지 물었습니다. 나는 크로스 도메인에 대해 jsonP만 알고 있었기 때문에 자랑할 기회를 잃을 뻔했습니다.
"지금은 좀 바빠서 나중에 봐요".
똑똑해서 바로 내 작업 스테이션인 바이두바이두바이두로 돌아왔습니다.

동일 전략

진부한 이야기입니다. 우리 가족이 아니라면 당연히 장난을 칠 수 없습니다.
동일한 출처가 아닌 스크립트는 다른 도메인(예: DOM 등)의 페이지 개체에 액세스하거나 작동할 수 없습니다. 동일한 출처 정책에는 동일한 도메인, 동일한 프로토콜 및 동일한 포트라는 세 가지 동일한 출처가 필요합니다. .

교차 도메인 방식

이 글에서는 jsonP와 cors만 소개합니다.

jsonP

<!-- 开发环境版本,包含了用帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
로그인 후 복사

vue 문서에 vue.js를 도입하는 방식입니다. script 태그를 사용하면 다른 도메인의 JS 파일을 직접 요청할 수 있는 것을 알 수 있습니다. 이 경우 이 기능을 사용하여 도메인 간을 달성할 수 있습니다.

간단한 서버 구축

nodejs+express를 사용하여 간단한 서버를 구축하세요. 몇 줄의 코드로 충분합니다.

const express = require('express');const app = express();
app.get('/user',(req,res)=>{  console.log('user');
  res.send(‘success’);
})
app.listen(3000,()=>{  console.log('start');
});
로그인 후 복사

서버를 시작하세요. 그런 다음 테스트 함수를 작성하고 먼저 ajax를 사용해 보세요.

function getUserAjax(){  let xhr= new XMLHttpRequest();
  xhr.open("GET","http://127.0.0.1:3000/user",true);
  xhr.send();
}
로그인 후 복사

Chrome 콘솔에서 getUserAjax 함수를 실행하세요.

JS를 사용하여 가장 간단한 도메인 간 달성 방법

거부되어 브라우저가 성공적으로 성공하지 못한 것을 볼 수 있습니다. 이때 jsonP를 사용해야 합니다. 스크립트 태그 자체가 도메인 전체에 걸쳐 JS 파일을 요청할 수 있기 때문입니다.

function getUser(){  let dom = document.createElement('script');
  dom.src = "http://127.0.0.1:3000/user";  document.body.appendChild(dom);
}
로그인 후 복사

콘솔에서 getUser()를 실행하세요.

JS를 사용하여 가장 간단한 도메인 간 달성 방법

성공에는 정의가 없습니다. 브라우저가 도메인 전반에 걸쳐 '성공'을 얻은 것을 볼 수 있습니다. script 태그로 로드된 JS는 즉시 실행되며, 성공 여부가 정의되지 않아 해당 오류가 보고되었습니다. 이때까지는 분명했습니다. 프런트 엔드에서 요청을 보내면 콜백과 같은 함수 이름이 백엔드로 전달되고 백엔드는 이 함수인 callback(info)을 반환합니다. 이런 방식으로 브라우저는 데이터를 수신한 후 콜백 함수와 마찬가지로 즉시 콜백 함수를 실행합니다. 즉시 수정 시작:
프런트 엔드 코드:

function callback(info){
  alert(info);
}function getUser(){  let dom = document.createElement('script');
  dom.src = "http://127.0.0.1:3000/user?callback=callback";  //url上指明回调函数的名字
  document.body.appendChild(dom);
}
로그인 후 복사

백엔드 코드:

const express = require('express');const app = express();
app.get('/user',(req,res)=>{  let func = req.query.callback;
  res.send(func+'(' + '"success"'+')');
});
app.listen(3000,()=>{  console.log('start');
});
로그인 후 복사

Execute getUser() 성공이 다시 나타납니다. 이것이 jsonP가 작동하는 방식입니다. 백그라운드는 JS 함수를 반환하고, 매개변수를 취하고, 프런트 엔드에서 준비된 함수를 호출합니다. 즉, 요청과 콜백 함수를 보내는 효과가 달성됩니다.

cors

이것은 훨씬 더 간단합니다. 이 오류는 위의 ajax가 도메인 간일 때 보고되었습니다. 요청한 resource에 'Access-Control-Allow-Origin' 헤더가 없습니다.
서버가 돌아올 때 ''Access-Control-Allow-Origin''을 가져오시면 됩니다. 그가 의미하는 것은 요청 소스가 허용된다는 것입니다. 당신은 우리 가족이 아니지만 이번에는 당신을 믿고 열쇠를드립니다.
백그라운드 코드를 수정하세요:

const express = require('express');const app = express();
app.get('/user',(req,res)=>{
  res.header("Access-Control-Allow-Origin", "*");  //设置返回数据的头,代表接受任意源的请求
  res.send('success');
});
app.listen(3000,()=>{
  console.log('start');
});
로그인 후 복사

그런 다음 콘솔에서 위의 getUserAjax()를 호출하세요. 성공. 프런트엔드 코드를 변경할 필요가 없습니다. 그러나 모든 브라우저가 cor를 지원하는 것은 아닙니다.

JS를 사용하여 가장 간단한 도메인 간 달성 방법

jsonP와 cors의 비교

cors는 jsonP와 동일한 목적을 가지고 있지만 jsonP보다 더 강력합니다.
jsonP는 GET 요청만 지원하고 cors는 모든 유형의 HTTP 요청을 지원합니다. jsonP의 장점은 이전 브라우저를 지원하고 CORS를 지원하지 않는 웹사이트에서 데이터를 요청할 수 있다는 것입니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:

js 기본 개선 학습을 위한 기본 데이터 유형

JS를 사용하여 해시 테이블과 순차 목록을 사용자 정의하는 방법

위 내용은 JS를 사용하여 가장 간단한 도메인 간 달성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!