rest api 호출시 cros 도메인 문제 발생..

rest api 호출시 cros 도메인 문제 발생..

QA

rest api 호출시 cros 도메인 문제 발생..

본문

카페24 호스팅 받고있습니다 -php

 

Access to XMLHttpRequest at '~~~api서버 주소~~~' from origin '~~호출서버~~

' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

 

두 도메인 맞지않아 나오는 에러라

header("Access-Control-Allow-Origin: *");

처리를 했습니다. ( 메소드나 , 기타 다른 헤더설정도 해봄)

 

계속 위와 같은 오류로 접근할수 없게 되는데  아래와 같은 테스트를 해보니

 

+ 호출서버 방식

-------- 게시내용과 같은 오류 (크로스도메인문제로 접근안됨) -------

$.ajax({
  url: '~~~api서버 주소~~~',
  type: 'POST',
  data: {'mb_id': 'test', 'mb_pw': '1234'},
  headers: {'Content-Type': 'application/json'},
  contentType:"application/json;charset=UTF-8",

  error: function(){
   alert("에러");
  },
  success: function(response) {
   alert(response);
   //var r=JSON.parse(response);
    //$("#main").html(r.status);
     $("#main").html(response);


  }
 });

----------- 크로스도메인임에도 접근이 되는 방식------------------

 

$.ajax({
  url: '~~~api서버 주소~~~',
  type: 'POST',
  data:$("#frm").serialize() ,
  contentType:"application/x-www-form-urlencoded;charset=UTF-8",
  dataType: 'html',

  error: function(){
   alert("에러");
  },
  success: function(response) {

   //var r=JSON.parse(response);
    //$("#main").html(r.status);
     $("#main").html(response);


  }
 });

 

 위 소스로 테스트 결과

 

headers: {'Content-Type': 'application/json'},
  contentType:"application/json;charset=UTF-8",

 

이부분 때문에 크로스도메인에 걸리는걸 확인했습니다.

rest api 대문에 json 형식으로 통신을 해야하는데

 

이와 비슷한 경험 하신 분 있으면 꼭 좀 답변 부탁드립니다.

 

 

이 질문에 댓글 쓰기 :

답변 6

테스트를 위한 코드이고.. 실제로는 앱에서 호출될때 json 방식으로 호출이 옵니다..
그래서 api서버쪽 (웹) 쪽만 가지고 핸들링 해야합니다..

 

=> 앱에서 호출하시면 저 문제 없을텐데요

=> 앱에서는 도메인 제한이 없어서 크로스도메인 문제는 없어보이네요.

최종적으로는 앱에서 호출되지만, 테스트단계도 있고,
이제 프로젝트 시작단계라 웹에서도 가능하야 합니다..
우선은.
단독 서버를 알아보는 중입니다..

php서버쪽에서 해결할수 있는 방법을 계속 찾고 있습니다.

서버제로님
앱에서 호출하면 크로스도메인 문제가 없다는게 확실하다면 ...

개발테스트는 크롬으로 하고..  크롬브라우져 설정에 "크로스도메인 무시하는 설정" 을
넣어서 개발진행 해도 무방할꺼같다는 생각이 드네요.
이 방법 괜찮은건지..  다른분은 api 만들때 어떻게 작업하시는지..

<VirtualHost *:80>
    DocumentRoot "경로"
    ServerName 도메인
    <IfModule mod_headers.c>
       Header set Access-Control-Allow-Origin "*"
    </IfModule>
</VirtualHost>

 

=> 저동 동일한 문제가 발생한적이 있었던거 같은데 아파치 세팅에 설정하니

=> 서로 다른 도메인에서 호출이 가능했던거 같습니다.

=> 페이지에서 저도 이것저것 해봤는데 잘 안되었던거 같습니다.

Content-Type헤더에 허용되는 유일한 값은 다음과 같습니다.
* application/x-www-form-urlencoded
* multipart/form-data
* text/plain

 

출처 : https://uiandwe.tistory.com/1244

 


검색 결과   위방식만 크로스도메인에 허용되는 방식이라네요.

그럼 json 방식은 어떻게 허용되게 할까요?

 

php 문제가 아니라 javasciprt의 문제라서 브라우저에서 막는거라면 별다른 방법이 없을거예요

 

ajax 로 호출하지 않고 php 로 직접 주소를 호출하면 잘 되실겁니다.

 

내 도메인 php로 상대방 호출하는 페이지를 만드시고 그페이지를 ajax 로 호출하면 되실거 같네요.

답변 감사합니다.
테스트를 위한 코드이고.. 실제로는 앱에서 호출될때 json 방식으로 호출이 옵니다..
그래서 api서버쪽 (웹) 쪽만 가지고 핸들링 해야합니다..

단독서버로 가서 설정을 변경하는 방법을 생각하고있는데.
이부분때문에 단독서버를 쓰는게 맞나 싶습니다..

jsonp로 타도메인으로 데이터를 ajax로 전달하면 상관없이 전달됩니다.

서버제로님
앱에서 호출하면 크로스도메인 문제가 없다는게 확실하다면 ...

개발테스트는 크롬으로 하고..  크롬브라우져 설정에 "크로스도메인 무시하는 설정" 을
넣어서 개발진행 해도 무방할꺼같다는 생각이 드네요.
이 방법 괜찮은건지..  다른분은 api 만들때 어떻게 작업하시는지..

 

=> 웹에서 테스트해서 작동잘한다고 앱에서 잘 된다는 보장이 없기 때문에

=> 안드로이드 스튜디오에서 호출부분만 만들어서 테스트합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 258
QA 내용 검색
filter #api ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT