当前位置: 首页 > 知识库问答 >
问题:

访问控制允许源问题在角2

邓元白
2023-03-14

我在从node.js服务器获取数据时遇到问题。

客户端是:

    public getTestLines() : Observable<TestLine[]> {
    let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
    let options = new RequestOptions({ headers: headers });

    return this.http.get('http://localhost:3003/get_testlines', options)
                .map((res:Response) => res.json())
                .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 
}

在服务器端,我还设置了标题:

resp.setHeader('Access-Control-Allow-Origin','*') 
resp.send(JSON.stringify(results))

但我犯了个错误

"XMLHttpRequest无法加载http://localhost:3003/get_testlines.对预试请求的响应没有通过权限改造检查:请求的资源上没有'Access-Control-Prover-Origin'标头。因此,来源http://localhost:3000不允许进入。"

我怎样才能修好它?当我删除标题时,它表示此标题是必需的。

共有3个答案

井浩思
2023-03-14

不要在请求上设置访问-控制-允许-起源,那里永远不需要它。您应该仔细检查响应中是否存在标头(在开发人员控制台中检查)。如果您共享更多的后端代码,这将是有帮助的。

柴瀚昂
2023-03-14

Access Control Allow Origin是一个响应头,而不是一个请求头,您需要在后端修复权限。因此,您必须创建包含所有必要权限的cors.js文件

function crosPermission(){
  this.permission=function(req,res,next){
    res.header('Access-Control-Allow-Origin','*');
    res.header('Access-Control-Allow-Headers','Content-Type');
    res.header('Access-Control-Allow-Methods','GET','POST','PUT','DELETE','OPTIONS');
    next();
  }
}

module.exports= new crosPermission();

下一步,您需要在app.js中添加一些行

    var cors=require('./cors');
    app.use(cors.permission)
拓拔稳
2023-03-14

Access Control Allow Origin是响应头,而不是请求头。

您需要让它出现在响应上,而不是请求上。

您已尝试将其放在响应上:

resp.setHeader('Access-Control-Allow-Origin','*') 

...但是没有成功。

这可能是因为您没有将其放在对正确请求的响应上。错误消息显示:

对起飞前请求的响应没有通过权限改造检查

你已经做了一些事情使请求被预先引导。这意味着,在浏览器发出您试图发出的GET请求之前,它正在发出选项请求。

这可能是由服务器上的另一段代码处理的,因此不会命中行resp.setHeader('Access-Control-允许-起源','*')

导致发出预先设置好的请求的一件事是添加请求头(除了少量异常)。向请求中添加Access-Control-允许-Origin将触发预先设置好的请求,因此要尝试解决此问题,首先要做的是从请求中删除Access-Control-允许-Origin

如果失败,那么您需要设置您的服务器,以便它可以响应OPTIONS请求和GET请求。

 类似资料:
  • 问题内容: Web编程有些新知识,对此有些困惑。我有一个提供网站的基本express.js web服务器。我想将一个Gameid交给一个函数,并让其使用其Web API从Steam抓取成就信息,应该使用以下REST API调用来支持该信息: https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPerc

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 如何解决以下错误; 加载资源失败:服务器响应状态为500(内部服务器错误)cdn。安普项目。org/v0。js:68响应必须包含AMP访问控制允许源代码源标题Yd@cdn。安普项目。org/v0。js:68 cdn。安普项目。org/v0。js:68表单提交失败:错误:响应必须包含AMP Access Control Allow Source Origin标头​​​ 报道 遵循CORS上AMP G

  • 登录:1未能加载http://127.0.0.1:8000/oauth/token:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许访问源'http://localhost:4200'。 我听说应该用一个叫:

  • 问题内容: 我从node.js服务器获取数据时遇到问题。 客户端是: 在服务器端,我还设置了标头: 但我得到一个错误 “ XMLHttpRequest无法加载http:// localhost:3003 / get_testlines 。对预检请求的响应未通过访问控制检查:所请求的资源上没有’Access- Control-Allow-Origin’标头。来源’ http://本地主机:3000

  • 问题内容: 我尝试使用以下代码通过$ http(角度)发送http请求: 但这不起作用,并且我在Web控制台中有此错误: 你有解决方案吗 ? 问题答案: 您看到此错误是由于在浏览器中实现的称为Same Origin Policy的安全机制所致。 基本上,这是由于您的网页尝试访问驻留在与网页本身不同的主机,端口或方案(HTTP / HTTPS /文件等)所在的服务器上的资源而引起的。 为了解决此问题