小编sid*_*ker的帖子

尽管配置了正确的 CORS 标头,但仍出现 301 响应“跨源请求被阻止”

我正在使用其公共 api 访问 NASA 图片,但收到此错误:

\n\n
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at\n[nasa api website] (Reason: CORS header \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 missing).\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我检查他们的响应头时, \xe2\x80\x98Access-Control-Allow-Origin\xe2\x80\x99 存在并设置为 \'*\',在这里你可以看到它:

\n\n

响应标头:

\n\n
Access-Control-Allow-Origin *\nAge 0\nCache-Control   max-age=0, private, must-revalidate\nContent-Encoding    gzip\nContent-Type    application/json; charset=utf-8\nDate    Sat, 28 Mar 2020 14:37:13 GMT\nEtag    W/"e26hidden..."\nReferrer-Policy strict-origin-when-cross-origin\nServer  openresty\nStrict-Transport-Security   max-age=31536000; includeSubDomains\nVary    Origin\nVia https/1.1 api-umbrella (ApacheTrafficServer [cMsSf ]), 1.1 vegur\nX-Cache MISS\nX-Content-Type-Options  nosniff\nX-Download-Options  noopen\nX-Frame-Options SAMEORIGIN\nX-Permitted-Cross-Domain-Policies   none\nX-RateLimit-Limit   1000\nX-RateLimit-Remaining   999\nX-Request-Id    00c8c415-37ad-474b-bfbd-8e968d60f37f\nX-Runtime   0.125778\nX-Xss-Protection    1; mode=block\n
Run Code Online (Sandbox Code Playgroud)\n\n

请求标头:

\n\n
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\nAccept-Encoding gzip, deflate, …
Run Code Online (Sandbox Code Playgroud)

javascript xmlhttprequest cors http-status-code-301

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

带有 Google Storage 的 CORS 策略允许来自我的来源,但不存在“Access-Control-Allow-Origin”标头

我是 CORS 配置的新手并试图解决这个问题,但根据文档,我的设置看起来是正确的。我希望你能帮我看看我错过了什么。我的代码正在尝试PUT使用签名 url将 ( ) 文件直接上传到谷歌存储。

访问 XMLHttpRequest ' https://storage.googleapis.com/herdboss-dev.appspot.com/uploads/152/152-owner-152-61.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Go ...' 来自 ' https://herdboss-dev.appspot.com ' 已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。

我已经在我的 Google 存储桶上设置了 CORS 策略(为了可读性添加了换行符):

% gsutil cors get gs://herdboss-dev.appspot.com               
[{
"maxAgeSeconds": 3600, 
"method": ["GET", "HEAD", "PUT"], 
"origin": ["https://herdboss-dev.appspot.com"], 
"responseHeader": ["X-Requested-With", "Access-Control-Allow-Origin", "Content-Type"]
}]
Run Code Online (Sandbox Code Playgroud)

根据我的 chrome 检查员,飞行前请求发生并返回正确的方法和标题(据我所知)。另外,作为旁注,我注意到 PUT 在 OPTIONS 之前出现在我的 Chrome 检查器中,但时间戳显示 OPTIONS 是最先发送的。

在此处输入图片说明

当OPTIONS调用发生时,Google Storage 会正确响应并表示它可以支持我的请求方法GET, HEAD, PUT和来源https://herdboss-dev.appspot.com:

在此处输入图片说明


放置请求

但是,当PUT发生这种情况时,Google Storage 不会以正确的Access-Control-Allow-Origin标头响应:

在此处输入图片说明

我错过了什么或做错了什么?PUT当我进行直接 …

ajax cross-site google-cloud-storage

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

使用gzip的XMLHttpRequest

使用node.js 的请求模块,可以很容易地设置请求并从源中正确压缩压缩数据的请求:

var request = require('request');
var requestOptions = {
    url: 'http://whatever.com/getDataWithCompression',
    gzip: true  // <--- this is all that is required
};
request(
    requestOptions,
    function (error, response, data) {
        // do stuff with data (which is already decompressed)
    }
);
Run Code Online (Sandbox Code Playgroud)

