跨域请求是否从其他域发送cookie?

时间:2019-01-28 22:59:11

标签: cookies

如果在我的浏览器中为example1.com设置了多个cookie,并且我从example2.com向example1.com发出了请求,那么为example2.com设置的cookie是否会包含在该请求中?

1 个答案:

答案 0 :(得分:4)

Cookie始终取决于当前域。
example2.com无法以任何形式读取域example1.com的cookie。

共享cookie的唯一方法是两个域都具有相同的主域,因此它们看起来像这样:

  • sub1.example.com
  • sub2.example.com

或类似这样:

  • example.com
  • sub2.example.com

cookie-domain必须在所有域中进行调整,以允许一个Cookie用于主域和子域或多个子域。

如果CSP给出了某些条件,表单,链接或脚本仍可以请求或发送某些信息,而无需使用cookie(请参见下文)。


这并不意味着如果域之间永不共享相同的主域,则域之间的交互是被禁止的,但是使用CSP (content security policies),您已经在影响您的网站上允许多少交互。 CSP是有用的规则,但它们很笨拙,到目前为止,您可以允许或禁止对站点上的另一个域(google-analytics,facebook等)进行脚本访问。无法创建允许脚本执行的规则。

此外,CSP并没有或仅部分覆盖了任何通过形式或链接进行的直接交互。因此,对于某些情况,将表单仅发送到当前域之外的其他域可能有用,这可能取决于某些Web服务API(即OAuth),然后必须相应地调整CSP。

如果您搜索域之间交换信息的方法,则仍然可以选择在服务器端交换信息。因此example1.com的服务器可以通过单独的请求与example2.com服务器联系,网站用户无法评论这些内容。如果我考虑使用facebook,我会认为这是肮脏的把戏,但是我知道目的并不总是负面的,而且它在技术上只是一个选择,可能会对某些问题有所帮助。服务器交互的一种可能解决方案是cUrl-requests

关于CSP的另一个选择是,您可以允许iframe(HTML5中不再存在其他类型的框架)。因此,如果CSP进行了相应的调整,您仍然可以在example1.com的站点中包含来自example2.com域的iframe。

编辑
在某些情况下,建议对文件使用子域,以使文件始终不带任何cookie地交付,而仅html页面随cookie一起交付。通常,也有可能在同一个域中传递没有cookie的文件,但在子域中传递它可能会更容易。发送不带cookie的图像,javascript文件和css文件之类的文件可以使站点更快,并且cookie对于静态文件的请求无论如何都是无用的。请注意,某些图片或CSS之类的文件可能是在服务器上动态创建的,而不是静态的,因此可能需要这些文件使用cookie。

仍在回答您的问题
如果将cookie域设置为覆盖主域和/或几个子域,则这些域将共享相同的cookie。不会有几个Cookie,只有一个。