GVKun编程网logo

Angular11 Web 应用程序被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许 access-control-allow-origin

27

如果您想了解Angular11Web应用程序被CORS策略阻止:在预检响应中Access-Control-Allow-Headers不允许access-control-allow-origin的知识,

如果您想了解Angular11 Web 应用程序被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许 access-control-allow-origin的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers、Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers、Access-Control-Allow-Origin angularjs到php、Access-Control-Allow-Origin 不允许 Origin null的各个方面,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

Angular11 Web 应用程序被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许 access-control-allow-origin

Angular11 Web 应用程序被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许 access-control-allow-origin

如何解决Angular11 Web 应用程序被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许 access-control-allow-origin?

我正在尝试使用带有 angular 11 的 reddit api 在本地开发一个网络应用程序,我正在尝试使用以下链接中的说明获取身份验证令牌:Reddit OAuth2 docs

但是,我遇到了一些问题。

我已经设置了我的标头以包含服务中的常用方法,例如:

httpOptions = {
headers: new HttpHeaders({
  "Content-Type": "application/x-www-form-urlencoded","Access-Control-Allow-Origin": "*","Access-Control-Allow-Methods": "GET,HEAD,OPTIONS,POST,PUT","Access-Control-Allow-Headers": "Origin,X-Requested-With,Content-Type,Accept,x-client-key,x-client-token,x-client-secret,Authorization",})

};

我设置了在服务中检索身份验证令牌的函数:

getRedditAuthToken() {
 console.log("Auth token");
 return this.http.get<any>(this.redditAuthUrl,this.httpOptions);
}

redditAuthUrl 的设置参数取自 reddit 的 oAuth 文档:

https://www.reddit.com/api/v1/authorize?client_id=CLIENT_ID&response_type=TYPE&
state=RANDOM_STRING&redirect_uri=URI&duration=DURATION&scope=ScopE_STRING

最后,服务正在被组件检索:

getRedditAuthToken(): void {
    this.redditService.getRedditAuthToken().subscribe((data) => {
      console.log(data);
    });
  }

虽然在尝试访问身份验证令牌(在网络检查器上找到)时出现以下错误:

Access to XMLHttpRequest at ''https://www.reddit.com/api/v1/authorize.compact?client_id=<client_id>&response_type=code&state=<random_string>&redirect_uri=http://localhost:4200/reddit&duration=temporary&scope=identity'' from origin ''http://localhost:4200'' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response
GET https://www.reddit.com/api/v1/authorize.compact?client_id=<client_id>&response_type=code&state=<random_string>&redirect_uri=http://localhost:4200/reddit&duration=temporary&scope=identity net::ERR_Failed
ERROR HttpErrorResponse {headers: HttpHeaders,status: 0,statusText: "UnkNown Error",url: "https://www.reddit.com/api/v1/authorize.compact?cl…ost:4200/reddit&duration=temporary&scope=identity",ok: false, …}

我曾多次尝试解决方案,例如使用代理 json 文件启动 angular、修改 httpHeaders、测试其他 reddit oAuth 令牌检索(使用 post 方法),但我总是遇到相同的 CORS 问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

我正在尝试使用发布请求将文件发送到我的服务器,但是当它发送时会导致错误:

Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。

所以我用谷歌搜索了错误并添加了标题:

