问题标签 [cors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7917 浏览

javascript - XmlHttpRequest getAllResponseHeaders() 未返回所有标头

我正在尝试从 ajax 请求中获取响应标头,但 jQuery 的 getAllResponseHeaders xhr 方法仅显示“Content-Type”标头。有谁知道为什么?

这是响应头
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:If-Modified-Since, Cache-Control, Content-Type, Keep-Alive, X-Requested-With, Authorization
Access-Control -Allow-Methods:GET, PUT, POST, DELETE, OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Authorization:apikey="apikey1" AuthenticationToken="62364GJHGJHG"
Connection:keep-alive
Content -长度:240
内容类型:应用程序/json;charset=utf-8
X-Powered-By:Express

这是成功函数

这就是它记录的内容...
Content-Type: application/json; 字符集=utf-8

0 投票
8 回答
43406 浏览

javascript - Socket.IO 中的跨域连接

是否可以跨域方式使用 Socket.IO?如果是这样,怎么做?网络上提到了这种可能性,但在任何地方都没有给出代码示例。

0 投票
1 回答
2205 浏览

jquery - 调用不同域时强制 JQuery 发送 POST 请求而不是 OPTIONS

我需要向不同的域发出 ajax POST 请求(json)(稍后所有内容都将在同一个域中,但我正在 localhost 中进行测试并且还没有访问服务器的权限)。

注意:目前无法对服务器代码进行修改。

我找到了几个解决这个问题的方法:

jsonp:不起作用

Firefox 的 CORS 插件(强制允许不同的域):如果我发送 POST 请求会起作用,但 JQuery 本身正在发出第一个 OPTIONS 请求(因为它可能检测到不同的域)。在这里我有一个问题,因为服务器需要身份验证(对于所有内容,包括 OPTIONS)。

我在 POST 请求的标头中发送身份验证,但 JQuery 并未将其包含在 OPTIONS 请求的标头中,并且由于它是“在后台”完成的,因此我无法添加它。

实际上可能有两种解决方案:

  1. 将身份验证标头添加到 OPTIONS 请求。但如前所述,我自己并没有发送这个请求,所以我不知道在哪里/如何做。

  2. 强制 JQuery 不发出 OPTIONS 请求,而是直接发送 POST(这是该线程的标题)。我搜索了一段时间,但没有找到任何东西。那可能吗?

我正在使用 JQuery 1.7.1 和 $.ajax({...}) 发出请求。

提前致谢。

0 投票
2 回答
2656 浏览

ajax - 在预检请求 (CORS) 中发送凭据

我必须使用内容类型 JSON 制作 CORS。这使得浏览器首先发送一个 OPTIONS 请求,指定来源等等。然后服务器应该用允许的域、方法等来回答。如果一切顺利,浏览器就会发送实际的请求。

我的问题是服务器需要对实际请求进行身份验证,但也需要对 OPTIONS 请求进行身份验证。但是浏览器不会发送带有 OPTIONS 请求的身份验证标头。

我正在使用 JQuery 和 ajax() 函数。我尝试添加“withCredentials:true”,并添加授权标头,但这不会影响 OPTIONS 请求,它仍然不会发送任何凭据。

有任何想法吗?提前致谢。

0 投票
6 回答
12539 浏览

javascript - 使用 file:// 在本地加载的来自移动 WebView 的 CORS cookie 凭据

请耐心等待,这需要一些解释。

我正在帮助构建一个混合移动网络应用程序。主要代码库是 HTML5 和 JavaScript,它们将被包装在原生移动 Web 视图(la Phonegap)中。

部分功能需要应用程序将信息发布到由我们的一位客户控制的 Web 服务。由于其他人正在使用此 Web 服务,因此更改的余地很小。我们使用 HTTP POST 发送 JSON 并从服务器接收响应。此响应的一部分是管理我们与服务器的会话的 JSESSIONID cookie。在初始initSession()调用之后,我们需要在每个 (AJAX) 请求中发送 JSESSIONID cookie。

当部署在移动设备上时,Web 应用程序被包装在本机 Web 视图中,它通过浏览到file:///path/to/app/index.html.

我们尝试的第一件事是要求我们的客户Access-Control-Allow-Origin: *在他们的响应标头中设置允许 CORS。然后我们尝试发布到服务器:

监视请求,很明显没有包含 cookie。仔细检查后,CORS 规范中有一个特殊部分用于处理用户凭据,其中包括会话 cookie。所以我修改了 AJAX 调用以包含以下内容:

另一个错误,这次来自浏览器。更多阅读得出以下结论:

如果第三方服务器没有以Access-Control-Allow-Credentials: true标头响应,则响应将被忽略并且不可用于 Web 内容。

重要提示:在响应凭证请求时,服务器必须在Access-Control-Allow-Origin标头中指定域,并且不能使用通配符。

因此,我们需要更改服务器的标头以包含我们Access-Control-Allow-Credentials: trueAccess-Control-Allow-OriginOrigin。

到这里我们终于遇到了我的问题:当使用 file:// 协议加载网页时,Web View 发送的Origin请求头设置为null. 因此服务器无法解析它,因此服务器无法将其设置为Access-Control-Allow-Origin. 但是,如果服务器无法设置Access-Control-Allow-Origin*我们无法发送凭据(包括 cookie)以外的其他内容。

所以我被困住了。该怎么办?我在这里看到了一个类似的问题,但我并不真正理解建议的答案。任何帮助将非常感激!

0 投票
1 回答
5966 浏览

android - android 2.3.3 上带有授权标头和 CORS 的 Ajax GET 请求

我正在尝试在 android 2.3.3 上发出跨域 GET 请求。我在服务器上使用 CORS 过滤器。我已经在 chrome、firefox、iphone 上对此进行了测试,并且效果很好。使用 android 2.3.3 的预检请求看起来不错,但实际请求并未发送 Origin 标头。我可以很好地取回数据,但是 ajax 错误,状态为 0。我尝试将其更改为 POST 请求,并且成功了!!!

这是ajax代码:

...

这是获取的结果(不起作用

这是发送帖子的结果(作品

我做了更多的测试,并把授权标头排除在外,它与 GET 一起工作。不确定为什么授权标头会导致获取请求失败。有任何想法吗?

0 投票
2 回答
327 浏览

javascript - 如何捕获访问控制错误?

我正在使用的 API 有时不会为 CORS 请求设置正确的访问控制标头。

发生访问控制错误时,如何通知用户出现问题?我什至不需要知道发生了什么错误,只是 XHR 请求失败了。

将请求包装在 try/catch 块中似乎在 WebKit 浏览器中不起作用。

0 投票
2 回答
3776 浏览

javascript - 画布视频 CORS

我有以下代码,从http://jakearchibald.com/scratch/alphavid/获得

它获取视频,并将其加载到画布中以实现透明度。

但是,我为我的视频使用了 CDN,而 Chrome 对这种跨域数据并不满意。

我已经在我的 CDN 中设置了正确的 CORS 标头(但希望有一个清单),但我不知道如何对这段代码实施这些建议的更改;http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html

任何关于此事的建议将不胜感激!

谢谢!

0 投票
1 回答
1289 浏览

nginx - CORS 请求中不接受响应状态 201

我正在设置一个带有一些 REST Web 服务的应用程序,根据请求的结果响应 200 或 201。

另一方面,我正在开发一个必须使用此 Web 服务的 javascript Web 应用程序,因此我正在使用 nginx 在服务器端处理 CORS,将正确的标头添加到响应中。

我可以说的问题是,当服务以 201 响应时,cors 标头不会到达客户端。第一个想法是这是浏览器的问题/限制,但后来我意识到 nginx 没有在任何带有 201 状态代码的响应中添加 cors 标头。

我正在使用的 nginx 配置位于https://github.com/UPCnet/maxserver/blob/master/production/nginx.conf

有什么线索吗?请询问您是否需要任何其他信息/详细信息

谢谢!

0 投票
3 回答
10840 浏览

security - 为什么浏览器 API 会限制跨域请求?

XMLHttpRequests 要求 CORS 跨域工作。对于网络字体、WebGL 纹理和其他一些东西也是如此。一般来说,所有新的 API 似乎都有这个限制。

为什么?

绕过它很容易:只需要一个简单的服务器端代理。换句话说,服务器端代码不被禁止做跨域请求;为什么是客户端代码?这如何给任何人带来安全感?

而且它是如此不一致:我不能XMLHttpRequest,但我可以<script src>or <link rel>or <img src>or <iframe>。限制 XHR 等甚至可以完成什么?