Javascript-httpget和POST

Javascript-httpget和POST,javascript,http,Javascript,Http,启动HTTP GET或POST请求时: 普通浏览器不允许JavaScript跨域调用 这意味着来自给定域的每个HTTP请求(请求头中的“主机”)都代表源主机,比如foo.com,并且客户端请求不能修改它 此外,当请求源于子域(如bar.foo.com)时,请求头中的“主机”将是“bar.foo.com” 当执行跨域HTTP请求时,这是正确的,即“主机”将是foo.com或if from subdomain bar.foo.com,并且接收端(另一个域)将分别将“主机”视为这些主机 支持CORS

启动HTTP GET或POST请求时:

  • 普通浏览器不允许JavaScript跨域调用
  • 这意味着来自给定域的每个HTTP请求(请求头中的“主机”)都代表源主机,比如foo.com,并且客户端请求不能修改它
  • 此外,当请求源于子域(如bar.foo.com)时,请求头中的“主机”将是“bar.foo.com”
  • 当执行跨域HTTP请求时,这是正确的,即“主机”将是foo.com或if from subdomain bar.foo.com,并且接收端(另一个域)将分别将“主机”视为这些主机

支持CORS的服务器将检查请求中的
来源
头。该值将与您描述的一样,即发出请求的服务器。在它的回复中,服务器将发送一个名为
访问控制允许源站的头文件
。如果与源代码匹配,浏览器将接受响应。它显然还需要浏览器支持CORS


维基百科有一个相当好的网站

通过HTTP浏览器沙箱进行的所有操作(不仅仅是AJAX调用!IFRAME基于相同的条件,针对不同的事情有限制-即,您无法控制另一个域/主机/端口/协议上IFRAME的内容,只需加载页面并查看加载内容的URI即可。JS中的内容是禁止的)是在客户端而不是服务器端完成的:您的浏览器将主动拒绝查询任何没有以下内容的内容:

  • 相同的主机名(子域计为不同的主机名)
  • 同一端口
  • 相同的访问方法(HTTP或HTTPS)
对于AJAX,这将导致一个红色的“由于安全性而无法获取”类错误。对于某些浏览器,请求确实会发生:有一种方法可以绕过此限制,使用访问控制头。这些有效地告诉您的浏览器“我对x很友好”,其中x是域的通配符列表(其中*表示一切)

要解决这个问题,浏览器将执行请求,如果CORS未打开,则会主动触发异常(
XMLHttpRequest:x是y不允许的
)。然而,请求已经发生

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

  • 大多数浏览器都有,但有些没有(IE8
    • 主机
      HTTP请求头始终是请求要访问的域

    • 如果您使用
      XMLHTTPRequest
      方法启动HTTP GET或POST请求,则如果发送请求的JavaScript代码与发送请求的URL不在同一域中,则它将不允许您发送请求,除非浏览器支持跨源资源共享

    • 如果浏览器确实支持,那么它会将您的请求发送到其他域,但会附加一个
      Origin
      头,指示为JavaScript提供请求的站点。如果服务器允许请求,它将使用
      Access Control Allow Origin
      头响应,列出它将接受请求的域他是从哪里来的

      • 如果问题是“这是真的吗”,那么答案是否定的

        • 浏览器允许JavaScript跨域创建GET和POST请求,但不允许JavaScript读取跨域请求的响应

        • HTTP标头中的“主机”表示请求发送到的主机,而不是导致该主机的网站。主机是必需的,因为服务器通常是共享的,并且一台服务器可能承载多个单独的网站,因此他们需要知道请求的是哪个网站

        • 创建网站的网站通常(尽管不总是)在“REFERER”HTTP头中标识


        对。“主机”是目标主机。我问这个问题时完全忘了。X\u X