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

问题描述:

我从我的node.js服务器获取数据的问题。访问控制允许起源问题角2

的客户端是:

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-Allow-Origin'标题。因此,原产地“http://localhost:3000”不允许 访问。”

我该如何解决呢?当我删除页眉它说,这个头是必需的。

+1

您是否在使用Crome?如果是,请启用Access-Control-Allow-Origin。 Crome有一个cors插件。对于IE,你不应该在设置标题后出现这个错误 –

+0

这很可能是服务器端问题。你确定你的响应实际上在'OPTIONS'请求中发送了头文件吗?例如,您可以尝试邮递员检查标题。 – Randy

Access-Control-Allow-Origin响应标题,而不是请求标题。

你需要有它出现的反应,而不是请求。

你试图把它的响应:

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

...但并未奏效。

这可能是因为你还没有把它的响应权利请求。该错误消息说:

响应预检要求没有通过访问控制检查

你已经做了一些使预检请求。这意味着在浏览器发出GET请求之前,它正在发出OPTIONS请求。

这是,据推测,被你的服务器上的不同代码段太行resp.setHeader('Access-Control-Allow-Origin','*')没有被击中处理。导致要由预检请求

一件事是添加请求头(除少数例外以外)。将Access-Control-Allow-Origin添加到请求将触发预检请求,因此要尝试解决该问题的第一件事是从请求中删除以

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

不要设置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) 

如果这将是休息API =>http://localhost:3003/get_testlines

然后使用@CrossOrigin( origins =“*”)来解决跨域问题

你可以在php头设置为

header("Access-Control-Allow-Origin: *"); 
header("Content-Type: application/json; charset=UTF-8");