但是,我在html文档中嵌入了一些js代码,这些代码也需要发出http请求,所以没有request我使用的node.js 模块XMLHttpRequest:

var request = new XMLHttpRequest();
request.open('GET', 'http://whatever.com/getData', true);
request.onload = function() {
    // do stuff with request.responseText
};
request.send();
Run Code Online (Sandbox Code Playgroud)

但是,尽管有大量的谷歌搜索,我无法弄清楚如何发出XMLHttpRequest请求和解压缩gzip压缩数据.将不胜感激任何帮助.

javascript xmlhttprequest request httprequest node.js

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

CORS策略是否会阻止非浏览器请求的资源访问?

根据我的理解,使用CORS模块将从Access-Control-Allow-Origin资源中删除标头,导致XmlHttp请求从浏览器失败.

但是,这是否会阻止来自CURL或其他本机应用程序/ Web服务器的Http请求(即通过PHP编写并运行的请求)成功从该资源检索数据?

cors asp.net-core

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

角拦截器和CORS

我正在尝试编写一个拦截器,以使用Angular向所有HTTP请求添加令牌。我大致使用这里给出的食谱-https: //thinkster.io/interceptors

因此代码使用http模块工厂和一个tokenInterceptor()函数。我可以成功地将令牌添加为请求的标头-但是现在,当令牌通过拦截器时,它会被某种CORS阻止机制阻止。我在Chrome控制台中收到此错误-

XMLHttpRequest无法加载http://127.0.0.1:/。对预检请求的响应未通过访问控制检查:请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://127.0.0.1:/ ”。响应的HTTP状态码为403。

我尝试将拦截器如下所示的访问控制允许源标头设置为无效:

config.headers['Access-Control-Allow-Origin'] = '*';
Run Code Online (Sandbox Code Playgroud)

我在网上尝试了一些建议,但没有帮助。要解决与CORS相关的问题,客户端是否需要做任何事情-还是服务器方面的问题?

javascript interceptor http-headers cors angularjs

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

使用带有模糊的 setSelectionRange - Chrome 和 Safari 中的差异

我正在尝试修复具有 onblur 事件侦听器的代码,该事件侦听器执行 setSelectionRange。我注意到,在 Chrome 上使用此功能时,模糊事件会将光标移动到下一个选项卡索引。然而,在 safari 上,光标保留在同一元素上,并且光标移动到 setSelectionRange 中指定的位置。

问题:

  1. 在执行模糊事件时我是否应该使用 setSelectionRange ?
  2. 有什么方法可以在两个浏览器上一致地使用 setSelectionRange 即我可以使 Safari 以与 Chrome 相同的方式工作吗?

下面是一段 hello world 代码,显示了当我在 Safari 和 Chrome 中按 Tab 键移出某个字段时,光标的行为有何不同:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <script>
    function handleBlur() {
      event.target.setSelectionRange(1,1)
    };
  </script>
</head>
<body>
  <input value="First Name" onblur="handleBlur()">
  <input value="Last Name" onblur="handleBlur()">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

javascript safari google-chrome html-input reactjs

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

Meteor BrowserPolicy启用'blob:'来源

我启用了内容安全策略meteor包meteor/browser-policy-common

现在我从ostrio收到这个错误:与CSP相关的文件

拒绝从'blob:http:// localhost:3000/ef628f55-736b-4b36-a32d-b1056adfaa8c ' 创建一个worker,因为它违反了以下内容安全策略指令:"default- src'self'http :// fonts. googleapis.com https://fonts.googleapis.com http://fonts.gstatic.com https://fonts.gstatic.com http://code.ionicframework.com https://code.ionicframework.com ".请注意,'worker-src'未明确设置,因此'default-src'用作后备.

我的实际browser-policy-common配置看起来像这样

import { BrowserPolicy } from 'meteor/browser-policy-common';
// e.g., BrowserPolicy.content.allowOriginForAll( 's3.amazonaws.com' );
// BrowserPolicy.content.allowFontOrigin("data:");

