1. ホーム
  2. javascript

[解決済み] Access-Control-Allow-Originで "origin is not allowed "というエラーが表示されるのですが、なぜでしょうか?[重複しています。]

2022-04-28 02:24:52

質問

以下のエラーが表示されます。

Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

を、このコードに置き換えてください。

var http = new getXMLHttpRequestObject();
var url = "http://gdata.youtube.com/action/GetUploadToken";
var sendXML = '<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"'+
    'xmlns:media="http://search.yahoo.com/mrss/'+
    'xmlns:yt="http://gdata.youtube.com/schemas/2007">'+
    '<media:group><media:title type="plain">My First API</media:title>'+
    '<media:description type="plain">First API</media:description>'+
    '<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>'+
    '<media:keywords>first, api</media:keywords></media:group></entry>';
http.open("POST", url, true);
http.setRequestHeader("Authorization", "AuthSub token=" + AccessToken);
http.setRequestHeader("X-GData-Key", "key="+ dev_key);
http.setRequestHeader("Content-Type", "application/atom+xml; charset=UTF-8");

http.onreadystatechange = function() {
    if(http.readyState == 4) {
        alert(http.responseXML);
    }
}
http.send(sendXML);

何が原因で、どうすれば解決するのでしょうか?

どのように解決するのですか?

現在のドメイン外でajaxリクエストを行う場合、Javascriptが制限されます。

  • 例1:ドメインがexample.comで、test.comにリクエストしたい=> できません。
  • 例2:ドメインがexample.comで、inner.example.comにリクエストを出したい=> できません。
  • 例3:ドメインがexample.com:80で、example.com:81にリクエストしたい =>できない
  • EX 4: あなたのドメインは example.com で、example.com にリクエストを出したい => できる。

Javascriptは、悪意のあるスクリプトがリモートサーバーに接続して機密データを送信できないように、セキュリティ上の理由から"same origin policy"によって制限されています。

jsonp は、javascriptの異なる使用方法です。リクエストを行い、その結果がコールバック関数にカプセル化され、クライアントで実行されるのです。これは、htmlのhead部分に新しいscriptタグをリンクするのと同じです(ここでは、自分のドメインとは異なるドメインのスクリプトを読み込むことができることはご存知でしょう)。

ただし、jsonpを使用するためには、サーバーが正しく設定されている必要があります。もしそうでなければ、jsonpを使うことはできず、サーバーサイドプロキシ(PHP、ASPなど)に頼らざるを得ません。このトピックに関するガイドはたくさんあるので、ググってみてください。