【问题标题】:Chrome Origin null is not allowed by Access-Control-Allow-OriginAccess-Control-Allow-Origin 不允许 Chrome Origin null
【发布时间】:2013-09-27 12:25:14
【问题描述】:

我已经准备好许多其他人在这里询问的关于起源不允许 blablabla 的帖子,

现在我尝试添加 --Access-Control-Allow-Origin 并启用应用程序甚至禁用安全性,但每次我在 php 页面上尝试我的按钮时,它都会一直显示

Origin null is not allowed by Access-Control-Allow-Origin.

任何人都可以帮助我吗?这是导致问题的代码

page.php

<html land="en">
<head>
    <meta carset="utf-8">
    <link rel="stylesheet" type="text/css" href="style.css";
</head>

<body>
<!-- Document Ready Event -->
<input id="text" type="text" /><input id="submit" type="button" value="Submit" />

<div id="feedback"></div>
    <script src="../jquery-1.10.2.min.js"></script>
    <script src="script.js"></script>
</body>
</html>

Script.js

$('#submit').click( function()
{
var text = $('#text').val();

$.get( 'PHP/reverse.php', { input: text }, function( data )
    {
        $('#feedback').text( data );
    });
});

【问题讨论】:

  • 你在 MS IIS 网络服务器上运行 PHP 吗?
  • 不,我从本地机器运行所有脚本
  • @Canvas — 你在本地机器上运行什么 HTTP 服务器软件?
  • 我正在使用 XAMPP,我已将我的 PHP 文件放在 C:\xampp\htdocs\amit\reverse.php 我还有一个 text.php 将数字作为一个整体添加 html + php 文件一个就行了,但我真的很想让这个工作
  • 测试时浏览器地址栏中会显示什么网址?

标签: javascript php jquery google-chrome


【解决方案1】:

Origin null is not allowed by Access-Control-Allow-Origin 表示您正在尝试对本地文件执行 Ajax。出于安全原因,这是禁止的。即使不是这种情况,您的 PHP 也不会运行,因为 Web 服务器支持 PHP,而不是 Web 浏览器。

您已经安装了网络服务器。您必须通过服务器请求您的页面,而不是直接从您的文件系统访问它们。

使用以http://localhost/ 开头的网址

您需要移动文件,使其位于服务器的 DocumentRoot 下(或重新配置服务器,使其可以从当前位置访问它们)。

【讨论】:

  • 之前,您说您使用的是file:///C:/Users/Canvas/Documents/Important/Learning/Jquery/TuT97-98/GetHTTPRequ‌​est.php。您需要通过 HTTP 访问网页。您的代码还说 'PHP/reverse.php' 这是一个相对 URI,因此在给定 file:// URL 的情况下不会映射到 localhost。
  • 如果您使用的是 HTTP URI,那么您将不会收到提及 origin null 的投诉,因为您的来源不会是 null跨度>
  • Origin 将在 302 上设置为 null 作为 HTTP URI 中的安全措施。如果您请求资源 A 并将您重定向到资源 B,则浏览器将 Origin 设置为 null 以防止泄漏有关原始请求的信息,例如请求资源 A 时,url 中可能存在敏感数据。
【解决方案2】:

我不确定您正在测试哪个浏览器。就我而言,如果我从本地文件(即Origin is null)发送 AJAX 调用,它适用于我的所有浏览器。我猜你不能让它工作的原因是需要一些服务器端编码。

试试这个,将Access-Control-Allow-Origin 标头添加到HTTP 响应中,并将值设置为*。我不确定如何在 PHP 中执行此操作,但这里有一段 Java 代码供您参考。

response.setHeader("Access-Control-Allow-Origin", "*")

【讨论】:

    【解决方案3】:

    这个 chrome 插件允许从任何来源请求任何带有 ajax 的网站。添加到响应 'Allow-Control-Allow-Origin: *' 标头

    https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related

    它对我有用,无需在服务器端进行任何更改。但是,如果它符合您的测试,您应该在请求中更改 withCredentials: false 。

    【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2012-06-07
    相关资源
    最近更新 更多