当前位置: 首页 > 知识库问答 >
问题:

为什么Fetch API get ch()总是抛出异常?[重复]

强金鑫
2023-03-14

我正在尝试从跨域服务器检索图像。我在WAMP堆栈服务器上使用自签名证书,但无论我使用哪种标头,get ch()总是在飞行前检查后抛出异常。以下是取自Chrome的请求/响应标头:

General
Request URL: https://starlightproductions.ddnsfree.com/clientgalleries/michael.laver.suncorp.com.au/Snapper/holycrap.jpg
Request Method: OPTIONS
Status Code: 401 Unauthorized
Remote Address: 220.237.95.254:443
Referrer Policy: strict-origin

Response Headers
Connection: Keep-Alive
Content-Length: 381
Content-Type: text/html; charset=iso-8859-1
Date: Wed, 11 Dec 2019 23:28:36 GMT
Keep-Alive: timeout=5, max=100
Server: Apache
WWW-Authenticate: Basic realm="Client Only"
X-Frame-Options: SAMEORIGIN

Request Headers
Date: Wed, 11 Dec 2019 23:28:36 GMT
Keep-Alive: timeout=5, max=100
Server: Apache
WWW-Authenticate: Basic realm="Client Only"
X-Frame-Options: SAMEORIGIN
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Access-Control-Request-Headers: authorization,content-type
Access-Control-Request-Method: GET
Connection: keep-alive
Host: starlightproductions.ddnsfree.com
Origin: http://dev.qwikfoto.com
Referer: http://dev.qwikfoto.com/
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

这是调用get ch()的javascript代码:

let hdr = new Headers();

hdr.append(\'Content-Type\', \'application/octet-stream\');
hdr.append(\'Accept\', \'application/octet-stream\');
hdr.append(\'Authorization\', \'Basic \' + window.btoa(\'' . $xrefrec['ftp_username'] . ':' .
        $xrefrec['ftp_password'] . '\'));
hdr.append(\'Origin\',\'http://dev.qwikfoto.com\');

const myresponse = await fetch(document.getElementById(thm.photo_id).href, {
    mode: \'cors\',
    credentials: \'include\',
    method: \'GET\',
    headers: hdr
});

以下是图像所在目录中 .htaccess 的标头:

Header set Access-Control-Allow-Methods: "GET, POST, OPTIONS"
Header set Access-Control-Allow-Credentials: true
Header set Cache-Control: no-cache
Header set Access-Control-Expose-Headers: "Content-Length"
Header set Access-Control-Allow-Headers: "*"
# Header set Access-Control-Allow-Headers: "Authorization, Origin, Content-Type, Accept, X-Auth-Token"
Header set WWW-Authenticate: "Basic realm='Client Only'"
Header set Access-Control-Allow-Origin: http://dev.qwikfoto.com
Header set Vary: Origin
Header set Access-Control-Max-Age: 84600

我已经为此工作了好几天。我什至尝试过在 apache 配置文件中使用 RewriteRule 指令强制使用 http 200 的响应代码。我真的很感激这里的一些帮助。

谢谢

共有1个答案

牛骞仕
2023-03-14

好像问题出在你的自签证书上。

当涉及到< code>fetch和SSL时,< code>fetch的行为有点像用户使用浏览器时的行为,这意味着它不允许从无效或自签名的证书中提取资源,除非用户采取措施告诉浏览器可以这样做。

如果你正在构建一个面向用户的网站,我猜你将无法让你的用户采取手动步骤来允许浏览器这样做。

我最好的建议是使用像Let's Encrypt这样的东西来代替自签名证书。

 类似资料:
  • 下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!

  • 问题内容: 我陷入了这个非常奇怪的问题。在客户端中,我传递的对象是 在服务器中,我正在读取对象 我的问题是为什么我会出现EOF异常。我对对象输入流的理解是,当我调用readObject()时应该阻塞直到获得对象,这样才能知道是否达到了eof?请帮忙! 这就是我创建对象流的方式 另外,在我写完对象并刷新之后,我应该关闭流。我不会关闭它,因为对象是从代码的不同部分开始一个接一个地定期编写的。 问题答案

  • 问题内容: 我睡眠不足吗?以下代码 抛出此错误: 这绝对是行不通的!有人可以解释一下吗? 问题答案: 在规格中它说: 每当调用其origin-clean标志设置为false的canvas元素的toDataURL()方法时,该方法都必须引发SECURITY_ERR异常。 如果图像来自其他服务器,我认为您不能使用toDataURL()

  • 我正在尝试使用HttpWebRequest验证Url的存在。我发现了一些基本上这样做的示例: 但是,如果url确实损坏了,它不会返回响应,而是抛出异常。 我将代码修改为: 这似乎终于做到了我想要的。 但是我想知道,为什么请求会抛出异常,而不是返回带有NotFindstatus代码的响应?

  • 针对每个循环处理跳过迭代的控件的问题,我发现允许在不断变化的集合上进行迭代: 例如,以下内容: 投掷 InvalidOperationException:集合已修改;枚举操作可能无法执行。 然而,在a。Net窗体,您可以执行以下操作: 它跳过元素,因为迭代器运行在更改的集合上,而不会引发异常 错误?如果基础集合发生变化,迭代器是否需要抛出? 所以我的问题是为什么对不断变化的的迭代不会抛出Inval

  • 是否可以在不使用Exceptions处理超文本传输协议状态500响应的情况下使用Spring RestTem板?