相关疑难解决方法(0)

为什么我的JavaScript在所请求的资源上出现"No'Access-Control-Allow-Origin'标头"错误,当Postman没有?

我试图通过连接到Flask内置的RESTful API来使用JavaScript进行授权.但是,当我发出请求时,我收到以下错误:

XMLHttpRequest无法加载http:// myApiUrl/login.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.

我知道API或远程资源必须设置标题,但为什么在我通过Chrome扩展程序Postman发出请求时它可以正常工作?

这是请求代码:

$.ajax({
    type: "POST",
    dataType: 'text',
    url: api,
    username: 'user',
    password: 'pass',
    crossDomain : true,
    xhrFields: {
        withCredentials: true
    }
})
    .done(function( data ) {
        console.log("done");
    })
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
        alert(textStatus);
    });
Run Code Online (Sandbox Code Playgroud)

javascript jquery same-origin-policy cors flask-restless

2320
推荐指数
29
解决办法
399万
查看次数

Access-Control-Allow-Origin多个源域?

有没有办法允许多个跨域使用Access-Control-Allow-Origin标头?

我知道了*,但它太开放了.我真的想只允许一些域名.

举个例子,像这样:

Access-Control-Allow-Origin: http://domain1.example, http://domain2.example
Run Code Online (Sandbox Code Playgroud)

我已经尝试过上面的代码,但它似乎不适用于Firefox.

是否可以指定多个域,或者我只坚持一个?

.htaccess http xmlhttprequest cross-domain cors

985
推荐指数
17
解决办法
74万
查看次数

对于隐私敏感的上下文,是否有任何浏览器将原始标头设置为"null"?

原产地规范指示Origin头可以被设置为"空".这通常在请求来自用户计算机上的文件而不是来自托管网页时完成.该规范还声明,如果请求来自"隐私敏感"上下文,则Origin可以为null.

我的问题:什么是"隐私敏感"环境,是否有任何浏览器表现出这种行为?

以下是Origin规范的全部措辞:

每当用户代理从"隐私敏感"上下文发出HTTP请求时,用户代理必须在Origin头字段中发送值"null".

注意:本文档未定义隐私敏感上下文的概念.生成HTTP请求的应用程序可以将上下文指定为对隐私敏感,以对用户代理如何生成Origin头字段施加限制.

cors

29
推荐指数
2
解决办法
1万
查看次数

为什么Firefox不总是为POST请求发送HTTP Origin头?

我正在探索HTTP Origin检查作为Drupal的CSRF保护的想法,网址https://www.drupal.org/node/1803712

现在我正在测试Origin标头如何通过POST请求到达,但Firefox不会在用户登录表单提交上发送Origin标头.Chromium和Chrome工作正常,他们发送Origin标头.

Firefox版本是36.0.1.我还测试了一个干净的Firefox安装,因为我想我的某些浏览器插件可能会抑制Origin标头,但没有运气 - 也没有Origin标头.

是否有文档页面描述Firefox何时发送Origin标头,何时不?

firefox http

15
推荐指数
1
解决办法
3097
查看次数

发送自定义User-Agent字符串以及我的标题(获取)

fetch在React中使用API,我从JSON端点下载了一些数据.

作为我的请求的一部分,我想发送一个自定义User-Agent字符串.目前,当我检查我的请求时,UA字符串是:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

由于我在每个请求的标题中都有用,我想我只是附加User-Agent到header对象,就像它在网上各个 地方所说:

fetch(url, {
    Accept: 'application/json',
    'Content-Type': 'application/json',
    'User-Agent': 'MY-UA-STRING' // <---
})
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我有一种感觉,这是因为fetch api中存在一个错误,正如此处以及此处此处所报告的那样.

任何人都有关于如何通过UA作为headers使用的一部分的工作fetch

javascript header http fetch reactjs

10
推荐指数
1
解决办法
9860
查看次数

SCORM:安全错误:阻止具有来源的框架访问同一来源的跨来源框架

我知道有很多类似的问题,唯一的区别是我从 **同一 ** 域提供的两个页面都得到了这个问题。这可以在下面的示例中看到。

    Uncaught DOMException: Blocked a frame with origin "https://content.samba.net" from accessing a cross-origin frame. 
  
