API 서버와 프런트엔드 서버 간의 도메인 간 문제를 해결하는 방법은 무엇입니까?
브라우저가 HTML, CSS 등 프런트엔드 서버에 정적 리소스를 요청합니다.
그런 다음 브라우저는 api 서버에 ajax 요청을 하여 크로스 도메인 문제를 일으킵니다.
현재 제가 생각하고 있는 해결방안
은 프론트엔드 리소스와 백엔드 리소스를 모두 동일한 도메인 이름으로 두는 것인데 별로 합리적이지 않다고 느껴집니다.
두 번째는 역방향 프록시를 사용하는 방법인데 아직 사용해본 적이 없고 적합한지도 모르겠습니다.
백엔드를 통해 이 문제를 어떻게 해결할 수 있나요?
답글 내용:
브라우저가 HTML, CSS 등 프런트엔드 서버에 정적 리소스를 요청합니다.
그런 다음 브라우저가 api 서버에 ajax 요청을 하여 크로스 도메인 문제가 발생합니다.
현재 제가 생각하고 있는 해결방안
은 프론트엔드 리소스와 백엔드 리소스를 모두 동일한 도메인 이름으로 두는 것인데 별로 합리적이지 않다고 느껴집니다.
두 번째는 역방향 프록시를 사용하는 방법인데 아직 사용해본 적이 없고 적합한지도 모르겠습니다.
백엔드를 통해 이 문제를 어떻게 해결할 수 있나요?
기본적으로 다음과 같은 크로스 도메인 솔루션이 있습니다
JSONP
코르스
창.이름
document.domain
5.location.hash
6.window.postMessage()
자세한 내용은 다음 글을 참고해주세요 https://github.com/rccoder/bl...
API 서버는 크로스 도메인 헤더만 설정하면 됩니다. 스프링으로 작성한다면 다음과 비슷한 코드를 사용하면 됩니다
<code>@Component public class CorsFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "你的前端服务器地址"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, HEAD, PATCH"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, X-Auth-Token, Content-Type"); response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, X-Auth-Token, Content-Type, X-TOTAL-COUNT"); response.setHeader("Access-Control-Allow-Credentials", "true"); if (!"OPTIONS".equalsIgnoreCase(request.getMethod())) { chain.doFilter(req, res); } } @Override public void init(FilterConfig config) throws ServletException { } }</code>
예를 들어 P와 API라는 두 가지 프로젝트가 있습니다
그러면 호출 방법은 비슷합니다: P 프론트 엔드 -》P 백 엔드 -》API
주제의 백엔드가 Nodejs인 경우 다음 코드를 사용하여 크로스 도메인을 구현할 수 있습니다. Express인 경우 미들웨어로 패키징하는 것이 좋습니다
<code>res.setHeader('Access-Control-Allow-Origin', req.headers.origin); res.setHeader('Access-Control-Allow-Credentials', true); res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); res.setHeader('Access-Control-Allow-Headers','x-requested-with,content-type');</code>
가장 좋은 대답은 이미 있습니다. 쿠키 가져오기를 요청할 때 withCredentials: true를 사용하는 것을 잊지 마세요
jsonp 참조 가능
Access-Control-Allow-Origin: 프런트엔드 도메인 이름
개인적으로는 역방향 프록시를 사용하는 것이 가장 안정적이라고 생각합니다
역방향 프록시에는 nginx를 사용하는 것이 더 편리할 수 있지만 도메인 간 응답 헤더 설정은 IE와 완전히 호환되지 않습니다
역방향 프록시는 비교적 간단합니다
노드가 작성한 백엔드 코드가 express/koa를 사용한다면 백엔드 코드에 cors() 미들웨어를 직접 도입할 수 있습니다
역방향 프록시로 nginx를 사용하는 것이 더 편리합니다
API 서버에 js 파일을 넣고 프런트 엔드에서 참조하면 외부 통계 호출 논리와 마찬가지로 도메인 간 문제가 발생하지 않습니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

IIS 및 PHP는 호환 가능하며 FastCGI를 통해 구현됩니다. 1. IIS 구성 파일을 통해 .php 파일 요청을 FastCGI 모듈로 전달합니다. 2. FASTCGI 모듈은 PHP 프로세스를 시작하여 요청을 처리하여 성능과 안정성을 향상시킵니다. 3. 실제 응용 프로그램에서는 구성 세부 사항, 오류 디버깅 및 성능 최적화에주의를 기울여야합니다.

Python과 C는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1) Python은 간결한 구문 및 동적 타이핑으로 인해 빠른 개발 및 데이터 처리에 적합합니다. 2) C는 정적 타이핑 및 수동 메모리 관리로 인해 고성능 및 시스템 프로그래밍에 적합합니다.

golangisidealforbuildingscalablesystemsdueToitsefficiencyandconcurrency

Laravel은 팀이 PHP에 익숙하고 풍부한 기능이 필요한 프로젝트에 적합하지만 Python 프레임 워크는 프로젝트 요구 사항에 따라 다릅니다. 1. Laravel은 빠른 개발과 유연성이 필요한 프로젝트에 적합한 우아한 구문 및 풍부한 기능을 제공합니다. 2. Django는 "배터리 포함"개념으로 인해 복잡한 응용 프로그램에 적합합니다. 3. 플라스크는 빠른 프로토 타입과 소규모 프로젝트에 적합하여 유연성이 뛰어납니다.

Python 프로젝트의 계층 구조에 대한 토론 Python 학습 과정에서 많은 초보자는 일부 오픈 소스 프로젝트, 특히 Django 프레임 워크를 사용한 프로젝트와 접촉 할 것입니다 ...

Python 또는 C를 선택하는 것은 프로젝트 요구 사항에 따라 다릅니다. 1) 빠른 개발, 데이터 처리 및 프로토 타입 설계가 필요한 경우 Python을 선택하십시오. 2) 고성능, 낮은 대기 시간 및 근접 하드웨어 제어가 필요한 경우 C를 선택하십시오.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.
