Javascript Emberjs/Chrome/FFox:飞行前的数字访问控制请求头

Javascript Emberjs/Chrome/FFox:飞行前的数字访问控制请求头,javascript,django,google-chrome,ember.js,Javascript,Django,Google Chrome,Ember.js,我正在开发一个应该使用django rest框架后端的Emberjs前端。我刚刚开始使用JWT/Javascript Web令牌进行身份验证 这就是我所做的: 在后端(出于明显的原因,目前是django的开发服务器),我允许所有源代码(因为ember cli在localhost:4200和django:8000上运行)。即原产地被接受 serverTokenEndpoint已在Emberjs中正确设置 我可以在django上手动添加要接受的数字标题,但我不想这样做,除非我知道为什么应该允许它们

我正在开发一个应该使用django rest框架后端的Emberjs前端。我刚刚开始使用JWT/Javascript Web令牌进行身份验证

这就是我所做的:

  • 在后端(出于明显的原因,目前是django的开发服务器),我允许所有源代码(因为ember cli在localhost:4200和django:8000上运行)。即原产地被接受
  • serverTokenEndpoint已在Emberjs中正确设置
  • 我可以在django上手动添加要接受的数字标题,但我不想这样做,除非我知道为什么应该允许它们
我现在看到的问题如下:

  • 在chrome上,对后端的飞行前选项请求包括允许标头0到9的请求
  • 在Firefox上,对后端的飞行前选项请求包括允许标头0到4的请求
后端不允许使用这些头,我找不到此请求的源,也找不到它们的含义

同样,这是Firefox的选项请求的一部分:

Access-Control-Request-Headers: 0,1,2,3,4,content-type
这是来自Chrome的:

Access-Control-Request-Headers: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, accept, content-type

我的问题:如果可以包含这些数字标题,为什么会被请求?它们来自哪里(余烬?浏览器本身?),它们是什么意思?理想情况下,我怎样才能摆脱它们呢?

我发现了问题所在。我混合了使用Oauth2进行身份验证的代码

对于Oauth2,自述文件建议将凭据解压为两个变量,并将其传递给authenticate函数:

let { identification, password } = this.getProperties('identification', 'password');
this.get('session').authenticate('authenticator:oauth2', identification, password).catch((reason) => {
  this.set('errorMessage', reason.error || reason);
});
鉴于令牌版本未解压缩凭据:

var credentials = this.getProperties('identification', 'password'),
authenticator = 'authenticator:jwt';
this.get('session').authenticate(authenticator, credentials);
事实证明,jwt验证器的authenticate函数最多使用三个参数,第三个是头。由于某种原因,我混合代码的方式导致我的密码分解为数字值。在我发布的firefox代码片段中,我使用了一个不同的密码,这就是为什么值仅为4,而不是9


通过不解包凭证,飞行前成功。

我发现了问题所在。我混合了使用Oauth2进行身份验证的代码

对于Oauth2,自述文件建议将凭据解压为两个变量,并将其传递给authenticate函数:

let { identification, password } = this.getProperties('identification', 'password');
this.get('session').authenticate('authenticator:oauth2', identification, password).catch((reason) => {
  this.set('errorMessage', reason.error || reason);
});
鉴于令牌版本未解压缩凭据:

var credentials = this.getProperties('identification', 'password'),
authenticator = 'authenticator:jwt';
this.get('session').authenticate(authenticator, credentials);
事实证明,jwt验证器的authenticate函数最多使用三个参数,第三个是头。由于某种原因,我混合代码的方式导致我的密码分解为数字值。在我发布的firefox代码片段中,我使用了一个不同的密码,这就是为什么值仅为4,而不是9


通过不解包凭证,飞行前成功。

标题来自requestok yes。显然是这样。但为什么它要检查头0..9是否被接受?我以前从未遇到过数字标题。。。我编辑了这个问题,我希望现在它更准确。我可以告诉你,任何浏览器都不应该预先发送带有
访问控制请求头的CORS请求,除非这些请求头是在xmlhttprequest对象中使用
setRequestHeader
设置的-我真的很惊讶在该列表中看到内容类型和接受!我想,内容类型和接受是有道理的。因为这是正确的请求在通过飞行前会发送的,对吗?那么你会说这是来自JS,即Emberjs,而不是浏览器?标题来自requestok yes。显然是这样。但为什么它要检查头0..9是否被接受?我以前从未遇到过数字标题。。。我编辑了这个问题,我希望现在它更准确。我可以告诉你,任何浏览器都不应该预先发送带有
访问控制请求头的CORS请求,除非这些请求头是在xmlhttprequest对象中使用
setRequestHeader
设置的-我真的很惊讶在该列表中看到内容类型和接受!我想,内容类型和接受是有道理的。因为这是正确的请求在通过飞行前会发送的,对吗?那么你会说这是来自JS,即Emberjs,而不是浏览器?