Access-Control-Allow-Origin 不允许 Chrome Origin null

Posted

技术标签:

【中文标题】Access-Control-Allow-Origin 不允许 Chrome Origin null【英文标题】:Chrome Origin null is not allowed by Access-Control-Allow-Origin 【发布时间】: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 文件一个就行了,但我真的很想让这个工作 测试时浏览器地址栏中会显示什么网址? 【参考方案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 。

【讨论】:

这是非常不安全的——它允许任何网站随你发送请求到他们喜欢的任何地方(见***.com/questions/7564832/…)

以上是关于Access-Control-Allow-Origin 不允许 Chrome Origin null的主要内容,如果未能解决你的问题,请参考以下文章

PHP没有按顺序执行

跨域请求被阻止 Symfony/AngularJS

C# MVC js 跨域

PHP Ajax 跨域问题最佳解决方案

PHP Ajax 跨域问题最佳解决方案

PHP Ajax 跨域问题最佳解决方案