zoukankan      html  css  js  c++  java
  • Access-Control-Allow-Origin与Ajax跨域

    问题

    在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题。另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,才能让前者成功拿到数据。

    这句话对吗?如果对,那么流程是什么样的?

    跨域

    怎样才能算跨域?协议,域名,端口都必须相同,才算在同一个域。

    参考:

    当跨域访问时,浏览器会发请求吗

    这是真正困扰我们的问题,因为我们不清楚浏览器会怎么做。它会不会检查到你要请求的地址不是同一个域的,直接就禁止了呢?

    我在jsbin上 做了一个试验 ,使用Chrome打开。当点击“Run with Js”时,控制台上会打出:

    XMLHttpRequest cannot load http://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://run.jsbin.io' is therefore not allowed access. 
    

    但开发者工具的”Network”栏并没有任何记录。它到底发请求了没?

    我又使用 python -m SimpleHTTPServer 在本地创建了一个小服务器,然后把地址改成它,结果发现在python这边的确打印出请求来了,可见浏览器的确发出了请求。

    Access-Control-Allow-Origin

    现在该 Access-Control-Allow-Origin 出场了。只有当目标页面的response中,包含了 Access-Control-Allow-Origin 这个header,并且它的值里有我们自己的域名时,浏览器才允许我们拿到它页面的数据进行下一步处理。如:

    Access-Control-Allow-Origin: http://run.jsbin.io
    

    如果它的值设为 * ,则表示谁都可以用:

    Access-Control-Allow-Origin: *
    

    没错,在产品环境中,没人会用 *

    你可以阅读下面这篇文章了解更多,并可找到其中的”Run Sample”链接,实际体验一下:

    http://www.html5rocks.com/en/tutorials/cors/

    public HttpResponseMessage Get(string fatherId)
    {
    	string str = JsonConvert.SerializeObject(GetAleCategorysByFid(fatherId), Formatting.Indented);           
    	HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
    	result.Headers.Add("Access-Control-Allow-Origin", "*");
    	return result;
    }



  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234061.html
Copyright © 2011-2022 走看看