如果您查看的是 website.com 而不是 www.website.com,我在将 SVG 加载到我的网站时遇到了一些问题。该网站在 nginx 服务器上,所以我添加了这个,它解决了这个问题:
location / {
add_header Access-Control-Allow-Origin "*";
}
Run Code Online (Sandbox Code Playgroud)
但是,根据我所阅读的内容,这似乎会导致安全问题?有没有办法只指定 www.website.com 和 website.com 而不是 *?我问是因为我在 PHP 中遇到过这个,它似乎是我需要的,但对于 nginx:
header('Access-Control-Allow-Origin: http://www.website.com');
header('Access-Control-Allow-Origin: http://website.com');
Run Code Online (Sandbox Code Playgroud) 我尝试在浏览器中通过fetch API发布松弛消息:
fetch('https://hooks.slack.com/services/xxx/xxx/xx', {
method: 'post',
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-type': 'application/json'
},
body: JSON.stringify({text: 'Hi there'})
})
.then(response => console.log)
.catch(error => console.error);
};
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
Fetch API cannot load:
https://hooks.slack.com/services/xxxxxxx/xxxxx.
Request header field Content-type is not allowed by Access-Control-Allow-Headers in preflight response.
Run Code Online (Sandbox Code Playgroud)
该怎么办?
我正在尝试使用Vuejs构建一个独立的前端 Web 应用程序,并从我构建的Laravel 9 API中获取数据,当我尝试从前端访问数据(即浏览器控制台中的响应)时:
从源“http://127.0.0.1:8080”访问“http://localhost:8000/api”的 XMLHttpRequest 已被 CORS 策略阻止:“Access-Control-Allow-Origin”标头不存在请求的资源。
1-api.php 文件
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Models\User;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::get('/', function () {
$users = User::all();
return response()->json($users, 200);
});
Run Code Online (Sandbox Code Playgroud)
2- …
今天我在 C++ 中捕获异常时遇到了一个奇怪的行为,有人可以向我解释一下吗?代码片段
#include <iostream>
#include <string>
#include <exception>
int main() {
try {
std::stod("notanumber");
} catch (const std::invalid_argument&) {
std::cerr << "std::invalid_argument" << std::endl;
} catch (const std::out_of_range&) {
std::cerr << "std::out_of_range" << std::endl;
} catch (const std::exception&) {
std::cerr << "Caught by ancestor" << std::endl;
} catch (...) {
auto ptr = std::current_exception();
auto type = __cxxabiv1::__cxa_current_exception_type();
std::cerr << type->name() << std::endl;
std::cerr << "..." << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
写入输出
St16invalid_argument
...
Run Code Online (Sandbox Code Playgroud)
环境详情
C++ 14, disabled …Run Code Online (Sandbox Code Playgroud) 我有两个这样的标签:
<audio id="1" src="lub0.mp4" />
<audio id="2" src="lub1.mp4" />
Run Code Online (Sandbox Code Playgroud)
我想逐个播放它们,即.play()第一个,当它启动第一个事件时,我将.play()第二个.不幸的是,这给了我一个流行音乐.没有点击,有没有正确的crossbrowser方式来做到这一点?
文件本身很好,如果我在ffmpeg中将它们粘在一起,声音是完美的.
感谢名单.
正如你可以看到从这个Bugzilla的线程(和也),Firefox不总是在POST请求发送Origin标.RFC规定不应在某些未定义的"隐私敏感"上下文中发送它.Mozilla 在这里定义了这些上下文.
我想知道的是,这些是Firefox不会发送Origin标头的唯一情况.据我所知它也不会发送它在跨源POST请求(虽然Chrome和IE将),但我无法在文档中确认.它是否在我遗漏的地方列举?
谢谢.
我需要允许来自多个来源的请求:http://localhost:4200,http://localhost:4242,等,nginx的上,入口版本1.7.1。但我无法为多个来源做到这一点,因为nginx.ingress.kubernetes.io/cors-allow-credentials: true不会与nginx.ingress.kubernetes.io/cors-allow-origin: "*". 它会导致浏览器生成 CORS 错误。也许有人有避免此错误的解决方案?
这是我的配置
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
Run Code Online (Sandbox Code Playgroud)
从源“ http://localhost:4200 ”访问“ https://stage.site.com/api/session ”的XMLHttpRequest已被 CORS 策略阻止:“Access-Control-Allow-Origin”的值当请求的凭据模式为“包含”时,响应中的标头不得为通配符“*”。XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。
我有一个很大的 JSON blob,我想预先加载我的网页。为此,我已添加<link rel="preload" as="fetch" href="/blob.json">到我的页面。我也有一个 JS 请求来获取相同的 blob。
这不起作用,控制台报告:
[警告] 资源 blob.json 是使用链接预加载预加载的,但在窗口加载事件的几秒钟内未使用。请确保它不是无故预加载的。
MDN 声称这可以通过添加crossorigin到链接标签来解决。AFAICT,这是不正确的,并且没有任何组合或跨域属性使其真正起作用。
使用来自开发者控制台的 copy-as-curl 命令,似乎没有链接标签和属性的组合,它们将发出与 JS 中的 fetch/XHR 调用相同的请求。
我很想在这件事上犯错。
我正在开发一个Chrome扩展程序,该扩展程序可以将某些网站的请求发送到我控制的API。直到Chrome 73,该扩展程序才能正常工作。升级到Chrome 73之后,我开始出现以下错误:
跨域读取阻止(CORB)使用MIME类型application / json 阻止了跨源响应 http:// localhost:3000 / api / users / 1
根据Chrome关于CORB的文档,如果满足以下所有条件,则CORB将阻止请求的响应:
该资源是“数据资源”。具体来说,内容类型为HTML,XML,JSON
服务器以X-Content-Type-Options: nosniff标头作为响应,或者如果省略标头,则Chrome通过检查文件来检测内容类型是HTML,XML还是JSON之一
CORS不允许显式访问资源
另外,根据“从幽灵和熔化的教训”(谷歌I / O 2018) ,现在看来似乎可能增加是重要的mode: cors,以fetch调用,即fetch(url, { mode: 'cors' })。
为了解决此问题,我进行了以下更改:
首先,我向API的所有响应添加了以下标头:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Origin: https://www.example.com
Run Code Online (Sandbox Code Playgroud)
其次,我fetch()将扩展名的调用更新为如下形式:
fetch(url, { credentials: 'include', mode: 'cors' })
Run Code Online (Sandbox Code Playgroud)
但是,这些更改不起作用。我该如何更改以使我的请求不会被CORB阻止?
google-chrome google-chrome-extension cors cross-origin-read-blocking
我遇到了 Chrome 的情况,经过测试87.0.4280.88,在某些情况下 Chrome 会发送sec-ch-ua和sec-ch-ua-mobile请求标头,尽管chrome://flags/#enable-experimental-web-platform-features设置为“禁用”。
例如:
sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"
sec-ch-ua-mobile: ?0
Run Code Online (Sandbox Code Playgroud)
发生这种情况时,摆脱这些标头的唯一方法是使用参数启动 Chrome --disable-features=UserAgentClientHint。
有人对此有解释吗?据我了解,这些功能仍处于实验阶段,规范正在进行中(https://wicg.github.io/ua-client-hints/)。
cors ×5
fetch-api ×2
audio ×1
browser ×1
c++ ×1
c++14 ×1
client-hints ×1
content-type ×1
cross-domain ×1
fetch ×1
ffmpeg ×1
firefox ×1
html5 ×1
html5-audio ×1
http ×1
http-headers ×1
javascript ×1
kubernetes ×1
laravel ×1
laravel-9 ×1
macos ×1
media-source ×1
nginx ×1
php ×1
preload ×1
rtti ×1
slack ×1
std ×1
vue.js ×1