仅当URL以www为前缀时才会出现CORS错误

时间:2018-03-19 13:06:25

标签: javascript web cors xmlhttprequest

我目前遇到有关CORS(跨域资源共享)的问题,奇怪的是,当我使用www作为我的网址前缀时,这似乎只会发生。

例如,当我使用网址访问我的网站时:“http://example.com/index”一切正常,所有资源都正确加载。然而,当我尝试使用网址“http://www.example.com/index”访问我的网站时,我收到错误Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://example.com/index. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

我尝试加载的资源是使用以下代码的XML文件:

function loadXML()
{
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            xmlData = xhttp.responseXML;
            initStartShot();
        }
    };
    xhttp.open("GET", "http://example.com/XML/someXMLfile.xml", true);
    xhttp.send();
}

我的所有资源文件都与我的网页位于同一个域中。

我已经查看了issues related to mine的SO,但大多数都是关于CORS的,以及如何让它工作。但是看到事实上我没有任何CORS问题而没有“www”前缀这似乎不适用于我的问题。

很遗憾,我无法分享网址,但如果您需要任何其他信息,我会尽力提供。

非常感谢任何帮助。

〜雷米

2 个答案:

答案 0 :(得分:1)

LR.train(input_fn=train_input_data,steps = 1) with tf.Session() as sess: last_check = tf.train.latest_checkpoint(tf_data) saver = tf.train.import_meta_graph(last_check + '.meta') print (last_check +'.meta') saver.restore(sess, last_check) ###### Model_variables = tf.GraphKeys.MODEL_VARIABLES Global_Variables = tf.GraphKeys.GLOBAL_VARIABLES ###### all_vars = tf.get_collection(Model_variables) # print (all_vars) for i in all_vars: print (str(i) + ' --> '+ str(i.eval())) example.com起源不同。要成为相同的源,URL方案,主机名和端口必须相同。 <{1}}和www.example.com的主机名不同。

通过默认,允许JavaScript访问来自同一来源的数据。

您收到有关丢失的CORS权限的错误,因为您尝试从另一个访问一个来源。

有几种方法可以解决这个问题。

  • 首先不要使用多个来源。选择www.example.comexample.com中的一个是规范的。将HTTP服务器配置为从非规范的重定向到规范的重定向。
  • 使用相对网址。您的绝对URL意味着当您处于错误的原点时,它仍会尝试访问另一个。使用相对URL将使请求保持与页面相同的原点。
  • 将您的服务器配置为使用CORS标头向其他来源授予权限。

我推荐第一个选项。

答案 1 :(得分:0)

在回顾我的SO帖子时,我确实发现了这个问题,所以为了将来的参考,我将回答我自己的问题:

在我的XML下载程序中,我使用静态路径../XML/someXMLfile.xml而不是相对路径var syncClient = new WebClient(); string URI = "https://test-khalid.herokuapp.com/v1/roles/de988992-4db8-4f75-884b-3dba893310e6"; syncClient.Headers.Add("authorization", "invalid-token"); Response.Write(syncClient.UploadString(URI, "PUT", "{\"title\":\"Shomaail Title 1\", \"role_type\":\"3\" }")); ,我还不清楚为什么&#34; www.example.com&#34;和&#34; example.com&#34;被处理为不同的域名,但这解决了我的问题。

编辑:根据@Daniel_Gale他的评论,使用location.hostname也可以。