programing

파이어폭스 '크로스 오리진 요청 차단' 헤더에도 불구하고

stoneblock 2023. 10. 21. 09:52

파이어폭스 '크로스 오리진 요청 차단' 헤더에도 불구하고

단순한 교차 오리진 요청을 하려고 하는데 Firefox에서 이를 계속 차단하고 있습니다.

오리진 간 요청 차단:[url]에서 동일한 오리진 정책을 사용하면 원격 리소스를 읽을 수 없습니다.이는 리소스를 동일한 도메인으로 이동하거나 CORS를 활성화하여 해결할 수 있습니다.[url]

크롬과 사파리에서도 잘 작동합니다.

이것이 작동할 수 있도록 PHP에 정확한 헤더를 모두 설정했다고 말할 수 있습니다.서버가 응답하는 내용은 다음과 같습니다.

HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html

Angular, jQuery 및 기본 XMLHTTPRequest 개체를 다음과 같이 사용해 보았습니다.

var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()

파이어폭스를 제외한 모든 브라우저에서 작동합니다.누가 도와줄 수 있습니까?

알고 보니 이건 CORS와는 상관이 없는 것으로 드러났습니다. 보안 증명서에 문제가 있었던 겁니다.오해의 소지가 있는 오류 = 4시간의 두통.

크로스 요청을 보낸 서버에 신뢰할 수 없는 인증서가 있다는 것이 문제라는 것을 알게 되었습니다.

다음과 같이 교차 도메인에 연결하려면https, 먼저 이 인증서에 대한 예외를 추가해야 합니다.

차단된 링크를 한 번 방문하고 예외를 추가하면 됩니다.

Firefox의 요청이 메시지로 차단되고 있다는 것을 알고 이 질문을 했습니다.

이유: CORS 요청이 성공하지 못했습니다.

머리를 뽑고 나니 새로 설치된 Firefox 확장 프로그램인 Privacy Badger(프라이버시 오소리)가 요청을 차단하고 있었습니다.

머리를 긁적인 후 이 질문에 도달한 경우 어떤 확장 프로그램을 설치했는지 확인하여 차단 요청이 있는지 확인합니다.

자세한 내용은 MDN에서 CORS 요청이 성공하지 못했습니다.

'진짜' 인증서가 없는 경우(따라서 자체 서명된 인증서를 사용하는 경우) Firefox에서 다음으로 이동할 수 있습니다.

Options > Privacy & Security > (scroll to the bottom) View Certificates > Servers > Add Exception...

거기에 위치를 입력합니다. 예:https://www.myserver:myport

