>source

요청의 원점 헤더의 내용을 복사하는 액세스 제어 허용 기원 헤더가있는 HTTP 옵션 메소드에 대한 응답을 시도하고 있습니다.

이것은 분명히 작동하지 않습니다. 내가 알아낼 수없는 이유로 작동하지 않습니다.

: 옵션의 응답은 다음과 같습니다.

Access-Control-Allow-Origin: http://10.0.0.105:9294

후속 얻기 :

Origin:http://10.0.0.105:9294

크롬은 다음과 같습니다.

Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin

wtf not

자세히 ...

Chrome의 개발자 도구 창을보고 요청 헤더는 다음과 같습니다.

OPTIONS /user/kris HTTP/1.1
Host: 10.0.0.104:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://10.0.0.105:9294
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1
Access-Control-Request-Headers: origin, x-requested-with, content-type, accept
Accept: */*
Referer: http://10.0.0.105:9294/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

응답 헤더는 다음과 같습니다.

HTTP/1.0 200 OK
Date: Mon, 13 Aug 2012 11:23:45 GMT
Server: WSGIServer/0.1 Python/2.7.3
Content-Length: 0
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS
Access-Control-Max-Age: 10
Access-Control-Allow-Origin: http://10.0.0.105:9294
Access-Control-Allow-Headers: X-Requested-With, Authorization, X-Huzu-User, Content-Type, Accept
Content-Type: text/html; charset=UTF-8

jQuery가 옵션 요청을 보내고 위의 응답을 가져옵니다. 2 개의 이상한 일이 발생합니다. 옵션 응답 (A 200이되는)은 개발자 콘솔에 오류로 표시됩니다.

OPTIONS http://10.0.0.104:8080/user/kris 200 (OK)

가져 오는 요청이 거부됩니다. 콘솔의 오류 :

XMLHttpRequest cannot load http://10.0.0.104:8080/user/kris. Origin http://10.0.0.105:9294 is not allowed by Access-Control-Allow-Origin.

왜 그런지 알 수 없습니다. 내가 무엇을 잘못하고 있지?

여기에 게시 할 수있는 jQuery code의 최소한의 실패한 예가 없습니다. JavaScript code에 대해 이상한 것은 아무것도 없다고 가정합니다. 단일 jQuery Get () 일뿐 만 아니라 옵션 요청이 위에 게시됩니다. 내 질문은 : 응답에 무엇이 잘못 되었습니까?

scav2021-08-22 00:04:47

저는 나만이거나 호스트 URL (10.0.0.0.104:8080)과 참조 URL (10.0.0.105:9294/) 사이의 차이점이 있습니까?

rene2021-08-22 00:04:47

@ rene 네. My Server는 Local Machine (10.0.0.0.04:8080)에서 실행되는 Python WSGI 응용 프로그램이며 10.0.0.0.105:9294에서 로딩하는 페이지에서 사이트 테스트가 발생합니다. 참조기가 액세스 제어에 어떤 영향을 미치는지 모르겠습니다. 그것이 관련성이 있다고 생각합니까? 그렇다면 어떻게해야합니까?

scav2021-08-22 00:04:47

10.0.0.4에서 브라우저를 시작하면 10.0.0.105에서로드 할 수 없습니다. 이 헤더를 깎아두면 10.0.0.4:8080도 허용 된 주소로 : 액세스 제어 -허용 -원본 : 10.0.0.105:9294

rene2021-08-22 00:04:47

@ Rene : 10.0.0.104:8080 요청의 기원은 아닙니다. 서버 자체입니다. JavaScript는 10.0.0.105:9294에서로드되므로 원점입니다. 아니면 나는 완전히 오해하고 있니? 브라우저로 10.0.0.0.105로 시도하고 도움이되는지 확인하십시오. BTW 일부 브라우저 (FF)는 해당 헤더에서 단일 호스트 만 수락합니다.

scav2021-08-22 00:04:47
  • 답변 # 1

    추가해야합니다액세스 제어 허용 -메소드헤더와 함께액세스 제어 -허용

    와일드 카드의 경우, 액세스 아래 헤더 추가

     res.header("Access-Control-Allow-Origin", "*");
       res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
       res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    

    특정 원점이 허용되는 경우 * 대신에 추가하십시오.

  • 답변 # 2

    OK, 나는 그것을 가지고 있다고 생각합니다. 사전 비행 옵션 요청의 적절한 취급이 필요하지만 은 교차 사이트 자원 요청을 위해 충분하지 않은 에 충분하지 않습니다.

    옵션 요청이 만족스러운 헤더로 되돌아 가면 동일한 URL 에 대한 후속 요청에 대한 모든 응답이 필요한 "액세스 제어 허용 -원점"헤더를 가져야합니다. 그렇지 않으면 브라우저가 필요합니다. 그들을 삼킬 것이며, 그들은 디버거 창에 나타나지 않을 것입니다.

    그래서 브라우저가 옵션 응답에서 몇 가지 문제로 인해 브라우저가 취소 된 처럼 보이지만 실제로 브라우저는 실제 요청에서 응답 헤더를보고 그 다음에 거부합니다.

    @scav +1은 충분히 감사 할 수 없습니다. 디버깅 시간을 저장했습니다!

    alf2021-08-22 00:04:47

    또한 액세스 제어 허용 기원 : * 실제 응답에서 설정 한 경우 사전 비행 옵션 요청에 사용 된 것과 정확히 일치하지 않습니다. ASP DOT NET에서 두 번 더 추가하고 IIS Config에서 한 번로드 code에서 한 번만 추가했습니다. 액세스 제어 허용 원본 : * 프리 비행 옵션에서 한 번 발생했지만 실제 응답에서 두 번 발생 했으므로 크롬이 취소되었습니다.

    Martin Belcher - AtWrk2021-08-22 00:04:47

    이걸 두 번째로 ... 크롬 (v33)은 초기 옵션 응답뿐만 아니라 액세스 제어 허용 -원점 : * etc 헤더에 대한 304 응답이 필요합니다. Firefox (v27)는 마음에 보이지 않습니다

    Anentropic2021-08-22 00:04:47

    취급 작품 -나는 한 파일을 다른 파일을 가졌고, 헤더와 모두 문제를 해결 한 것들을 모두 해결했습니다. :)

    Rog2021-08-22 10:09:35
  • 이전 c++ : 공유 라이브러리 이름 충돌
  • 다음 DockerFile 상위 폴더에서 복사 할 오류가 발생합니다