itsource

Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.

mycopycode 2023. 10. 29. 19:41
반응형

Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.

다음과 같은 코드로 weather.xsl이라는 HTML 출력을 만들기 위해 작은 xslt 파일을 만들었습니다.

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="yweather"
xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
    <img src="{/*/*/item/yweather:condition/@text}.jpg"/>
</xsl:template>
</xsl:stylesheet>

다음과 같이 html 출력을 jQuery를 사용하여 시도하는 html 파일의 div에 로드하고 싶습니다.

<div id="result">
<script type="text/javascript">
$('#result').load('weather.xsl');
</script>
</div>

하지만 다음과 같은 오류가 발생합니다.Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.

xslt에 헤더를 추가하는 것에 대해 읽었지만 어떻게 해야 할지 잘 모르니 도움을 주시면 감사하겠습니다. htmlout에 로드하는 것이 이런 식으로 할 수 없다면 다른 방법에 대한 조언이 좋을 것 같습니다.

기원.null는 로컬 파일 시스템이므로, 당신이 다음을 수행하는 HTML 페이지를 로드하고 있음을 암시합니다.loadA로 전화를 걸다file:///URL(예: 로컬 파일 브라우저 등에서 두 번 클릭하기만 하면 됨).

대부분의 브라우저는 문서와 동일한 디렉토리에서 파일을 로드하는 것조차 허용하지 않음으로써 동일한 오리진 정책을 로컬 파일에 적용합니다. (Firefox는 이전에는 동일한 디렉토리와 하위 디렉토리를 허용했지만 더 이상 허용하지 않았습니다.)

기본적으로 로컬 리소스와 함께 ajax를 사용하는 것은 효과가 없습니다.

로컬 파일을 사용하지 않고 실제로 웹에 배포할 로컬 테스트만 하는 경우 간단한 웹 서버를 설치하고 다음을 통해 테스트합니다.http://대신 URL.그러면 훨씬 더 정확한 보안 사진을 얻을 수 있습니다.IDE에는 IDE의 "실행"을 눌러 서버를 실행하고 파일을 제공할 수 있는 일종의 서버가 내장되어 있을 수 있습니다(직접 또는 확장자를 통해).

Chrome과 Safari는 로컬 리소스와 함께 axij를 사용하는 데 제한이 있습니다.그래서 이런 오류가 발생하는 겁니다.

Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.

해결책:파이어폭스를 사용하거나 임시 서버에 데이터를 업로드합니다.그래도 Chrome을 사용하고 싶다면 아래 옵션으로 시작합니다.

--allow-file-access-from-files

Chrome에 위 매개변수를 추가하는 방법에 대한 자세한 정보:작업 표시줄에서 Chrome 아이콘을 마우스 오른쪽 단추로 클릭하고 팝업 창에서 Google Chrome을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭하고 바로 가기 탭 아래의 대상 텍스트 상자 안에 위 매개 변수를 추가합니다.아래와 같습니다.

C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

이것이 도움이 되기를 바랍니다!

"웹 서버 실행"이라는 대답은 상당히 어려워 보이지만 시스템에 python(기본적으로 MacOS 및 Linux 배포 환경에 설치된)이 있다면 다음과 같이 간단합니다.

python -m http.server  # with python3

아니면

python -m SimpleHTTPServer  # with python2

그래서 html 파일을 가지고 있다면,myfile.html예를 들어 폴더에mydir, 당신이 해야 할 일은:

cd /path/to/mydir
python -m http.server  # or the python2 alternative above

그런 다음 브라우저를 가리킵니다.

http://localhost:8000/myfile.html

그리고 당신은 끝!웹 보안을 비활성화하거나 로컬 파일을 허용하거나 명령줄 옵션을 사용하여 브라우저를 재시작하지 않고도 모든 브라우저에서 작동합니다.

이 SO 소스에 따르면 https://stackoverflow.com/a/14671362/1743693, 이 문제는 이제 다음 jQuery 명령을 사용하여 부분적으로 해결됩니다.

<script> 
    $.support.cors = true;
</script>

IE10.0.9200에서 사용해 보았는데 바로 작동이 되었습니다(jquery-1.9.0.js 사용).

