来自curl的Cross Origin调用无需头文件

时间:2015-11-25 09:26:18

标签: rest http curl cross-domain

我正在使用curl调用我的一个API,如下所示(交叉原点)。

curl -H "Origin: foo.com" -H "Content-Type: application/json" -H "Authorization: Basic YWRtaW46YWRtaW4=" -v https://localhost:9443/api/v10/configs -k

我没有在服务器端设置必要的跨源头。但API调用有效。那是为什么?

在服务器端API类上,在选项调用中我只设置了Allow标头。

 @OPTIONS
    public Response options() {
        return Response.ok().header(HttpHeaders.ALLOW, "GET").build();
    }

未设置以下标头。

Access-Control-Allow-Methods:
Access-Control-Allow-Origin:
Access-Control-Allow-Headers:

2 个答案:

答案 0 :(得分:1)

CORS是一种启用跨域请求的机制,但在浏览器中使用AJAX。如果你使用curl,你可以做你想做的事情; - )

因此,在您的情况下(使用curl),您尝试在浏览器外执行请求。所以你可以自由地做你想做的事!使用curl,将始终执行请求,您将看到交换的标头,例如。这可能有助于查看您是否具有CORS的预期标题...

希望它可以帮到你, 亨利

答案 1 :(得分:0)

您可能需要阅读HTTP access control (CORS)以更好地了解其工作原理及其服务的主要目的。

只是一些进入代码段

  

出于安全原因,浏览器会限制从脚本中发起的跨源HTTP请求。例如,XMLHttpRequest遵循同源策略。因此,使用XMLHttpRequest的Web应用程序只能向其自己的域发出HTTP请求。为了改进Web应用程序,开发人员要求浏览器供应商允许XMLHttpRequest发出跨域请求。

     

W3C Web应用程序工作组建议使用新的跨域资源共享(CORS)机制。 CORS为Web服务器提供跨域访问控制,从而实现安全的跨域数据传输。现代浏览器在API容器中使用CORS(例如XMLHttpRequest)来降低跨源HTTP请求的风险。

因此引入了CORS以允许在浏览器中进行跨域访问(来自脚本)。它是如何工作的,当一个请求需要跨域授权时,浏览器首先发出一个OPTIONS("预检")请求来查找访问响应头。如果他们在那里,那么它会提出初始请求。否则会出现请求错误。

顺便说一句,我会避免在资源方法中实现CORS支持。我会使用过滤机制,因此所有请求都在过滤器中处理,而不是必须为所有端点实现@OPTIONS方法。