gpt4 book ai didi

javascript - 带凭据的跨域 jQuery ajax 调用

转载 作者:可可西里 更新时间:2023-11-01 01:25:12 25 4
gpt4 key购买 nike

我遵循了以下步骤:

  1. 让服务器允许跨域调用(包含所有 header 和内容)这有效
  2. 用一些跨域调用测试服务器这有效
  3. 让服务器强制证书这有效
  4. 使用浏览器转到服务器上的文件,选择正确的证书并查看文件仍然有效
    现在我们到了精彩的部分
  5. 将跨域调用与证书结合<-- 这不起作用

问题

我正在从浏览器获取证书请求,但是当我选择与使用浏览器时相同的证书时,调用已发出,但我收到 403 Forbidden。

代码

$.ajax({
type: "POST",
xhrFields: {withCredentials: true},
dataType: "xml",
contentType: "text/xml; charset=\"utf-8\"",
url: "https://www.myOtherServer.com/testfile.asp",
});

有什么想法吗?

编辑

Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin 已正确配置。

附加信息

我开始认为它与内容类型有关。当我将其更改为 "text/html" 时,出现了 415 错误,但我确实需要发送 xml,因为它是一个 SOAP 服务器。

响应头

Access-Control-Allow-Cred...    true
Access-Control-Allow-Head... Content-Type, Origin, Man, Messagetype, Soapaction, X-Test-Header
Access-Control-Allow-Meth... GET,POST,HEAD,DELETE,PUT,OPTIONS
Access-Control-Allow-Orig... https://www.mywebsite.com
Access-Control-Max-Age 1800
Cache-Control private
Content-Length 5561
Content-Type text/html; charset=utf-8
Date Wed, 19 Dec 2012 15:06:46 GMT
Server Microsoft-IIS/7.5
X-Powered-By ASP.NET

请求 header

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language nl,en-us;q=0.7,en;q=0.3
Access-Control-Request-He... content-type
Access-Control-Request-Me... POST
Cache-Control no-cache
Connection keep-alive
Host myhoast.com
Origin https://www.mywebsite.com
Pragma no-cache
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0

最佳答案

我最好的猜测是,这不是您的 Javascript 问题,而是您的 CORS 配置问题。您是否使用 Access-Control-Allow-Credentials: true header 设置了服务器? http://www.w3.org/TR/cors/#access-control-allow-credentials-response-header

另请注意,即使设置了 allow-credentials header ,如果 Access-Control-Allow-Origin 为 *,浏览器将不允许响应有凭证的请求,根据这些文档:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials .

编辑:由于 OP 正确设置了 CORS header ,问题似乎是服务器拒绝了带有 403 状态代码的 OPTIONS 请求。 OPTIONS 请求(称为“预检请求”)在某些跨域请求(例如具有 application/xml 内容类型的 POST)之前发送,以允许服务器通知浏览器允许哪些类型的请求。由于浏览器没有看到它期望来自 OPTIONS 请求的 200 响应,因此它不会触发实际的 POST 请求。

关于javascript - 带凭据的跨域 jQuery ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com