- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
一如既往,我会尽可能地把我的问题说得甜美而干净。
我必须将 CORS 作为需求请求发送,我正在通过 $.ajax 进行发送,它看起来像这样:
$.ajaxSetup({
beforeSend: function (jqXHR, options) {
options.url = Utils.setUrlHostname(options.url);
options.xhrFields = {
withCredentials: true
};
jqXHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
}
});
在服务器端(php - zend 框架)我正在处理这样的 header :
public function OPTIONS_ProxyAction()
{
$this->getResponse()->setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET, POST, PUT, DELETE');
$this->getResponse()->setHeader('Access-Control-Allow-Headers', 'Content-Type, x-requested-with');
$this->getResponse()->setHeader('Access-Control-Allow-Credentials', 'true');
$this->getResponse()->setBody(null);
$this->_helper->viewRenderer->setNoRender(true);
}
预检请求 header 看起来不错,我得到 200 OK:
请求 header :
Host: domain1111.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: https://domain2222.com
Access-Control-Request-Method: GET (this is seen as OPTIONS in network tab)
Access-Control-Request-Headers: x-requested-with
Connection: keep-alive
Cache-Control: max-age=0
和响应头:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-Requested-With, Content-Type
Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE
Access-Control-Allow-Origin: https://domain2222.com
Cache-Control: max-age=0, s-maxage=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/html
Date: Thu, 11 Jun 2015 08:40:42 GMT
Etag: "d41d8cd98f00b204e9800998ecf8427e"
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Keep-Alive: timeout=5, max=100
Pragma: no-cache
Server: Apache
Vary: X-CDN
X-Frame-Options: SAMEORIGIN
X-Ua-Compatible: IE=edge,chrome=1
我得到的是空响应,这很好,并且一个新请求被发送到相同的地址,但是方法是 GET 而不是 OPTIONS,它看起来像这样:
请求 header :
Host: domain1111.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: https://domain2222.com/some/request
Origin: https://domain1111.com
Cookie: s1=533C36A9095C003A;
BGUID=some complicated guid here
Connection: keep-alive
Cache-Control: max-age=0
和响应:
Access-Control-Allow-Origin: https://domain2222.com
Cache-Control: max-age=0, s-maxage=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-Length: 3278
Content-Type: application/json
Date: Thu, 11 Jun 2015 08:40:43 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Keep-Alive: timeout=5, max=99
Pragma: no-cache
Server: Apache
Vary: X-CDN
X-Frame-Options: SAMEORIGIN
问题是在发送真实请求后,我进入了 Firefox:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://domain1111.com/some/request. (Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials')
在 Chrome 中也类似:
XMLHttpRequest cannot load https://domain1111.com/some/request. Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials.
这些错误发生在第二个 CORS 请求完成时。所以在发送第一个预检请求后,它返回 200 OK 和一个空响应,这很好;发送第二个请求后,我收到上面列出的错误,没有返回任何数据。
此外,Firefox 中的“响应”选项卡向我显示此消息:
SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 on the JSON data
我不确定在第二次请求期间是否也发送了属性“withCredential”,也许服务器没有返回:
'Access-Control-Allow-Credentials', 'true'
为什么它只发生在 OPTIONS 请求中?
无论请求方法是什么,我都应该从服务器返回这些 header 吗?或者 ajaxSetup 有问题?也许它不应该在第二个 CORS 请求中发送“withCredentials: true”?
更新:
The problem has been fixed by adding Access-Control-Allow-Credentials: true, to all responses returned by the server (PUT, GET, POST, DELETE, OPTIONS)
最佳答案
根据W3C CORS docs , §7.1.5第 3 步,预检和实际请求都必须执行“资源共享检查”。来自 §7.2定义该检查的位置:
- If the response includes zero or more than one
Access-Control-Allow-Origin
header values, return fail and terminate this algorithm.[..]
- If the
omit credentials
flag is unset and the response includes zero or more than oneAccess-Control-Allow-Credentials
header values, return fail and terminate this algorithm.
换句话说,预检和实际响应都必须包含 Access-Control-Allow-Origin
header ,如果使用它,还包含 Access-Control-Allow-Credentials
header 。
关于javascript - CORS - 预检请求后发出的请求期望 'Access-Control-Allow-Credentials' 为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779630/
我正在使用 git-credential-store与我的存储库。但是我注意到当我运行 git push 它启动git-credential-cache--daemon 并且在我关闭终端之前不会关闭它
这些是我正在使用的导入: import com.novell.ldap.*; import java.io.UnsupportedEncodingException; 我正在尝试进行一个非常简单的密码
我的 hdp 集群配置了带有 AD 的 kerberos。所有 HDP 服务帐户都生成了主体和 key 表,包括 spark。 我知道服务帐户没有密码并设置为未过期。现在在执行 kinit -kt s
服务器不能只是将临时凭证“升级”为 token 凭证并保留相同的 key 和 secret 吗? 然后,客户端可以在收到来自服务器的说明临时凭据已“升级”的回调后立即开始进行经过身份验证的调用。 当然
Apache Camel 与 AWS S3 接口(interface)良好,但我发现它没有正确构建的场景。回顾我在网上看到的所有 Camel 示例,我从未见过有人在非本地环境中使用推荐的行业标准 AW
大家好,我遇到了一个问题,这是我第一次为支付门户设置 Mutial SSL,下面的代码是我正在使用的代码,我得到的错误是: System.Web.Services.Protocols.SoapExce
我创建了一个 server.keystore,然后是一个 client.keyStore 和一个 client.crt,我用它来做 client.truststore 别名为 devmyserverk
我正在尝试从 AngularJS 页面连接到 ASP.NET Web-API Web 服务,我得到以下信息 Credentials 标志为“true”,但“Access-Control-Allow-C
Windows 更新后,出现保存凭据问题,rdp 总是询问密码,无法保存。原因是 Windows Defender Credential Guard。如何解决这个问题? 最佳答案 我的解决方案在这里,
我正在使用 react-native-facebook-login 包来登录用户。目前流程运行良好,在用户输入他们的详细信息后,我成功地看到了一个带有他们信息的对象。 当我尝试使用 signInWit
在使用 Sourcetree 时,我不断收到错误 git: 'credential-oskeychain' is not a git command. See 'git --help'. 我很确定应该
“根账户凭证”和“IAM 用户凭证”之间有什么区别? 还有一个问题: 根据描述,建议使用“IAM 用户凭据”,但无法使用“IAM 用户凭据”在 S3 中访问 你能解释一下这是为什么吗? 最佳答案 您的
Spring 3.1Tomcat 6.* 我正在制作一个 Spring 3.1 webapp,使用 LDAP 进行身份验证。 我用我编写的 JNDI 风格的 Java 程序(引述如下)测试了 LDAP
Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenti
我正在使用 firebase Admin SDK,但我在运行时收到此错误: Error:(22, 36) java: cannot access com.google.auth.Credentials
vscode 1.45.1版本使用克隆存储库时,我收到“Bad credentials”。最近我在github上换了用户名。可能就是这个原因。我如何告诉vs code?
我已经为 Classroom API 实现了 Java QuickStart,但在运行时收到错误消息“java.io.FileNotFoundException:未找到资源:/credentials.
我正在使用 Jenkins 主/从设置。我希望 Jenkins 有一个凭证信息“来源”。不是散落在各处的 key /密码。 因此,我不想在 Jenkins 中定义我的 SCM(使用来自 Jenkins
使用azure aks get-credentials --admin可以获取kubernetes管理配置文件,azure aks get-credentials只能获取azure上的用户配置文件。
使用azure aks get-credentials --admin可以获取kubernetes管理配置文件,azure aks get-credentials只能获取azure上的用户配置文件。
我是一名优秀的程序员,十分优秀!