BrowserPolicy.framing.disallow();
BrowserPolicy.content.disallowInlineScripts();
BrowserPolicy.content.disallowEval();
BrowserPolicy.content.allowInlineStyles();
BrowserPolicy.content.allowFontDataUrl();

const trusted = [
  'fonts.googleapis.com',
  'fonts.gstatic.com',
  'code.ionicframework.com',
];

_.each(trusted, (origin) => {
  BrowserPolicy.content.allowOriginForAll(origin);
});
Run Code Online (Sandbox Code Playgroud)

你能告诉我应该更改哪个配置以允许ostrio:文件blob:http:// localhost:3000 / ...工作?

非常感谢!

javascript meteor content-security-policy

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

Google Chrome SRI哈希

有谁遇到过Google Chrome和SRI Hash这个问题,它在控制台窗口中不断抛出相同的错误:

无法找到在“诚信”属性的有效消化资源“ https://fonts.googleapis.com/css?family=Indie+Flower ”与计算SHA-256诚信“yxJPuU / cJi0 / 8FoS + agssT / MtC4P3SGuU + JOzbTejqQ ='。资源已被阻止。

我正在从https://report-uri.io/home/sri_hash生成代码,并且还尝试过https://www.srihash.org/

根据这个网站https://glebbahmutov.com/blog/subresource-integrity/,作者有同样的问题,因此添加了多个散列<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Indie+Flower" integrity="sha256-CoGIUDlbZltnYk6u/wQKXOszdOOWImA1XzSERnNzHlc= sha384-vk+perBz0d5g0G+x7+4BxElvHeiaLNX7jegOI63Bg53TxNYaUzLGEsSQ4AmIwVr4 sha512-h+9Z3+9s3jtPJjXU9phAXFQwYYFSYhXlnkPwkuubLFf5kfeXWIRC32YkRdB08xmut/dJG/RjPoiR/r4DAtm3PQ==" crossorigin="anonymous">

hash google-chrome subresource-integrity

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

CORS环境下Session-Cookie不发送

我拼命地尝试让会话cookie在我的环境中工作,但到目前为止还没有运气。

我的后端是一个节点/express 应用程序,在端口 3000 上运行。CORS 启用如下:

const corsOptions = {
    origin: "http://127.0.0.1:4300",
    allowedHeaders: [ "Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization", "x-xsrf-token" ],
    credentials: true
};
if (isDebug) {
    corsOptions.maxAge = 1;
}
app.use(cors(corsOptions));
Run Code Online (Sandbox Code Playgroud)

我使用快速会话和护照进行登录。会话配置如下:

const options = {
    secret: '...',
    cookie: { httpOnly: true }
};

app.use(session(options));
Run Code Online (Sandbox Code Playgroud)

前端是 Angular 2 SPA,在端口 4300 上运行。当我从 Express 服务器为前端提供服务时,一切都按预期工作。但如果没有,我会遇到以下晦涩的问题:

登录路由返回带有会话 ID 的 cookie。但是到后端的下一个请求是使用不同的会话 ID 发送的?!我不知道这个不同的会话 ID 是从哪里来的。特别是因为会话 cookie 被标记为仅限 HTTP。

HTTP 请求的发送方式如下:

const response = this.http.get(url, { withCredentials: true });
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

  • 确保浏览器允许第三方 cookie …

cookies cross-domain session-cookies express angular

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

如何从安全网站访问不安全的 websocket?

TL;DR:网站通过 HTTPS 提供服务,需要通过未加密的通道 (ws:// url) 访问 WebSockets 服务器。浏览器不喜欢这样。

加密 Websocket 是可能的,但不方便 - 没有可以签署证书的可信机构,因此需要为每个客户端手动安装它。我想把它作为最后的手段。

该网站必须通过 HTTPS 提供服务,并且不能降级为 HTTP。

有没有其他方法可以绕过这个限制?我尝试了内容安全策略,但它不起作用。

security encryption websocket secure-context

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