web-dev-qa-db-ja.com

CORSリクエストがローカルで開かれたhtmlでブロックされました

JavaScriptでデータを表示するHTMLファイルを書き始めました。それは可能な限り簡単に実行されるため、他のローカルhttpサーバーでnodejsを実行したくありません。ブラウザでHTMLファイルを開いたところです(URLはfile:///home/visu/index.htmです)。

オンラインAPIへのjquery ajaxリクエストがindex.htmで実行されるまでは、すべて問題ありません。ブラウザは次のメッセージでリクエストをブロックします:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://x.x.x.x. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing)."

ローカルのhttpサーバーを起動せずに問題を解決するにはどうすればよいですか?

可能な解決策は、「セキュリティフラグなし」でブラウザを起動するか、プラグインでCORSを無効にすることですが、これは常に手動で行わなければならないため、気に入らないのです。

10
Freude

ブラウザがAJAXへのリクエストを現在のページをホストしているサーバーとは異なるサーバーに対して実行する場合)==は、最初にOPTIONS HTTPメッセージを送信します。次のヘッダーを送信するメッセージ:

Origin: http://my-web-server.com

そして、バックエンドサーバーは次のように応答します。

access-control-allow-Origin: http://my-web-server.com

ただし、ウェブサーバーがない場合、ブラウザがそのOriginヘッダーに入力するアドレスはありません。そのため、ブラウザはローカルファイルからのAJAXリクエストの実行を許可していません(コメントで言及されているように、ブラウザのCORSセキュリティを無効にすることができますが、悪意のあるサイトのリスクにさらされる可能性があります)。

2
MondKin

mockAjax呼び出し、またはリバースプロキシとHTTPリライティングが構成されたWebサーバーを起動します。 APIサーバーCORSヘッダーを構成するためのアクセス権がないか、必要です。

Ajax呼び出しをモックしたくない場合は、次のいずれかを使用します。

  1. node-http-proxy
  2. nginx-nodejsがなく、インストールしたくない場合。
0
Milan Jaric