【问题标题】:Header Origin vs Host标头来源与主机
【发布时间】:2012-11-30 21:02:12
【问题描述】:

我对 OriginHost HTTP 标头的工作有疑问。

我有一个 Ajax 页面“Page A”,它将调用 Ajax 提要“Page B”。

我看到来自 Ajax 调用的“Page B”的请求标头包含标头:

Origin: http://example.com
Host: example.com

但是,如果我直接调用“Page B”,请求标头将只包含Host标头:

Host: example.com

因此,我想知道OriginHost 标头之间有什么区别,以及为什么它们会出现在非直接调用中?

Origin 可以预先添加并传递给服务器吗?

【问题讨论】:

    标签: header cross-domain


    【解决方案1】:

    主机是请求被发送的域。引入了此标头,因此托管站点可以在单个 IP 上包含多个域。

    Origin 标头是请求源自 的域。

    始终包含 Host 标头。有时会包含 Origin 标头:它始终包含在跨域请求中(跨所有浏览器),在 Chrome/Safari 中,它也包含在同源 PUT/POST/DELETE 请求中。同源 GET 请求不包含 Origin 标头。

    【讨论】:

    • 谢谢答案,与上面的参考链接相同,顺便说一句,可以假装来源并传递给服务器
    • 无法通过浏览器伪造来源。用户可以使用 curl 来制作带有 Origin 标头的 HTTP 请求,但这不是典型的用例。不建议使用 CORS 作为安全机制;如果您尝试保护内容,您还应该有一些身份验证机制,例如 OAuth2。
    • 谢谢回答,我不会将其用作安全机制; ^^
    • 值得一提的是,某些浏览器(Chrome、Safari 或其他浏览器)确实在同一域请求(但不包括 GET 请求)的 Ajax POST 请求中包含 Origin 标头
    • @user192344,是的,来源可以从浏览器“伪造”,但它涉及到 DNS 攻击才能这样做(想想 DNS 中毒/DNS 重新绑定)。基本上,我们破坏了浏览器下面的层,因此它认为它具有真正的价值。
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 2022-10-09
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2010-09-30
    相关资源
    最近更新 更多