Kra*_*ken 11 web-services cors
我一直在网上看CORS,我想确认一下我做的是什么,实际上是什么.
下面提到的是一个完全虚构的场景.
我将以一个普通网站为例.假设我的html页面有一个带有文本字段名称的表单.在提交时,它将表单数据发送到myPage.php.现在,内部发生的是,服务器将请求www.mydomain.com/mydirectory/myPage.php与文本字段一起发送.现在,服务器看到请求是从同一域/端口/协议触发的
(问题1.服务器如何了解所有这些细节.它从哪里提取所有这些细节?)
尽管如此,由于请求来自同一个域,因此它会为php脚本提供服务并返回所需的任何内容.
现在,为了争论,让我们说我不想在文本字段中手动填充数据,而是我想以编程方式进行.我所做的是,我使用javascript创建一个html页面并触发POST请求以及参数(即textField的值).现在,由于我的请求不是来自任何域,服务器忽略了我的请求服务.我得到跨域错误?
同样,我也可以编写一个Java程序,它使用HTTPClient/Post请求并执行相同的操作.
问题2:这是问题所在吗?
现在,CORS为我们提供的是,服务器会说'任何人都可以访问myPage.php'.从启用cors.org,它说
对于简单的CORS请求,服务器只需要在其响应中添加以下标头:Access-Control-Allow-Origin:*
现在,客户端究竟对这个标题做了什么.如同,客户端无论如何想要调用服务器上的资源吧?应该是服务器来配置自己是否要接受,并采取相应的行动.
问题3:将标头发送回客户端(已经向服务器发出请求)有什么用?
最后,我没有得到的是,我说我正在为我的Android应用程序构建一些RESTful服务.现在,说我有一个POST服务www.mydomain.com/rest/services/myPost.我有我的Tomcat服务器在我的本地机器上托管这些服务.
在我的Android应用程序中,我只是调用此服务,并返回结果(如果有的话).在这种情况下,我到底在哪里使用CORS.这属于不同类别的服务器调用吗?如果是,那究竟是多少.
此外,我检查了Tomcat的Enable Cors,它说我可以在我的动态Web项目的web.xml中添加一个过滤器,然后它就会开始接受它.
问题4:是什么启用从我的Android设备到我的webservices的调用?
谢谢
sam*_*ris 12
首先,跨域检查由浏览器而不是服务器执行.当JavaScript XmlHttpRequest生成服务器而不是其来源时,如果浏览器支持CORS,它将初始化CORS进程.否则,请求将导致错误(除非用户故意降低浏览器安全性)
当服务器遇到OriginHTTP标头时,服务器将决定它是否在允许的域列表中.如果它不在列表中,则请求将失败(即服务器将发送错误响应).
对于3号和4号,我认为你应该提出不同的问题.否则这个问题会变得太宽泛.而且我认为如果你不删除它会迅速接近.
有关CORS的解释,请参阅程序员的回答:https://softwareengineering.stackexchange.com/a/253043/139479
注意:CORS更像是一种惯例.它不保证安全.您可以编写一个忽略相同域策略的恶意浏览器.它将执行从任何站点获取的JavaScript.您还可以使用任意Origin标头创建HTTP标头,并从实现CORS的任何第三方服务器获取信息.CORS仅在您信任浏览器时才有效.