我的节点服务器和客户端在不同的端口上运行(分别为3001,5347).在客户端我用过,
var socket = io('http://127.0.0.1:3001');
Run Code Online (Sandbox Code Playgroud)
在服务器上,我逐一尝试了以下所有内容
1) io.set('origins', '*:*');
2) io.set('origins', 'http://127.0.0.1:5347');
3) io.set('origins', '*');
4) io.set('origins', '127.0.0.1:5347');
Run Code Online (Sandbox Code Playgroud)
但是我得到了以下错误:
XMLHttpRequest无法加载http://127.0.0.1:3001/socket.io/?EIO=3&transport=polling&t=1456799439856-4590.当credentials标志为true时,不能在'Access-Control-Allow-Origin'标头中使用通配符'*'.因此不允许原点'null'访问.
注意:我在服务器上使用express,我已经按照以下方式使用cors中间件:
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
app和cors分别是express和cors的实例.
我在不同的端口(8000,8001)上运行后端和前端,我无法从 express 服务器制作 res.redirect(...) 并且浏览器显示 CORS 错误(访问 XMLHttpRequest at...)。
这是 MEVN(Mongo, Express, Vue, Nodejs) 应用程序,Vue 前端和 express(nodejs) 后端运行在不同的端口上。我在后端实现了 cors() ,它使我的前端可以发出请求(获取、发布)但后端仍然无法使用 res.redirect("...") 重定向前端页面,因为它显示了 CORS错误。
// Backend
var cors = require('cors');
app.use(cors())
...
function (req, res, next){ // some middleware on backend
...
res.redirect('http://urltofrontend'); // cause error
// Error msg on Chrome
Access to XMLHttpRequest at 'http://localhost:8001/' (redirected from
'http://localhost:8000/api/login') from origin 'null' has been blocked
by CORS policy: Request header field content-type is not allowed by
Access-Control-Allow-Headers in preflight response.
Run Code Online (Sandbox Code Playgroud)
我已经完成了 …
我正在构建一个Web服务器并尝试测试.服务器正在运行localhost:888,第一次加载Web应用程序时,一切正常.但是如果我尝试重新加载页面,那么一堆XmlHttpRequest请求就会失败net::ERR_FAILED.通过在服务器代码中放置断点,我可以验证请求是否实际上从未进入.
这不是连接失败,因为连接第一次成功.它成功一次然后失败的事实意味着它可能与缓存相关,但服务器代码中没有设置cache-control头的任何内容.所以我通过将服务器放在实际的Web服务器上来测试它.第一次,一切都要花时间加载; 第二次,它立即加载,所以这肯定是缓存相关的
这是一个运行在http.sys(没有IIS)之上的自定义服务器,看起来默认情况下会缓存一些内容,然后在后续运行时无法从中加载,但只有当我的服务器在localhost上运行时才会运行.在网上,它工作正常.就像我所知道的那样,net::ERR_FAILEDChrome中有一个通用的"出错了,我们没有任何有用的信息",所以我有点卡在这里.有谁知道是什么原因引起的?
我想从位于domainB.contoso.com上的Web应用程序访问位于domainA.contoso.com上的listdata.svc(一个sharepoint服务) - 身份验证似乎是个问题.
当尝试通过JQuery Ajax调用访问ListData.svc时,启用CORS,服务器返回401.如果我从SharePoint内部执行的.htm页面运行相同的查询,则调用正常,因为域名是相同.
SharePoint正在使用NTLM关闭匿名身份验证 - 我认为401是Windows凭据未传递到SharePoint服务器的结果 - 但我不知道如何正确地将这些凭据添加到标头. 我已经设置了xhrFields:{withCredentials:true},但这似乎无法解决身份验证问题.
为了启用CORS,我在IIS中的SharePoint上设置了以下HTTP响应标头:
在我的Web应用程序的IIS中启用了Windows身份验证,我没有在IIS中设置"OPTIONSVerbHandler"HTTP处理程序.把它翻到阅读似乎没有什么区别.
JQuery Ajax调用(来自subdomainB.contoso.com上的应用程序):
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: listUrl,
xhrFields: { withCredentials: true },
crossDomain:true,
processData: false,
async: true,
dataType: "json",
converters: {
// WCF Data Service .NET 3.5 incorrectly escapes singles quotes, which is clearly
// not required (and incorrect) in JSON specs.
// http://bugs.jquery.com/ticket/8320?cversion=0&cnum_hist=1
"text json": function (textValue) {
return jQuery.parseJSON(textValue.replace(/(^|[^\\])\\'/g, "$1'"));
}
},
success: function (data, status, xhr) { …Run Code Online (Sandbox Code Playgroud) 实际上,这不是重复的帖子,我知道在stackoverflow社区中多次问过的标题的一部分,我阅读了所有帖子和答案,但是我认为我使用的问题和技术是不同的。
首先,我应该提到的ASP.NET Core WEB/API是我的后端应用程序,Reactjs也是我的前端应用程序。
我阅读了一下CORS,发现必须CORS在ASP.NETApp 'Access-Control-Allow-Origin':'*'上启用并放入 请求的标头,但是在调用api时仍然出现以下错误:
所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源' http:// localhost:8080 '。该响应的HTTP状态代码为500。如果不透明响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。
这是我的Startup.cs代码与CORS:
public void ConfigureServices(IServiceCollection services)
{
// other lines of code
services.AddCors(options =>
{
options.AddPolicy("AllowAll",
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAll"));
});
// other lines of code
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseCors("AllowAll"); …Run Code Online (Sandbox Code Playgroud) 这让我疯狂.
jQuery 1.4.2,windows XP sp3
这是我的测试.
加载Firefox 3.5+
http://plungjan.name/test/testcors.html
作品
将文件保存到硬盘并从那里运行
从我的办公室,外部工作和内部工作没有
同样有趣的是,我无法一次完成这两项任务.
背景:我对使用CORS的内部Web服务进行了GET.请不要发布有关FF的任何答案,因为这里和此处详细说明了自v3.5以来的处理跨域请求
它适用于从一台服务器到另一台服务器的IE8和FF3.6.6,现在几乎从文件系统(文件:///)到服务. 仅限文件系统,并且仅当FF 3.6.6需要协商时(用户已经登录,授权并发送凭证!)我是否在协商后得不到数据.jQuery xhr返回状态0并且没有data/responseText或者其他什么对我来说,jQuery会对401的xhr作出反应并保存xhr而不是200以后的OK
这是我在提醒XHR对象时在通信结束时得到的结果:
Status:success
Data:[]
XHR:
some native functions,
readyState:4
status:0
responseXML:null
responseText:
withCredentials:true
Run Code Online (Sandbox Code Playgroud)
如果我调用同一台服务器但不需要凭据,则返回的数据就是精确的跨域
所以沟通如下:
GET /restapplicationusingcors/authenticationneeded-internal/someid
Accept: application/json
Accept-Language: en
.
.
Origin: null
Cookie: LtpaToken=...
Run Code Online (Sandbox Code Playgroud)
回报是
HTTP/1.1 401 Unauthorized
Server: Apache
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 01:00:00 CET
WWW-Authenticate: Negotiate …Run Code Online (Sandbox Code Playgroud) 看起来像这么简单的问题,但我找不到答案,所以让我相信也许我没有控制旗帜!?
语境:
我正在开发一个SignalR中心和客户端.如果(在信号器站点上)我在配置中设置以下内容,则一切正常:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://example.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
问题是我想在这里使用通配符.
当我这样做(即value="*")时,我得到以下错误(在客户端上):
A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true.
Run Code Online (Sandbox Code Playgroud)
我可能会在这里遗漏一些简单的东西,但我找不到允许我设置凭证标志的相关配置条目.
我试过的
<add name="Access-Control-Allow-Credentials" value="false"/>
Run Code Online (Sandbox Code Playgroud)
似乎没有什么区别(同样的错误).
我在使用AngularJS的服务器上启用CORS时遇到问题.我正在使用Angular 1.2.16,这是我的服务器配置:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name, Authorization"
Header set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Credentials "true"
Run Code Online (Sandbox Code Playgroud)
我可以使用以下请求:
$http.post(configuration.authUrl, {username: 'username', password: 'password'})
.success(function (data) {
$cookieStore.put(configuration.sessionName, {
token: data.authenticationToken,
user: data.user
});
})
.error(function () {}));
Run Code Online (Sandbox Code Playgroud)
因为此请求不使用自定义标头.
当我之后尝试请求以下内容时:
Balance.get()余额为:
angular.module('portalApp')
.factory('Balance', ['$resource', 'Auth', 'configuration', function ($resource, Auth, configuration) {
return $resource(configuration.balanceUrl, {}, {
get: {
method: 'GET',
isArray: false,
headers: {
Authorization: Auth.getAuthToken() …Run Code Online (Sandbox Code Playgroud) 我的场景由两个webserver组成,一个是本地的,一个是远程的.
本地Web服务器(Apache)处理一个Web应用程序,我想在其中向远程Web服务器(Lighttpd)发出ajax请求.
Ajax请求使用angularjs $ http.
var req = {
method: 'POST',
url: 'http://url/myphp.php',
headers: {
'Authorization': 'Basic ' + btoa('username:password'),
'Content-Type': 'application/x-www-form-urlencoded'
},
xhrFields: {
withCredentials: true
},
crossDomain: true,
data: xmlString
}
$http(req).then(function () {
console.log("OK!");
});
Run Code Online (Sandbox Code Playgroud)
远程php脚本是:
<?php
echo "You have CORS!";
?>
Run Code Online (Sandbox Code Playgroud)
不幸的是我有一个
401 Unhauthorized
XMLHttpRequest cannot load http://url/myphp.php. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8888' is therefore not allowed access. The response had …Run Code Online (Sandbox Code Playgroud) cors ×7
javascript ×3
ajax ×2
angularjs ×2
node.js ×2
.net-core ×1
angular ×1
asp.net-core ×1
c# ×1
caching ×1
cross-domain ×1
file-upload ×1
html ×1
http ×1
http.sys ×1
jquery ×1
json ×1
lighttpd ×1
php ×1
reactjs ×1
sharepoint ×1
signalr ×1
socket.io ×1
vue.js ×1
web-config ×1