이틀만에 해결책을 찾았습니다 :(

중요 참고: 자격 증명 요청에 응답할 때 서버는 도메인을 지정해야 하며 와일드 카드를 사용할 수 없습니다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials

경고 한 마디.드디어 파이어폭스와 CORS의 문제를 해결했습니다.

저에게 해결책은 이 게시물이었습니다.

정확한 응답 헤더로 Apache에 CORS(크로스 오리진 자원 공유) 설정 | Benjamin Horn을 통해 모든 것을 허용

그러나 Firefox는 Apache 서버(.htaccess 폴더)에서 헤더를 설정한 후 정말 이상하게 동작했습니다.

많이 추가했습니다.console.log("Hi FF, you are here A")무슨 일이 있었는지 확인하기 위해서 입니다.

처음에는 매달린 것처럼 보였습니다.xhr.send()이 이 하지 못했다는 것을 되었습니다 하지만 저는 그것이 이 진술에 도달하지 못했다는 것을 알게 되었습니다.다른 것을 배치했습니다.console.log그 직전에 도착하지 않았습니다 - 비록 마지막 사이에 아무 것도 없었음에도 불구하고console.log그리고 새로운 것.2시 사이에 멈췄습니다.console.log.

파일에 이상한 문자가 있는지 확인하기 위해 줄 순서를 바꾸거나 삭제합니다.아무것도 못 찾았어요.

Firefox를 다시 시작하면 문제가 해결되었습니다.

네, 도청기를 설치해야겠네요.단지 너무 이상해서 재현 방법을 모릅니다.

공지사항: 그리고, 아, 저는 그냥 그 일을 했습니다.Header always set부품이 아니라 부품Rewrite*부!

이후의 경우 서버 로그를 확인하여 요청된 리소스가 200을 반환하는지 확인합니다.

비행 전 ajax 요청에서 적절한 헤더가 모두 반송되는 비슷한 문제가 발생했는데, 브라우저에서 CORS 헤더가 불량하여 실제 요청이 차단되었다고 보고했습니다.

알고 보니 요청한 페이지가 잘못된 코드로 인해 500 오류를 반환하고 있었는데 CORS를 통해 가져올 때만 오류가 발생했습니다.브라우저(Chrome과 Firefox 모두)에서 페이지가 500을 반환했다고 말하는 대신 Access-Control-Allow-Origin 헤더가 누락되었다고 잘못 보고했습니다.

디버그하려면 가능하면 서버 로그를 확인합니다.Firefox는 콘솔에서 CORS 오류를 반환합니다. 이유는 다양합니다.

그 이유 중 하나는 uMatrix(그리고 NoScript 및 유사한 것으로 추측됨) 플러그인입니다.

우분투 파이어폭스에서 요청 처리에 10초 이상 걸렸을 때 CORS 실패 오류가 발생했습니다.

CORS랑는 상관없습니다.우분투 파이어폭스 구성에 문제가 있습니다.

network.notify.를 false로 변경하여 수정했습니다.


Mozilla 벅스 참조:

https://bugzilla.mozilla.org/show_bug.cgi?id=1238377

https://bugzilla.mozilla.org/show_bug.cgi?id=1235509

제 경우에는 제 ADB였습니다.LOCKER! 어떤 이유에서인지 로컬 호스트에서 활성화되어 Firefox에서 이 오류가 발생했습니다.

플러그인을 비활성화하거나 플러그인제거하면 이 문제가 해결됩니다.

사용자의 경우 광고 차단기가 아니라 다른 Firefox 플러그인일 수 있습니다.먼저 플러그인이 없는 상태에서 익명으로 테스트하여 문제가 있는지 확인한 후 범인을 찾을 때까지 플러그인을 체계적으로 비활성화합니다.

추가하기만 하면 됩니다.

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

.htaccess연결하려는 웹 사이트의 루트에 파일을 저장합니다.

이것을 시도해 보세요, 그것은 당신의 문제를 해결할 것입니다.

  1. php 구성에서 domain.com 에 wwwpre를 추가합니다.예를 들어,

    HTTP define('HTTP_SERVER', 'http://domain name with www/');
    HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
    
  2. 이 파일을 .htaccess 파일에 추가합니다.

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]
    

저는 알고보니 제가 그 일을Access-Control-Allow-Origin특정(및 정확)에 대한 응답 헤더host.com하지만 그것은 반환되어야 했습니다.http://host.com대신. 는 어떤 을 합니까파이어폭스는 무엇을 합니까?이것은 묵묵히 GET 요청을 삼키고 상태 0을 XHR로 반환하며, 자바스크립트 콘솔에는 경고가 출력되지 않지만, 다른 유사한 장애에 대해서는 최소한 무언가를 말할 것입니다.아이아이.

저의 경우 CORS 오류는 작은 파일이 아닌 파일 첨부로 POST 요청에서만 발생하고 있었습니다.

많은 시간을 허비한 끝에 Kaspersky Total Control을 사용하던 사용자의 요청이 차단되었음을 알게 되었습니다.

다른 바이러스 백신 또는 방화벽 소프트웨어도 비슷한 문제를 일으킬 수 있습니다.Kaspersky는 요청에 대해 몇 가지 보안 테스트를 실행하지만 SSL EV 인증서가 있는 웹 사이트의 경우에는 이 테스트를 생략하므로 이러한 인증서를 가져오면 이 문제를 제대로 해결할 수 있습니다.

도메인에 대한 보호를 비활성화하는 것은 약간 까다롭기 때문에 다음과 같이 필요한 단계가 있습니다(2020년 12월 기준).설정 -> 네트워크 설정 -> 제외사항 관리 -> 도메인 추가 -> 저장

좋은 점은 차단된 요청을 감지할 수 있다는 것입니다.오류가 비어 있습니다. 상태 및 응답이 없습니다.이렇게 하면 타사 소프트웨어에 의해 차단되었다고 가정하고 몇 가지 정보를 표시할 수 있습니다.

저도 비슷한 문제에 직면했고, 제가 어떻게 고쳤는지 등록하는 것이 타당하다고 생각합니다.