at findAPI (https://content.samba.net/00/07/19-10/scorm_support/scorm_support.js:14:10)   
at getAPI (https://content.samba.net/00/07/19-10/scorm_support/scorm_support.js:61:13)   
at https://content.samba.net/00/07/19-10/SCORM.htm:200:16
Run Code Online (Sandbox Code Playgroud)

这种情况不应该只发生在不同域之间吗?

================================编辑=================== ====================
当然,在我发布几秒钟后,我发现了这个问题。SCORM 包具有定位 SCORM API 的功能。它看起来像顶部和开启器。就我而言,开窗器位于不同的域中,它试图访问该域。
为了历史的缘故,我会把它留下来。我的回答有详细信息。

javascript iframe cross-domain scorm same-origin-policy

6
推荐指数
1
解决办法
3713
查看次数

我应该在OPTIONS请求之后的实际请求中向任何非允许的来源发送任何Access-Control-Allow-Origin标头吗?

我对它是如何工作有一个大概的了解.如果请求的"origin"标头有效(允许),则返回相同的"ORIGIN"值

但我不知道:

  1. 对于OPTIONS请求之后的实际请求,我是否需要包含我返回到客户端以进行预检请求的完全相同的Access-Control-Allow-Origin标头?当实际请求中存在"ORIGIN"标头时,服务器代码是否只需要执行此操作?(在下面的代码中,我没有检查请求是OPTIONS /预检请求还是实际请求,我假设相同的代码可以同时适用于两者并且没有任何损害).

(更多细节,因为"当请求的凭据模式为'include'时,响应中'Access-Control-Allow-Origin'标头的值不能是通配符'*',所以我需要来自的'ORIGIN值'要求重新回复.

  1. 如果不允许使用ORIGIN,我应该返回什么?

    根本不包括Access-Control-Allow-Origin标头?
    或setHeader("Access-Control-Allow-Origin","")或setHeader("Access-Control-Allow-Origin","null")?

public class CORSResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
    MultivaluedMap<String, Object> headers = responseContext.getHeaders();

    String origin = requestContext.getHeaderString("Origin"); 


String origin = requestContext.getHeaderString("Origin");

    URL originUrl = null;
    try {
        if (StringUtils.hasText(origin)) {
            originUrl = new URL(origin);

            Pattern hostAllowedPattern = Pattern.compile("(.+\\.)*mydomain\\.com", Pattern.CASE_INSENSITIVE);

            if (hostAllowedPattern.matcher(originUrl.getHost()).matches()) {
                headers.add("Access-Control-Allow-Origin", origin);
            } else {
                headers.add("Access-Control-Allow-Origin", "");
            }
            headers.add("Vary", "Origin");
        }

        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        headers.add("Access-Control-Allow-Headers",
Run Code Online (Sandbox Code Playgroud)

cross-domain cors preflight

5
推荐指数
1
解决办法
1667
查看次数

Access-Control-Allow-Origin 等于 origin 但浏览器仍然拒绝访问...为什么?

我有一个应用程序(React SPA),它调用应用程序域的不同子域上的一堆服务器,即:

  • 网络应用程序位于foo.bar.com,
  • api.foo.bar.com并与和交谈media.foo.bar.com

访问 时api.foo.bar.com,我从浏览器(无论是 Edge、Chrome 还是 Firefox)收到错误消息,告诉我 origin ( foo.bar.com) 与响应标头的值不同Access-Control-Allow-Origin。然而,通过检查响应,它们是相同的:

在此输入图像描述

(不幸的是,我不得不混淆地址。)

这些应用程序托管在 Kubernetes 上;入口是 NGINX,并且它不提供 CORS(启用 cors 的注释为 false)。这两个应用程序 (apimedia) 都是 Express 应用程序,并且都具有允许特定来源的相同 CORS 配置。

我想知道这是否与重定向有关 - 对media...端点的调用返回一个重定向(302),其位置是一个api...地址。

除此之外,我不知道可能出了什么问题。有些事情是肯定的,因为所有浏览器都同意我的请求应该被阻止(由于来源)。

在所有情况下,我都会多次检查地址是否有拼写错误、结尾的正斜杠等。我使用OPTIONScURL 和 Postman 调用这些端点,使用所有标头或仅使用其中几个标头。他们总是回答正确的地址。


根据要求提供额外信息:

飞行前请求:

OPTIONS /media/1.0.0/rtsp/hls?feedUrl=https%3A%2F%2Flive.monuv.com.br%2Fa1%2F14298.stream%2Fstr27%2Fchunklist.m3u8%3Fm_hash%3DkhV_hCnKG3nhaNCFaYZxBnoMz-99idQVHiQh80ADW78%253D HTTP/2
Host: media.aiXXXXXXXXXXXXXX.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, …
Run Code Online (Sandbox Code Playgroud)

null redirect cors preflight

5
推荐指数
1
解决办法
5538
查看次数

从网络工作者获取不发送(相同)来源

我正在尝试创建一个 Web Worker 来存储访问令牌并处理 API 调用。我想做的第一件事是从 Web Worker 发出获取请求以获取访问令牌。

用户使用cookies;httpOnly 和 SameSite 已启用,但尚未安全,因为我在 http 上本地运行它。该 cookie 是存储令牌或令牌身份的位置。

我的 api 中有一个端点,我想通过地址来获取访问令牌。然后我可以用它来处理所需的资源。令牌保留在 Web Worker 中并且不会暴露。

我有一个来自该 Web Worker 的 Web Worker(采用 Base64 字符串),我想到达端点以获取访问令牌。我用 fetch 来做到这一点。但是,当我想发送凭据时。CORS 不能设置为“*”。我可以将我的网站的 url(在本例中为 localhost)指定为服务器中的源。

在我的网络工作者中:

const tryFetch = await fetch(authUrl, {
  credentials: "include",
});
Run Code Online (Sandbox Code Playgroud)

然而,传递给服务器的源似乎是“null”。有没有办法解决这个问题或者我正在尝试错误的东西?

Access to fetch at 'http://localhost:3000/api/auth' from origin 'null' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'http://localhost:3000' that is not equal to the supplied origin. Have the server send …
Run Code Online (Sandbox Code Playgroud)

javascript fetch web-worker cors web

3
推荐指数
1
解决办法
1839
查看次数