gpt4 book ai didi

Javascript HTTP GET 和 POST

转载 作者:可可西里 更新时间:2023-11-01 16:38:27 25 4
gpt4 key购买 nike

发起 HTTP GET 或 POST 请求时:

  • 普通浏览器不允许Javacript跨域调用
  • 所以这意味着来自给定域的每个 HTTP 请求(请求 header 中的“主机”)代表原始主机,比如 foo.com,并且它不能被客户端请求修改?
  • 此外,当请求来自子域(如 bar.foo.com)时,请求 header 中的“主机”将是“bar.foo.com”
  • 这在执行跨域 HTTP 请求时也是如此,即“主机”将是 foo.com 或者如果来自子域 bar.foo.com,并且接收端(另一个域)将看到“Host”分别作为这些主机?

最佳答案

一切都通过 HTTP 浏览器沙箱(不仅仅是 AJAX 调用!IFRAME 具有基于相同条件的限制,用于不同的事物 - 即,您无法控制另一个域/主机/端口/原型(prototype)上的 IFRAME 的内容,只需加载页面并查看加载内容的 URI。JS 中的内容是禁止访问的)是在客户端而不是服务器端完成的:您的浏览器将主动拒绝查询任何没有的内容:

  • 相同的主机名(子域算作不同的主机名)
  • 同一个端口
  • 相同的访问方法(HTTP 或 HTTPS)

对于 AJAX,这会导致一个大红色“由于安全原因无法获取”-esque 错误。对于某些浏览器,请求确实会发生:有一种方法可以绕过此限制,即使用访问控制 header 。这些有效地告诉您的浏览器“我对 x 很友好”,其中 x 是域的通配符列表(* 代表一切)。

为了解决这个问题,浏览器将执行请求,如果 CORS 未打开,将主动触发异常(XMLHttpRequest: x is not allowed by y)。然而,请求已经发生

显而易见的解决方案是添加一个 Access-Control-Allow-Origin header ,以表示对该站点的跨域查询是可以的。但是,请记住两件事:

  • 大多数浏览器都有它,但有些浏览器没有 (IE8 <.<)
  • 如果 URL 硬编码在脚本中,CORS 自身会有一些小错误(请仔细阅读!)

因此,您需要 IE 的 JSONP 回退。但是,请记住,所有这些都是在客户端完成的,并且不能保证没有任何浏览器会主动忽略 CORS 或 webkit 安全模型。整个模型还依赖于客户端 Host 解析。

关于Javascript HTTP GET 和 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16101816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com