我对它是如何工作有一个大概的了解.如果请求的"origin"标头有效(允许),则返回相同的"ORIGIN"值
但我不知道:
(更多细节,因为"当请求的凭据模式为'include'时,响应中'Access-Control-Allow-Origin'标头的值不能是通配符'*',所以我需要来自的'ORIGIN值'要求重新回复.
如果不允许使用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) 我知道这个问题已经解决,但是使用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: ""}。
请让我知道我在这里做错了吗?
我想从网上获取一份文件xmlHttpRequest.然而,有问题的文字不是utf8(在这种情况下它是windows-1251,但在通用情况下,我肯定不知道).
但是,如果我使用responseType="text"它,就好像字符串是utf8,忽略内容类型中的字符集(导致令人讨厌的混乱).
如果我使用'blob'(可能是我想要的最接近的东西),那么考虑到编码,我可以将其转换为DomString吗?
我遇到了 CORS 问题,问题是我的代码已执行(状态 200),但 Google Chrome 开发者控制台中出现错误。
我的代码:
function callUrl(url) {
var xmlhttp = null;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp !== null) {
xmlhttp.open("POST", url, true);
xmlhttp.withCredentials = true;
xmlhttp.send(JSON.stringify({
}));
} else {
console.error("Your browser does not support XMLHTTP.");
}
}
callUrl('https://www.website.com/tracking?etc...');
Run Code Online (Sandbox Code Playgroud)
XMLHttpRequest 无法加载https://www.website.com/tracking?。当请求的凭据模式为“include”时,响应中“Access-Control-Allow-Origin”标头的值不能是通配符“*”。因此,不允许访问来源“ http://localhost:8888 ”。XMLHttpRequest 发起的请求的凭据模式由 withCredentials 属性控制。
服务器配置:
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Credentials": true,
Run Code Online (Sandbox Code Playgroud) javascript xmlhttprequest cors serverless serverless-framework-offline
当我说:
add_header Content-Security-Policy default-src 'self'; script-src 'self' unsafe-inline; connect-src wss://mysite.com;
Run Code Online (Sandbox Code Playgroud)
在我的标题中。但是 Safari 说:
拒绝连接到 wws://mysite,因为它没有出现在内容安全策略的 connect-src 指令中。[错误] SecurityError(DOM 异常 18):操作不安全。(匿名函数)(myjavascripturl.js)
为什么 Safari 不理解我的 Content-Security-Policy 标头?
查看新的 fetch API,您可以在请求中指定模式字段。来自Mozilla:
The mode read-only property of the Request interface contains the mode
of the request (e.g., cors, no-cors, same-origin, or navigate.) This is
used to determine if cross-origin requests lead to valid responses, and
which properties of the response are readable.
Run Code Online (Sandbox Code Playgroud)
然后是如何使用它:
var myHeaders = new Headers();
var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };
fetch('flowers.jpg', myInit).then(function(response) {
return response.blob();
}).then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});
Run Code Online (Sandbox Code Playgroud)
我不明白为什么您需要具体说明请求本身中如此不言而喻的内容?如果我在客户端网站 …
我正在使用一个 api,如果您在 5 分钟内点击它超过 250 次,它将返回 429,请求太多,响应。计数每五分钟重置一次,所以我一直这样处理:
try
{
return request.GetResponse();
}
catch (Exception e)
{
if (e.Message.Contains("429"))
{
System.Threading.Thread.Sleep(5 * 60 * 1000);
return request.GetResponse();
}
else
{
throw new Exception(e.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
这是处理这种情况的正确方法吗?
我正在使用 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 请求有关,但如何防止这种情况呢?
我在 Heroku 上托管我的 Express API ,在 Netlify 上托管我的客户端客户端。当我在本地尝试注册路由时,我的 cookie 已定义且路由有效。然而,当它投入生产时,cookie 总是返回未定义,并且我的 API 超时。
\n\n请注意,cookie 已从后端成功发送。I\xe2\x80\x99m 能够在开发工具中查看它。此外,cookies,get() 返回一个空对象。
\n\nI\xe2\x80\x99m 使用 Js-cookie。
\n\n我在 Gatsby 中使用 js-cookie。我正在使用 CSURF 来表达 cookie。
\n\n后端:
\n\n//CSURF Config\napp.use(csurf({ cookie: true }));\n\n\n//Route that generates CSRF Cookie\napp.get("/getToken", (req, res) => {\n res.cookie("XSRF-TOKEN", req.csrfToken());\n res.end();\n });\nRun Code Online (Sandbox Code Playgroud)\n\n前端:
\n\n我包括整个注册功能。请注意,这是两个端点调用,一个用于检索 cookie,另一个用于创建用户记录。
\n\n userSignUp = async (email, password, resetForm) => {\n console.log("THis is a test of the emergency..")\n await fetch(process.env.API + "getToken", {\n …Run Code Online (Sandbox Code Playgroud) 我有一个 React 应用程序,它是用“create-react-app”创建的(我也使用 jsdom NPM 包),出于某种原因,该应用程序仅在 Firefox 中在加载时引发错误(在 Chrome 和 Edge 中工作正常)。
这是错误:
ReferenceError: SharedArrayBuffer is not defined
./node_modules/jsdom/node_modules/webidl-conversions/lib/index.js
C:/Or/Web/WorldCovid/WorldCovid/node_modules/jsdom/node_modules/webidl-conversions/lib/index.js:347
344 |
345 | const abByteLengthGetter =
346 | Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get;
> 347 | const sabByteLengthGetter =
348 | Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype, "byteLength").get;
349 |
350 | function isNonSharedArrayBuffer(V) {
Run Code Online (Sandbox Code Playgroud)
经过一番谷歌搜索,我发现:
“为了使SharedArrayBuffer在Firefox中,去about:config中和javascript.options.shared_memory偏好设置为true”(https://github.com/ggerganov/kbd-audio/issues/9)
的问题是它已经启用为true。
以前有人遇到过这个问题吗?谢谢。
更新:
尝试转换为:
const shared = new SharedArrayBuffer(1024);
const abByteLengthGetter =
Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get;
const sabByteLengthGetter =
Object.getOwnPropertyDescriptor(shared.prototype, "byteLength").get;
Run Code Online (Sandbox Code Playgroud)
仍然得到相同的错误(与 SharedArrayBuffer 对象不同的行)。
javascript firefox reactjs cross-origin-embedder-policy cross-origin-opener-policy
javascript ×6
cors ×3
fetch-api ×2
reactjs ×2
ajax ×1
c# ×1
cookies ×1
cross-domain ×1
cross-origin-embedder-policy ×1
datatables ×1
express ×1
firefox ×1
frontend ×1
get ×1
http-headers ×1
jquery ×1
nginx ×1
preflight ×1
rest ×1
safari ×1
serverless ×1
serverless-framework-offline ×1
utf-8 ×1
websocket ×1