기본적으로 Symfony 3 위에 시스템이 구축되어 있습니다.저는 학습과 수행을 위해 대중이 접근할 수 있는 API인 GoLang을 사용하여 스크립트를 몇 개 작성하기로 결정했습니다.

My Go API는 Json 포맷의 param을 기대하고 있으며, Json 포맷의 응답 또한 반환합니다.

제가 사용하는 GoApi, 대부분 $.ajax (jQuery) 첫 번째 테스트는 속임수였습니다. 유명하지 않은 "Cross-Origin Request Blocked"(크로스 오리진 요청 차단됨) 팝업이 뜨기 시작했습니다. 그런 다음 아파치 콘프, htaccess, php, javascript 및 구글에서 찾을 수 있는 모든 곳에서 "Access-Control-Allow-Origin: *"을 설정하려고 했습니다.

하지만, 같은 좌절감을 주는 실수라도!!!

해결책은 간단했습니다. "GET" 대신 "POST" 요청을 해야 했습니다.

그러기 위해서는 GET을 사용하기 위해 GoLang과 JavaScript 둘 다 조정해야 했습니다! 그것이 완료되면 더 이상 Cross-Origin Request Blocked되지 않습니다.

도움이 되길 바랍니다

PS:

디렉토리 블록에서 Apache 및 Vhost를 사용하고 있습니다.

  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"

기억하세요: "*"는 여러분이 누구의 요청도 받아들일 것이라는 것을 의미합니다!!!(보안 부족일 수 있음) 제 경우에는 퍼블릭 API가 될 것이기 때문에 괜찮습니다.

PS2: 마이헤더

응답 헤더

Access-Control-Allow-Credentials    true
Access-Control-Allow-Headers    Authorization
Access-Control-Allow-Methods    GET, POST, PUT
Access-Control-Allow-Origin http://localhost
Content-Length  164
Content-Type    application/json; charset=UTF-8
Date    Tue, 07 May 2019 20:33:52 GMT

머리글 요청(469B)

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Content-Length  81
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host    localhost:9003
Origin  http://localhost
Referer http://localhost/fibootkt/MY_app_dev.php/MyTest/GoAPI
User-Agent  Mozilla/5.0 (Macintosh; Intel …) Gecko/20100101 Firefox/66.0

앞서 설명한 답변이 도움이 되지 않는다면 백엔드 서버가 작동 중인지 여부를 확인해 보세요. 서버가 다운되고 이 오류가 완전히 오해의 소지가 있는 것으로 드러났습니다.

그 파일들은 스스로 설명하고 있습니다.파일을 만들어서 뭐든지 불러요.저 같은 경우는 jq2.php.

<html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
    // document is made ready so that the program starts when we load this page       
    $(document).ready(function(){

        // it tells that any key activity in the "subcat_search" filed will execute the query.
        $("#subcat_search").keyup(function(){

            // we assemble the get link for the direction to our engine "gs.php". 
            var link1 = "http://127.0.0.1/jqm/gs.php?needle=" + $("#subcat_search").val();

            $.ajax({
                url: link1,
                // ajax function is called sending the input string to "gs.php".
                success: function(result){
                    // result is stuffed in the label.
                    $("#search_val").html(result);
                }
            });
        })   

    });
</script>
</head>

<body>

<!-- the input field for search string -->
<input type="text" id="subcat_search">
<br>
<!-- the output field for stuffing the output. -->
<label id="search_val"></label>

</body>
</html>

이제 우리는 엔진을 포함하고, 파일을 만들고, 원하는 대로 부를 것입니다.제 경우에는 gs.php 입니다.

$head = "https://maps.googleapis.com/maps/api/place/textsearch/json?query="; //our head
$key = "your key here"; //your key
$hay = $_GET['needle'];

$hay = str_replace(" ", "+", $hay); //replacing the " " with "+" to design it as per the google's requirement 
$kill = $head . $hay . "&key=" . $key; //assembling the string in proper way . 
print file_get_contents($kill);

저는 가능한 한 간단한 예를 유지하려고 노력했습니다.그리고 모든 키 누름마다 링크를 실행하기 때문에 API의 할당량이 상당히 빨리 소모됩니다.

물론 데이터를 테이블에 저장하거나 데이터베이스로 전송하는 등 우리가 할 수 있는 일은 끝이 없습니다.

언급URL : https://stackoverflow.com/questions/24371734/firefox-cross-origin-request-blocked-despite-headers