繁体   English   中英

CORS - 访问控制允许来源问题

[英]CORS - Access-Control-Allow-Origin issue

我有一个以 RESTful Jersey Api 作为后端的 AngularJS Web 应用程序。 我正在调用这个 API

function Create(user) {
        return $http.post('http://localhost:8080/NobelGrid/api/users/create/', user).then(handleSuccess, handleError('Error creating user'));
    }

这是 API (POST) 的代码:

/**
 * This API create an user
 * 
 * @param data
 * @return
 */
@Path("create")
@POST
@Produces("application/json")
public Response create(String data) {

    UserDataConnector connector;
    JSONObject response = new JSONObject(data);

    User userToCreate = new User(response.getString("surname"), response.getString("name"),
            response.getString("mail"), response.getString("username"), response.getString("password"), 0);

    try {

        connector = new UserDataConnector();
        connector.createUser(userToCreate);
    } catch (IOException e) {
        e.printStackTrace();
    }

    return Response.status(Response.Status.OK) // 200
            .entity(userToCreate)
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();

}

/**
 * CORS compatible OPTIONS response
 * 
 * @return
 */
@Path("/create")
@OPTIONS
public Response createOPT() {

    System.out.println("Called OPTION for create API");
    return Response.status(Response.Status.OK) // 200
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
            .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS").build();
}

我添加了一个用于create的 OPTION API 以使该 API 与 CORS 兼容。 事实上,API 运行良好,因为在 POST 之前调用了 OPTIONS API,并且在我的数据库中创建了用户。 无论如何在前端,我收到此错误:

XMLHttpRequest 无法加载http://localhost:8080/NobelGrid/api/users/create/ 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,不允许访问 Origin ' http://localhost:63342 '。 响应的 HTTP 状态代码为 500。

谁能帮帮我吗?

更新:

stack 建议这个问题No Access-Control-Allow-Origin 标头存在于请求的资源上,因为可能重复,但该解决方案对我不起作用,因为 Response Jersey API 中不存在addHeader(String)

更新 2

我使用这个解决方案解决了这个问题:

http://www.coderanch.com/t/640189/Web-Services/java/Access-Control-Origin-header-present

但我还有另一个错误。 我会做另一个问题,因为我认为这是一个不同的论点。

提前致谢!

我使用这个解决方案解决了这个问题:

http://www.coderanch.com/t/640189/Web-Services/java/Access-Control-Origin-header-present

但我还有另一个错误。

在此处输入图片说明

我会做另一个问题,因为我认为这是一个不同的论点。

使用 CORS NPM 并添加为中间件。

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

app.get('/products/:id', function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

-------------------------在您的 app.js 中添加此行----------------- --------

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM