1. 程式人生 > >JS跨域問題,及在同一個伺服器上佈置兩個網站

JS跨域問題,及在同一個伺服器上佈置兩個網站

部署網站
網站部署後,地址如果用一樣的,那麼就分配不同的埠,埠預設80,新增的埠在設定之後還需要在防火牆中的出站規則中新增一下,
不然外部訪問不了。

什麼是跨域
我們經常會在頁面上使用ajax請求訪問其他伺服器的資料,此時,客戶端會出現跨域問題.
跨域問題是由於javascript語言安全限制中的同源策略造成的.

簡單來說,同源策略是指一段指令碼只能讀取來自同一來源的視窗和文件的屬性,這裡的同一來源指的是主機名、協議和埠號的組合.

例如:

URL 說明 是否允許通訊
http://www.a.com/a.js 
http://www.a.com/b.js
同一域名下 允許
http://www.a.com/lab/a.js 
http://www.a.com/script/b.js
同一域名下不同資料夾 允許
http://www.a.com:8000/a.js 
http://www.a.com/b.js
同一域名,不同埠 不允許
http://www.a.com/a.js 
https://www.a.com/b.js
同一域名,不同協議 不允許
http://www.a.com/a.js 
http://70.32.92.74/b.js
域名和域名對應ip 不允許
http://www.a.com/a.js 
http://script.a.com/b.js
主域相同,子域不同 不允許
http://www.a.com/a.js 
http://a.com/b.js
同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js 
http://www.a.com/b.js
不同域名 不允許

解決方式(本人親測):

HttpWebRequest

private string HttpPost(string Url, string postDataStr)
        {
            CookieContainer cookie = new CookieContainer();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
            request.CookieContainer = cookie;
            Stream myRequestStream = request.GetRequestStream();
            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
            myStreamWriter.Write(postDataStr);
            myStreamWriter.Close();

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            response.Cookies = cookie.GetCookies(response.ResponseUri);
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();

            return retString;
        }