크롬 28.0.1500.95 - 이 지침이 작동하지 않습니다 (위 링크의 댓글에 David이 불만을 제기함에 따라 이 문제가 전체적으로 발생합니다).

파일에서 파일 액세스를 허용하는 크롬을 실행하는 것은 (위의 Maistora의 주장처럼) 제게 효과가 없었습니다.

Gokhan의 솔루션을 사용하기 위해 약간의 정보를 추가합니다.

--allow-file-access-from-files

이제 Target 텍스트에 위 텍스트를 추가하고 공백을 추가하면 됩니다. 위 속성을 추가한 후 크롬 브라우저의 모든 인스턴스를 닫아야 합니다.이제 이 속성을 추가한 아이콘으로 크롬을 다시 시작합니다.그것은 모두에게 효과가 있을 것입니다.

로컬 html 파일에서 서버에 XHR 요청을 할 수 있는 솔루션을 찾고 있었는데 Chrome과 PHP를 이용한 솔루션을 찾았습니다. (no Jquery)

자바스크립트:

var x = new XMLHttpRequest(); 
if(x) x.onreadystatechange=function(){ 
    if (x.readyState === 4 && x.status===200){
        console.log(x.responseText); //Success
    }else{ 
        console.log(x); //Failed
    }
};
x.open(GET, 'http://example.com/', true);
x.withCredentials = true;
x.send();

의 요청 마이 크롬Origin: null

내 PHP 응답 헤더('null'은 문자열입니다).HTTP_REFERERER는 원격 서버에서 다른 서버로 교차 오리진을 허용합니다.

header('Access-Control-Allow-Origin: '.(trim($_SERVER['HTTP_REFERER'],'/')?:'null'),true);
header('Access-Control-Allow-Credentials:true',true);

서버에 성공적으로 연결할 수 있었습니다.자격 증명 헤더를 무시할 수 있지만 아파치의 경우에는 이 방법이 가능합니다.AuthType Basic가능한

FF와 오페라와의 호환성을 테스트했는데 다음과 같은 경우에 효과가 있습니다.

LAN IP(192.168.0.x) 에서 VM 의 WAN() IP:port
VM LAN IP에서 원격 서버 도메인 이름으로 다시 전환합니다.
현지에서. VM LAN IP / VM WAN IP:port HTML ,
현지에서.HTML 파일을 원격 서버 도메인 이름으로 만듭니다.
뭐 이런 거.

로컬 Javascript 파일을 로드할 수 있습니다(아래 트리에 있음).file:/ source page)에서 source tag를 사용합니다.

<script src="my_data.js"></script>

입력을 자바스크립트로 인코딩하는 경우, 이 경우와 같습니다.

mydata.js:

$xsl_text = "<xsl:stylesheet version="1.0" + ....

(json의 경우 이 방법이 더 쉽습니다) 그러면 원하는 대로 사용할 수 있는 자바스크립트 글로벌 변수에 '데이터'가 있습니다.

Java Spring을 사용하여 웹 서비스를 실행하려면 다음을 추가해야 합니다.@ServletComponentScan바로 위에@SpringBootApplication자동으로 생성된 YouAppApplication.java 파일(메인() 기능이 있는 파일)에서 다음과 같은 구현으로 클래스를 만듭니다.

@WebFilter("/*")
public class AddResponseHeaderFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // ...
    }

    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
        httpServletResponse.addHeader("Access-Control-Allow-Origin", "null");

        httpServletResponse.addHeader("Access-Control-Allow-Credentials", "true");
         filterChain.doFilter(servletRequest, servletResponse);

    }

    @Override
    public void destroy() {
        // ...
    }
}

이 클래스가 Filter를 구현하고 다음을 가지면 클래스의 다른 이름을 선택할 수 있습니다.@WebFilter주석은 다음과 같은 다른 와일드카드를 제공할 수도 있습니다./*따라서 이 필터가 모든 엔드포인트에 적용되는 것은 아닙니다.
@Louis Loudog Trottier다를 ....withCredentials = true;이것이 작동하도록 Ajax 요청을 생성할 때.

언급URL : https://stackoverflow.com/questions/8456538/origin-null-is-not-allowed-by-access-control-allow-origin

반응형