[.htaccess] .htaccess의 헤더 세트 Access-Control-Allow-Origin이 작동하지 않습니다.

.htaccess헤더 설정이 작동하지 않는 이유를 알 수 없습니다 .

.htaccess파일 내용 :

Header set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "*"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

그러나 내가을 제거 Header하고 추가하면 index.php모든 것이 잘 작동합니다.

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");

내가 무엇을 놓치고 있습니까?



답변

이것은 작동합니다.

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"


답변

기록을 위해 똑같은 문제가 발생했으며 어떤 답변도 효과가 없었습니다.

헤더 검사기 도구를 사용했습니다. http://www.webconfs.com/http-header-check.php

내 IP ( http://192.0.2.1/upload) 로 테스트하고 있었는데 결과 는 다음과 같습니다.

HTTP/1.1 301 Moved Permanently =>
Date => Sat, 10 Jan 2015 04:03:35 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Location => http://192.0.2.1/upload/
Content-Length => 380
Connection => close
Content-Type => text/html; charset=iso-8859-1

리디렉션이 발생했으며 AJAX 요청이 리디렉션을 따르거나 따르지 않습니다.

도메인 끝에 슬래시가 누락 된 것으로 밝혀졌습니다 ( http://192.0.2.1/upload / )

마지막에 슬래시로 다시 테스트했으며 아래에 이것을 얻었습니다. 스크립트에도 슬래시를 추가했으며 이제 작동 중입니다.

HTTP/1.1 200 OK =>
Date => Sat, 10 Jan 2015 04:03:53 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By => PHP/5.3.8
Access-Control-Allow-Origin => *
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers => *
Content-Length => 1435
Connection => close
Content-Type => text/html

이 도구를 사용하여 헤더가 양호한 지 테스트하고 발생하는 문제를 해결하세요.


답변

GoDaddy에 공유 호스팅이 있습니다. 나도이 질문에 대한 답이 필요했고 주변을 검색 한 결과 가능하다는 것을 알았습니다.

.htaccess 파일을 작성하여 작업 페이지와 동일한 폴더에 넣었습니다. .htaccess 파일의 내용은 다음과 같습니다.

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

내 ajax 호출은 다음과 같습니다.

    $.ajax({
        url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
        beforeSend: beforeSendHandler,
        success: completeHandler,
        error: errorHandler,
        // Form data
        data: formData,
        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });

이 기사를 참조하십시오.

.htaccess의 헤더 세트 Access-Control-Allow-Origin이 작동하지 않습니다.


답변

다음에주의하십시오.

 Header add Access-Control-Allow-Origin "*"

모든 사람에게 액세스 권한을 부여하는 것은 전혀 현명하지 않습니다. 알고있는 신뢰할 수있는 호스트 목록 만 허용하는 것이 좋습니다.

Header add Access-Control-Allow-Origin "http://aaa.example"
Header add Access-Control-Allow-Origin "http://bbb.example"
Header add Access-Control-Allow-Origin "http://ccc.example"

문안 인사,


답변

Apache 모듈 헤더 a2enmod 헤더를 활성화했으며 문제가 해결되었습니다.


답변

외부 루트 폴더의 .htaccess에서 시도하십시오.

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

주의 사항 : Header add Access-Control-Allow-Origin “*”이것은 모든 사람에게 액세스 권한을 부여하는 데 전혀 현명하지 않습니다. 다음을 사용해야한다고 생각합니다.

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "http://example.com"
</IfModule>


답변

헤더 검사기 사이트 http://www.webconfs.com/http-header-check.php 에 대한 링크에 대한 Miro의 답변을 +1했습니다 . 사용할 때마다 불쾌한 광고가 표시되지만 그럼에도 불구하고 Access-Control-Allow-Origin 헤더가 있는지 확인하는 데 매우 유용합니다.

내 웹 페이지의 javascript에서 .json 파일을 읽고 있습니다. 내 .htaccess 파일에 다음을 추가하면 IE 11 (버전 11.447.14393.0)에서 내 웹 페이지를 볼 때 문제가 해결되는 것으로 나타났습니다.

<FilesMatch "\.(json)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

또한 /etc/httpd.conf(Apache의 구성 파일)에 다음을 추가했습니다.

AllowOverride All

헤더 검사기 사이트는 Access-Control-Allow-Origin 헤더가 현재 전송되고 있음을 확인했습니다 (Miro에게 감사합니다!).

그러나 Firefox 50.0.2, Opera 41.0.2353.69 및 Edge 38.14393.0.0 은 Access-Control-Allow-Origin 헤더 없이도 파일을 모두 가져옵니다 . (참고 : 내가 사용한 두 도메인이 동일한 IPv4 주소의 동일한 서버에서 호스팅되기 때문에 IP 주소를 확인하고있을 수 있습니다.)

그러나 Chrome 54.0.2840.99m (64 비트)는 Access-Control-Allow-Origin 헤더를 무시하고 실패하고 다음과 같이 잘못보고합니다.

요청 된 리소스에 ‘Access-Control-Allow-Origin’헤더가 없습니다. 따라서 ‘ {mydomain} ‘ 원본 은 액세스가 허용되지 않습니다.

나는 이것이 일종의 “처음”이어야한다고 생각한다. IE가 올바르게 작동합니다. Chrome, Firefox, Opera 및 Edge는 모두 버그가 있습니다. 그리고 Chrome은 최악 입니다. 일반적인 경우와 정반대가 아닌가?