小编sid*_*ker的帖子

NGINX,ssl,CORS和Access-Control-Allow-Origin值跨站点缓存

我正在尝试编写一个可以同时在http和https上处理两个站点的nginx配置,只要客户端从未访问过两个站点,它似乎就可以工作,但是如果这样做的话,则存在缓存/跨站点问题。

# Allow cross origin
location ~* \.(eot|svg|ttf|woff|woff2|json)$ {
    if ($http_origin ~* (https?://(admin\.)?example\.com(:[0-9]+)?)) {
        add_header 'Access-Control-Allow-Origin' "$http_origin";
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我加载example.com,则一切正常,但是当我加载admin.example.com时,会遇到类似问题

(索引):1 XMLHttpRequest无法加载 http://origin.example.com/js/data-lib/currency.json。“ Access-Control-Allow-Origin”标头具有值“ http:// example”。com”不等于提供的来源。来源'http:// admin。例子 因此,不允许访问“ com”。

据我所知,这是因为浏览器将原始请求及其附带的标头缓存了起来,现在,即使来自服务器的另一个请求允许它,它也拒绝了我。证明是,如果我在Chrome开发者工具中选中了“禁用缓存”,则该问题将永远不会发生。

我该如何解决这个问题?是否可以在一个配置中同时完成多个域+ ssl / http,还是有必要根据请求的域和协议将其拆分?

(对我示例中的可怕空间感到抱歉,显然,StackOverflow认为我在编写示例时试图发布链接)

xss http nginx http-caching cors

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

我应该在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
查看次数

使用Fetch API下载图片

我知道这个问题已经解决,但是使用Fetch API下载图片时遇到问题。
我用来获取图像的代码。

function downloadImage() {
  fetch('https://upload.wikimedia.org/wikipedia/commons/9/98/Pet_dog_fetching_sticks_in_Wales-3April2010.jpg',
    {mode: 'no-cors'})
  .then(response => response.blob())
  .then(blob => {
        console.log(blob);           
  });
}
Run Code Online (Sandbox Code Playgroud)

在这里,console.log我得到回应Blob {size: 0, type: ""}。
请让我知道我在这里做错了吗?

javascript fetch-api

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

使用XMLHttpRequest获取非utf8数据

我想从网上获取一份文件xmlHttpRequest.然而,有问题的文字不是utf8(在这种情况下它是windows-1251,但在通用情况下,我肯定不知道).

但是,如果我使用responseType="text"它,就好像字符串是utf8,忽略内容类型中的字符集(导致令人讨厌的混乱).

如果我使用'blob'(可能是我想要的最接近的东西),那么考虑到编码,我可以将其转换为DomString吗?

javascript xmlhttprequest utf-8

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

在react-player中播放Wistia会导致错误“XMLHttpRequeset构造函数已被篡改”

我有一个像这样嵌入的 ReactPlayer:

<ReactPlayer
          ref={this.ref}
          className="storyPlayer__reactPlayer"
          width="100%"
          height="100%"
          url="https://getleda.wistia.com/medias/bjz07hdxqx"
          playing
          onReady={() => {
            this.setState({ ready: true });
          }}
          onProgress={this.onProgress}
        />
Run Code Online (Sandbox Code Playgroud)

当 url 明显指向 wistia 时,我在控制台中收到以下错误,并且播放器无法工作:

judy XMLHttpRequest 构造函数已被篡改。由于这会影响 CORS/Range XHR 请求,因此已禁用 HLS 播放。要启用 HLS 播放和其他重要功能,请删除更改 window.XMLHttpRequest 定义的代码。

有什么想法导致此问题以及如何解决吗?

xmlhttprequest http-live-streaming reactjs wistia

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

为什么我会从 AJAX 请求中收到间歇性 CORS 错误?

我正在使用 2 个 AJAX 请求调用 2 个 API(托管在同一服务器上),但每隔几次刷新,我就会遇到

无法加载https://someapiurl:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:5000 ”。响应的 HTTP 状态代码为 500。

我将请求封装在“何时-那么”中,因为来自 API 的数据用于填充 2 个数据表。

$.when(
  $.ajax({
    url: oneurl,
    dataType: "text",
    cache: false,
    success: function(csvs) {
      onedata = csvs;
      //do something   
    }
  }),
  $.ajax({
    url: twourl,
    dataType: "text",
    cache: false,
    success: function(csvr) {
      twodata = csvr;
      //do something
    }
  })
).then(function() {
  tableone.rows.add(onedata).draw();
  tabletwo.rows.add(twodata).draw();
});
Run Code Online (Sandbox Code Playgroud)

为什么我只是有时会收到 CORS 错误?我读到这可能与间歇性发出的 PREFLIGHT 请求有关,但如何防止这种情况呢?

ajax jquery get datatables

5
推荐指数
0
解决办法
3598
查看次数

Django digitalocean Spaces 请求的资源上不存在“Access-Control-Allow-Origin”标头

我的 Django 网站使用 Nginx 托管在 digitalocean ubuntu 16.04 中。

我已经在这里设置了 digitalocean CORS 配置https://www.digitalocean.com/docs/spaces/how-to/cors/我在“来源”中添加了我的域名,检查了“允许的方法”中的所有选项,我唯一没有做的就是在“Alowed Headers”中添加标题,因为我不知道要添加什么。

当我使用 digitalocean Spaces(一种基于并与 Amazon S3 非常相似的服务)作为我的静态和媒体文件存储时。请求的资源错误中不存在“Access-Control-Allow-Origin”标头:

CORS 政策已阻止从来源“ https://kjmg.co ”访问“ https://nyc3.digitaloceanspaces.com/kjmgstorage/kjmgstorage/fonts/fontawesome-webfont.woff2?v=4.7.0 ”上的字体:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' https://kjmg.co '。

我尝试使用 django-cors-headers,但我收到:

502 错误网关 nginx/1.10.3 (Ubuntu)

所以只好卸载了。

有朋友知道吗?非常感谢!

django nginx digital-ocean django-cors-headers

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

获取期间无法在 try-catch 中捕获 403

我正在使用 ReactJS 发出放置请求,但是,当我输入错误的电子邮件/密码组合时,即使我试图捕获所有错误并将它们显示在 Chrome 上,我也会将其登录errorDiv:

在此处输入图片说明

async connect(event) {
  try {
    const userObject = {
      username: this.state.userName,
      password: this.state.password
    };
    if (!userObject.username || !userObject.password) {
      throw Error('The username/password is empty.');
    }
    let response = await fetch(('someurl.com'), {
      method: "PUT",
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(userObject)
    });
    let resJSON = await response.json();
    if (!response.ok) {
      throw Error(resJSON.message);
    }
    console.info(resJSON.message);
    console.info(resJSON.message.auth_token);
    window.location = "/ledger/home";
  } catch (e) {
    document.getElementById("errorDiv").style.display = 'block';
    document.getElementById("errorDiv").innerHTML = e;
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript put http-status-code-403 reactjs fetch-api

5
推荐指数
2
解决办法
6898
查看次数

启用 CSP 时要避免哪些与 eval() 相关的函数?

我将我的 React 应用程序与 Webpack 捆绑在一起,并添加了内容安全策略 (CSP)标头(特别是不允许unsafe-evalin script-src)。当然,我确保我的最终包和块不包含eval(). 但是,最新的 Firefox-dev 63.0b10 仍然拒绝加载主块并出现以下错误:

内容安全策略:页面的设置阻止加载自身资源(“script-src”)。来源:调用 eval() 或被 CSP 阻止的相关函数。

好吧,但eval()我的捆绑包中没有。那些“相关功能”可能是什么?

PS 这是一个自我回答的问题,但请随意扩展

javascript eval content-security-policy

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

如何检测 Flutter web CanvasKit 或 HTML 渲染器?

目前 Flutter Web 有两个后端,即 HTML 和 CanvasKit。作为库作者,出于性能原因,我想确定应用程序当前在哪个后端上运行。有没有办法在代码中检测到这一点?

dart flutter canvaskit

5
推荐指数
2
解决办法
3794
查看次数