programing

Ajax 요청: 안전하지 않은 헤더 설정을 거부했습니다.

skycolor 2023. 3. 18. 08:25
반응형

Ajax 요청: 안전하지 않은 헤더 설정을 거부했습니다.

Google Text-To-Speech를 사용하여 오디오를 재생하려고 합니다.따라서 고객님의 엔드포인트에 요청을 게시해야 합니다.Referer및 그User-Agent올바르게 설정되어 있습니다.이 콜에서는 재생할 수 있는 MP3가 반환됩니다.

하지만, 나는 이해해요.Refused to set unsafe header에러입니다.이건 내 암호야이거 어떻게 해?

          $.ajax({
            url: 'http://translate.google.com/translate_tts?ie=UTF-8&q=Hello&tl=en&client=t',
            beforeSend: function(xhr) {
                 xhr.setRequestHeader("Referer", "http://translate.google.com/");
                 xhr.setRequestHeader("User-Agent", "stagefright/1.2 (Linux;Android 5.0)");
            }, success: function(data){
                el.mp3 = new Audio(data);
                el.mp3.play();
            }
          });

그럴수는 없어요.그건 불가능해요.

사양에서는 브라우저가 다음 명령을 중단해야 합니다.setRequestHeadermethod를 설정하려고 하면Refererheader(이전에는User-Agent금지되어 있었지만, 그것이 변경되었습니다.)

설정할 필요가 있는 경우Referer방문자 브라우저가 아닌 서버에서 수동으로 요청해야 합니다.

(즉, 사용자 에이전트나 참조자에 대해 기만적인 태도를 취할 필요가 있는 경우, 소유자가 원하지 않는 방법으로 서비스를 이용하려고 하고 있을 가능성이 높기 때문에, 그것을 존중하고, 그 시도를 중지하는 것이 좋습니다).

jQuery가 XHR을 랩하는 동안 가져오기에도 동일한 규칙이 적용됩니다.

Origin그리고.Referer머리글을 달다GET XMLHttpRequest부터<iframe>

사실, 적어도 일반 웹 페이지에서는 가능합니다.요령은 주사하는 이다.XMLHttpRequest빈칸으로 기능하다<iframe>. 공허의 발생원<iframe> 공교롭게도 about://blank그 결과, 빈 상태가 됩니다.Origin그리고.RefererHTTP 헤더

HTML:

<iframe id="iframe"></iframe>

JavaScript:

const iframe    = document.getElementById('iframe');
const iframeWin = iframe.contentWindow || iframe;
const iframeDoc = iframe.contentDocument || iframeWin.document;

let script = iframeDoc.createElement('SCRIPT');

script.append(`function sendWithoutOrigin(url) {
    var request = new XMLHttpRequest();

    request.open('GET', url);

    request.onreadystatechange = function() {
        if(request.readyState === XMLHttpRequest.DONE) {
            if(request.status === 200) {
                console.log('GET succeeded.');
            }
            else {
                console.warn('GET failed.');
            }
        }
    }
    request.send();
}`);

iframeDoc.documentElement.appendChild(script);

JavaScript 호출:

var url  = 'https://api.serivce.net/';
    url += '?api_key=' + api_write_key;
    url += '&field1=' + value;

iframeWin.sendWithoutOrigin(url);

빈 상태로 송신할 가능성이 있다Origin그리고.RefererHTTP 헤더는 서드파티 API 서비스를 사용할 때 프라이버시를 보호하기 위해 중요합니다.예를 들어, 특정 의학적 상태를 암시하는 것과 같이, 원래 도메인 이름이 민감한 개인 정보를 나타낼 수 있는 경우가 있습니다.https://hypochondriasis-support.org :-D의 관점에서 생각해 보세요.

이 코드는 의 요구를 검사하여 테스트되었습니다..har파일, 에서 저장됨Network탭을 클릭합니다.

를 설정하려고 하지 않음User-Agent헤더가 작성되었습니다.이것도 잘 되는지 코멘트 부탁드립니다.

어떤 브라우저에서는 프로그래머가 자바스크립트 프레임워크(jQuery, Angular 등)에서 값을 설정할 수 없습니다.XMLHttpRequest; AJAX 요청 중.이것들은 금지 헤더라고 불립니다.금지된 머리글

언급URL : https://stackoverflow.com/questions/33143776/ajax-request-refused-to-set-unsafe-header

반응형