-
Notifications
You must be signed in to change notification settings - Fork 8.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
跨域 -> 跨站 #3096
跨域 -> 跨站 #3096
Conversation
Preview URLsFlawsURL:
External URLsURL: No new external URLs |
@0-Captain 在 Cookie 上,瀏覽器目前的確是用網域作為是否「跨站」的判斷,請問你覺得這邊使用跨域的錯誤是什麼呢? |
這裡的原文是 cross-origin ,而 cross-{origin,domain,site} 之間是有嚴格定義,所以這裡用「跨域」或是「跨站」都不對,請改用「跨來源」或「跨源」。 https://developer.mozilla.org/zh-TW/docs/Web/HTTP/CORS |
cross-origin翻译为跨域应该是没问题的(https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS) |
如果你認為 cross-origin 翻譯為「跨域」沒有問題,那請問你發這則 PR 的目的是?原文就是 cross-origin 。 另外,可以去看原文的 CORS ,裡面對 origin 的補充說明很明確的指出是「(domain, scheme, or port)」中文那樣翻譯只有兩種可能,一種是翻譯錯,一種是內容是舊的。 |
因为即使same-site的值为lax也是可以在跨域而不跨站的情况下使用withCredentials来为跨域请求携带cookie,所以这里same-site为none的时候只是多出了可以跨站的情况。 |
可以理解为withCredentials是向浏览器请求带上cookie,但是same-site管理着cookie的权限。跨域情况下浏览器默认不会带上cookie,所以需要withCredentials告诉浏览器需要cookie,浏览器在给之前得先看看same-site设置来检查是否有对应的权限。所以lax的情况下是有跨域而不跨站的权限,none的情况下拥有所有跨域的情况的权限,相对而言应当强调的是多出了跨站的权限 |
@0-Captain CC @irvin 基本上, cross-origin 比 cross-site 要嚴格,所以原文說的是如果選項為 NONE 的情況,連「cross-origin」的情況下都會攜帶 cookie 。 所以即便是原翻譯「跨域」也是不對的,最精確的還是「跨來源」(cross-origin)就跟原文保持一致才是最好的。 |
@yin1999 please advise |
在我看了 https://web.dev/samesite-cookies-explained/ 之后,我认为 pr 作者的修改可能没问题,而是英文部分对 None 的描述有误,我明天测试后会在这儿继续回复。 |
以下是我进行的测试: SameSite: Lax在 Lax 模式下,按照我的理解,其与 Strict 的区别体现在,当我们通过第三方站点的外链进入第一方站点时,Cookie会被发送。但其会阻止第三方站点中的资源跨站请求时发送Cookie,我在我的一个服务器上配置了一个 Lax 模式的 Cookie,并在 localhost 站点上引用服务器上的图片资源,可以看到请求中并没有携带设置为 Lax 的 Cookie。 而选择从 localhost 页面内的外链跳转到服务器资源时,Cookie 能够被正常发送(第一次由外站转入的访问): SameSite: Strict可以看到,当我从 localhost 页面通过外链访问服务器资源时,Cookie 并未被发送,虽然 cookie 此时在“第一方”站点下: SameSite: None清除 Cookie,并让服务器返回 None 模式的 Cookie,然后在 localhost 站点上引用服务器上的图片资源,可以看到请求中携带了 设置为 None 的 Cookie。 额外说明因为浏览器对 Cookie 的存储涉及如下几项属性:
根据这几项属性,浏览器是无法判断,此次请求是否跨源的,因为跨源涉及到了端口号,而在 Cookie 的属性中,我们仅有 Domain 和 Secure 两项属性,无法判断是否跨源。 下方是关于跨源的一个小测试,先发送左侧的请求,服务器设置了 session 这一 cookie(Lax 模式),而在右侧跨源的请求中,这里的cookie也被携带了(参见:Cookie 匹配规则) 总结我认为是英文文档中的说明有误。因为 Cookie 本身并不能判断请求是否跨源,其仅能区分站点、HTTP/HTTPS,无法判断是否跨源。同时,通过上面的测试结果可以看出,Lax 和 None 以及 Strict 的区别在于第三方站点对于 “跨站” 资源发送请求时是否需要携带 Cookie。 |
I've raised mdn/content#15893. Edit: Hi @irvin, this issue has been resolved by mdn/content#15902. I think this pr is ready to merge. |
😶Is there any update on this pr? |
只能说翻译确实没问题,问题出在英文原文的描述就不准确,我同意@yin1999的观点,这里用跨站(cross-site)更准确 |
英文版本的文档已更新为 "cross-site"(跨站):mdn/content#15902 |
那就更应该合并这个pr了 |
总结cross-domain - 跨域 |
No description provided.