猿问

了解CORS

我一直在网上寻找有关CORS的信息,我想确认一下我用它做的是什么,实际上是什么。

下面提到的是完全虚构的情况。

我将以一个普通网站为例。假设我的html页面有一个采用文本字段名称的表单。提交后,它将表单数据发送到myPage.php。现在,内部发生的事情是,服务器将请求www.mydomain.com/mydirectory/myPage.php与文本字段一起发送到。现在,服务器看到请求是从相同的域/端口/协议中触发的

问题1。服务器如何知道所有这些详细信息。它从哪里提取所有这些详细信息?

但是,由于请求来自同一域,因此它将服务器php脚本并返回所需的内容。

现在,为了便于讨论,假设我不想手动填充文本字段中的数据,而是想以编程方式进行操作。我要做的是,我用javascript创建一个html页面,并触发POST请求以及参数(即textField的值)。现在,由于我的请求并非来自任何域,因此服务器将忽略该服务。我得到跨域错误?

同样,我也可以编写一个Java程序,该程序利用HTTPClient / Post请求并执行相同的操作。

问题2:这是什么问题?

现在,CORS为我们提供的是,服务器将说“任何人都可以访问myPage.php”。在enable cors.org中

对于简单的CORS请求,服务器仅需在响应中添加以下标头:Access-Control-Allow-Origin:*

现在,客户端将如何处理此标头。在这种情况下,客户端仍然想调用服务器上的资源,对吗?应该由服务器来决定是否要接受或不接受,并相应地采取措施。

问题3:将标头发送回客户端(已向服务器发出请求)有什么用?

最后,我不明白的是,我正在为我的android应用构建一些RESTful服务。现在,说我有一个POST服务www.mydomain.com/rest/services/myPost。我已经在本地计算机上托管了这些服务的Tomcat服务器。

在我的android应用中,我只是调用此服务,然后将结果取回(如果有的话)。在这种情况下,我到底在哪里使用CORS。这是否属于服务器调用的不同类别?如果是,那么如何。

此外,我检查了“ 为Tomcat启用Cors”,它说我可以在动态Web项目的web.xml中添加一个过滤器,然后它将开始接受它。

问题4:是什么使从我的android设备到我的webservices的呼叫启用?

谢谢


墨色风雨
浏览 509回答 3
3回答

慕丝7291255

对于问题3,您需要了解两个站点与客户端浏览器之间的关系。正如Krumia在回答中提到的那样,这更多是请求中三个参与者之间的约定。我最近发布了一篇文章,其中详细介绍了CORS握手如何设计工作。

桃花长相依

即使CORS来源不被认可,支持CORS的API是否应该执行请求?我已经看到了一个CORS的实现,其中始终执行请求,但是响应中的CORS标头只有在识别出Origin的情况下才由服务器设置。不确定这是否是好的设计?
随时随地看视频慕课网APP
我要回答