我一直在网上查关于CORS的内容,想确认我的理解是否正确。
以下是一个完全虚构的场景。
以一个普通的网站为例。假设我的html页面有一个表单,包含一个文本字段名称。在提交表单后,它会将表单数据发送到myPage.php
。现在,服务器在将请求与文本字段一起发送到www.mydomain.com/mydirectory/myPage.php
时,会看到请求是从相同的域/端口/协议发出的。
(问题1:服务器如何知道所有这些细节?它从哪里提取所有这些细节?)
尽管如此,由于请求是由同一域发起的,它会服务于php脚本并返回所需的任何内容。
现在,为了举个例子,假设我不想手动填写文本字段中的数据,而是想通过程序实现。我创建了一个带有JavaScript的HTML页面,并随参数(即textField的值)启动了POST请求。现在,由于我的请求不属于任何域,因此服务器忽略了我的请求,并返回跨域错误?
同样,我也可以编写一个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设备对我的Web服务调用的方法吗?
谢谢