$http.post($rootScope.URL, {params: arguments}, {headers: {    "Access-Control-Allow-Origin" : "*",    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"}

然后我得到错误:

Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin

所以我用谷歌搜索,我能找到的唯一类似问题是提供了一个半答案,然后作为离题关闭。我应该添加/删除哪些标题?

答案1

小编典典

服务器* (POST 请求被发送到)需要 在其响应Access-Control-Allow-Headers中包含标头(等)。将它们放入来自客户的请求中没有任何效果。您应该从 POST 请求中删除“Access-Control-
Allow-…”标头。
*

这是因为由服务器指定它接受跨域请求(并且它允许Content-Type请求标头等)——客户端无法自行决定给定服务器应该允许 CORS。

请求者(网络浏览器)可以通过发送“OPTIONS”请求(即不是您想要的“POST”或“GET”请求)“预检”测试服务器的同源策略是什么。如果对“OPTIONS”请求的响应包含“Access-
Control-Allow-…”标头,允许您的请求使用的标头、来源或方法,则请求者/浏览器将发送您的“POST”或“GET” ‘ 要求。

(晦涩的注释:) Access-Control-Allow-… 具有值“ ”,而不是列出允许的特定来源、标头或方法。 但是,我使用的旧 Android
WebView 客户端不支持 ‘
‘ 通配符,并且需要在响应 OPTIONS 请求的 Access-Control-Allow-Headers
标头中列出的特定标头。

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers

如何解决Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers?

(POST请求发送到的 Access-Control-Allow-Headers) 需要包含标头(等)。将它们放入客户的请求中无效。

这是因为服务器需要指定它接受跨域请求(并允许Content-Type请求标头,依此类推)–客户端无法自行决定给定服务器应允许CORS。

解决方法

我正在尝试使用发布请求将文件发送到服务器,但是在发送请求时会导致错误:

Access-Control-Allow-Headers不允许请求标头字段Content-Type。

所以我搜索了错误并添加了标题:

$http.post($rootScope.URL,{params: arguments},{headers: {
    "Access-Control-Allow-Origin" : "*","Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS","Access-Control-Allow-Headers": "Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With"
}

然后我得到错误:

Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin

所以我用谷歌搜索,唯一能找到的类似问题是半答案,然后关闭主题。我应该添加/删除哪些标题?

Access-Control-Allow-Origin angularjs到php

Access-Control-Allow-Origin angularjs到php

我的场景由两个webserver组成,一个是本地的,一个是远程的.

本地Web服务器(Apache)处理一个Web应用程序,我想在其中向远程Web服务器(Lighttpd)发出ajax请求.

Ajax请求使用angularjs $http.

var req = {
    method: 'POST',url: 'http://url/myPHP.PHP',headers: {
        'Authorization': 'Basic ' + btoa('username:password'),'Content-Type': 'application/x-www-form-urlencoded'
    },xhrFields: {
       withCredentials: true
    },crossDomain: true,data: xmlString
}

$http(req).then(function () {
    console.log("OK!");
});

远程PHP脚本是:

<?PHP
    echo "You have CORS!";
?>

不幸的是我有一个

401 Unhauthorized
XMLHttpRequest cannot load http://url/myPHP.PHP. Response to    preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8888' is therefore not allowed access. The response had HTTP status code 401.

远程Web服务器具有.htpasswd身份验证模式启用和配置的CORS请求.

关注一个lighttpd.conf

setenv.add-response-header = ( "Access-Control-Allow-Origin" => "*" )

解决方法

要使add-response-header在lighttpd中工作,必须在server.modules中启用mod_setenv.但是,您必须在mod_status之前启用此mod_setenv.

server.modules = (
    # ...
    "mod_fastcgi","mod_rewrite","mod_redirect","mod_setenv",## before mod_status
    "mod_status",# ...
)

或者,您可以使用PHP输出cors标头

<?PHP
header("Access-Control-Allow-Origin: *");
?>

我还想补充一点,如果您要发送http basic / digest auth数据,则不能使用通配符作为原点.您必须使用实际的源域

setenv.add-response-header = ( "Access-Control-Allow-Origin" => "example.com" )
setenv.add-response-header = ( "Access-Control-Allow-Credentials" => "true" )

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

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

我制作了一个小的 xslt 文件来创建一个名为 weather.xsl 的 html 输出,代码如下:

<!-- DWXMLSource="http://weather.yahooapis.com/forecastrss?w=38325&u=c" --><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"exclude-result-prefixes="yweather"xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"><xsl:output omit-xml-declaration="yes" indent="yes"/><xsl:strip-space elements="*"/><xsl:template match="/">    <img src="{/*/*/item/yweather:condition/@text}.jpg"/></xsl:template></xsl:stylesheet>

我想将 html 输出加载到 html 文件中的 div 中,我尝试使用 jQuery 执行如下操作:

<div id="result"><script type="text/javascript">$(''#result'').load(''weather.xsl'');</script></div>

但我收到以下错误:Access-Control-Allow-Origin 不允许 Origin null。

我已经阅读了有关向 xslt 添加标头的信息,但我不知道该怎么做,所以任何帮助都将不胜感激,如果无法以这种方式加载 html
输出,请提供有关其他方法的建议这样做会很棒。

答案1

小编典典

Originnull是本地文件系统,因此这表明您正在加载load通过file:///URL 进行调用的 HTML
页面(例如,只需在本地文件浏览器或类似文件中双击它)。

大多数浏览器将同源策略应用于本地文件,甚至禁止从与文档相同的目录加载文件。(过去是
Firefox 允许相同的目录和子目录,但不再允许.

基本上,将 ajax 与本地资源一起使用是行不通的。

如果您只是在本地测试一些您将真正部署到 Web 的东西,而不是使用本地文件,请安装一个简单的 Web 服务器并通过http://URL
进行测试。这为您提供了更准确的安全图片。您的 IDE 很可能内置了某种服务器(直接或通过扩展),让您只需在 IDE 中点击“运行”并启动服务器并提供文件。

今天关于Angular11 Web 应用程序被 CORS 策略阻止:在预检响应中 Access-Control-Allow-Headers 不允许 access-control-allow-origin的讲解已经结束,谢谢您的阅读,如果想了解更多关于Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers、Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers、Access-Control-Allow-Origin angularjs到php、Access-Control-Allow-Origin 不允许 Origin null的相关知识,请在本站搜索。

本文标签: