我在后端使用node、express,在客户端使用angular4,这给了我以下错误:
XMLHttpRequest无法加载http://localhost:4876/login/check。对预飞行请求的响应未通过访问控制检查:响应中“access-control-allow-credentials”标头的值为“”,当请求的凭据模式为“include”时,该值必须为“true”。因此,不允许访问源“http://localhost:4200”。由XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。
router.get('/login/check', (req: any, res: any) => {
let api = new ApiConnection(req, res);
let accessCard: IAccessCard = api.getContent(Auth.ACCESS_CARD_KEY);
if(!Auth.isValid(accessCard))
return api.response.error();
ChatBox.auth.isExpired(accessCard, function (err:any, isExpired: boolean) {
if (err) return api.response.error();
if(!isExpired) {
api.cookie("AccessCard", accessCard);
api.response.success(accessCard);
}
else {
api.response.error();
}
})
});
header和cors中间件设置如下:
export class Application {
private app:any = express();
constructor() {
this.setCors();
this.setHeaders();
}
public getApp():any {
return this.app;
}
private setCors(){
let whitelist = ['http://localhost:4200','http://localhost:80'];
let corsOptions = {
origin: (origin:any, callback:any)=>{
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
this.app.use(cors(corsOptions));
}
private setHeaders() {
this.app.use(function (req:any, res:any, next: any) {
// Website you wish to allow to connect
//res.setHeader('Access-Control-Allow-Origin', Config.WEB_APP_HOST);
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
}
}
在客户端,我使用Api如下所示:
public startSession(callback: (status: boolean, result: any) => void ) {
let self: ChatBox = this;
/**
* @res.result: IAccessCard
*/
this.mApiConnection.get(Api.root+'/login/check', (res: any) => {
if (res.status == ResponseStatus.SUCCESS) {
self.mStorage.storeAccessCard(res.result);
self.loadAccount(res.result);
}
callback(res.status, res.result);
})
}
在corsOptions中设置cors时,我添加了value credentials true,其工作方式如下:
private setCors(){
let whitelist = ['http://localhost:4200','http://localhost:80'];
let corsOptions = {
origin: (origin:any, callback:any)=>{
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
},credentials: true
}
this.app.use(cors(corsOptions));
}
问题内容: 我正在使用节点,在客户端上在后端和angular4上表达,这给了我以下错误: XMLHttpRequest无法加载http:// localhost:4876 / login / check 。对预检请求的响应未通过访问控制检查:响应中的“ Access- Control-Allow-Credentials”标头的值为“”,当请求的凭据模式为“ include”时,该值必须为“ tru
CORS策略阻止了从来源“http://localhost:3000/socket.io/?eio=3&transport=polling&t=nqb0bxp”访问来自“http://localhost:8100”的XMLHttpRequest:响应中的“access-control-allog-credentials”标头的值为“,当请求的凭据模式为”include“时,该标头必须为”true“
我得到这些错误在浏览器 “响应必须包含AMP Access Control Allow Source Origin标头” 和 表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头" php HTML 我如何编辑它,以避免这些错误?
Access-Control-Allow-Credentials响应报头指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露。 凭证是 Cookie ,授权标头或 TLS 客户端证书。 当作为对预检请求的响应的一部分使用时,它指示是否可以使用凭证进行实际请求。请注意,简单的GET请求不是预检的,所以如果请求使用凭证的资源,如果此资源不与资源一起返回,浏览器将忽略该响应,并且不会返回
编辑: 我更改了表单以提交一个名为amp-form-submit.php的新文件 该文件看起来像: 现在我的错误是解析响应JSON:SyntaxError:JSON失败。解析:JSON数据第1行第1列的数据意外结束 我不明白我做错了什么。下面是我测试amp表单的代码。我包括AMP访问控制允许原点标题。 这是表单提交失败时的控制台: 出于隐私考虑,我已将URL替换为通用URL。此表单处理脚本与doc