도메인 간 세션 손실 및 다중 OPTIONS 요청 문제 해결

2093 단어
도메인 간 세션 손실과 다중 OPTIONS 요청 문제를 해결합니다.일반적으로 서버에서 도메인 간 허용은 다음과 같이 설정하면 됩니다.
response.setHeader("Access-Control-Allow-Origin", "*"); 
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 

그러나 크로스오버를 할 때session은 분실을 일으킬 수 있다.express에서 클라이언트에게 쿠키를 발급할 때마다 클라이언트가 돌아오지 않기 때문에 매번 새로운 제출과 같다.따라서 도메인 간 설정의 첫 번째 행은 "Access-Control-Allow-Origin"(Access-Control-Allow-Origin)로 변경해야 합니다. "http://192.168.1.240";//은(는) *이 될 수 없으며response.setHeader("Access-Control-Allow-Credentials","true")를 지정해야 합니다.//cookie 도메인 간 지원 여부
해당 Angular4에서도 요청을 시작할 때 머리에서 다음과 같이 설정해야 합니다.
let headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
let options = new RequestOptions({headers: headers, withCredentials: true});
return this.http.post(submitUrl, params, options)....

참고는 다음과 같다:angular 전역과session 실효 문제
OPTIOP 요청 문제, 크로스 도메인 때문에 RFC 문서에 설명되어 있는 바와 같이 클라이언트가 먼저 OPTIONS 요청을 할 것입니다. 왜냐하면 Google의 POST 요청 헤더는Content-Type 유형이 응용 프로그램/json이지 다음 중 하나가 아니기 때문입니다.
  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain

  • 그래서 OPTIONS 요청을 일으킬 수 있다. 내가 끊임없이 시도해 보았지만 내 요청 유형이 응용 프로그램/json이고 OPTIONS 요청을 하지 않는 목적에 도달하지 못했다. 그래서 최종적으로 요청 유형을 응용 프로그램/x-www-form-urlencoded로 바꾸었다. 그러면 내 클라이언트의payload가 서열화된 후에 속성 이름이 되었다. 나는 서버에서 이 속성 이름을 가져와서 반서열화할 수 밖에 없다.
    http.post(submitUrl, params, options) // params       json  
    

    서버측
    var mybody = req.body;
    for(var key in mybody){
        break;
    }
    var params = JSON.parse(key); // params         json  
    

    징그러운 건 알지만 당분간은 이럴 수밖에 없어요.
    관련 읽기 및 참조:
  • CORS 전역 요청에 OPTIONS 요청이 발생한 문제점과 해결 방법을 기록합니다
  • CORS의 POST and OPTIONS 요청
  • fetch가post요청을 하는데 왜options요청을 먼저 보냅니까?
  • HTTP access control (CORS)
  • Fetch
  • Http 요청 중Content-Type 설명 및 Spring MVC에서의 응용
  • 좋은 웹페이지 즐겨찾기