小编sid*_*ker的帖子

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

CORS - 状态 200,但 Chrome 开发者工具控制台中出现错误

我遇到了 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

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

Safari 不理解我的 Content-Security-Policy 标头

当我说:

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 标头?

safari nginx websocket http-headers content-security-policy

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

fetch API 中的 request.mode 有什么意义,特别是对于 cors 而言?

查看新的 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)

我不明白为什么您需要具体说明请求本身中如此不言而喻的内容?如果我在客户端网站 …

javascript frontend xmlhttprequest cors fetch-api

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

处理 HTTP 429 错误的最佳方法

我正在使用一个 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)

这是处理这种情况的正确方法吗?

c# rest http-status-code-429

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

为什么我会从 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
查看次数

Express + React:CSRF Coo​​kie 在生产中未定义,在本地工作

我在 Heroku 上托管我的 Express API ,在 Netlify 上托管我的客户端客户端。当我在本地尝试注册路由时,我的 cookie 已定义且路由有效。然而,当它投入生产时,cookie 总是返回未定义,并且我的 API 超时。

\n\n

请注意,cookie 已从后端成功发送。I\xe2\x80\x99m 能够在开发工具中查看它。此外,cookies,get() 返回一个空对象。

\n\n

I\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  });\n
Run 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)

javascript cookies express reactjs

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

反应错误:Firefox 中的“SharedArrayBuffer 未定义”

我有一个 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

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