1.跨域指的是什么?
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 |
不同域名 | 不允許 |
跨域指的是域名不是ip!
如下:
127.0.0.1 與你在host中配置的 127.0.0.1 scan.www
雖然DNS解析的時候ip都是127.0.0.1,但是兩者還是屬於跨域,因為域名不同!
2.Comet與Ajax
3.XMLHttpRequest
除了GET與POST之外,XMLHttpRequest規范也允許第一個參數為DELETE,HEAD,OPTIONS,PUT。
如果有請求頭的話,需要設置它。
如:POST請求需要“Content-Type”頭指定請求主題的MIME類型。

request.setRequestHeader("Content-Type","text/plain");
POST發送:


4.為了在響應准備就緒得到通知,必須監聽XMLHttpRequest對象上的readystatechange事件。
readyState是一個整數,它指定了HTTP請求的狀態。


下面是一個異步響應。


下面是一個同步響應:



5.<script>元素可以發起跨域請求。而XMLHttpRequest API不可以。
我們可以通過檢查頭文件類型來判斷響應的數據類型。
var type=request.getResponseHeader("Content-Type"); if(type.indexOf("xml")!==-1 && request.responseXML){ callback(request.responseXML); //Document對象響應
}else if(type==="application/json"){ callback(JSON.parse(request.responseText)); //JSON響應
}
6.multipart/form-data
當HTML表單同事包含文件上傳元素和其他元素時,瀏覽器不能使用普通的表單編碼,
必須使用“multipart/form-data”的特殊Content-Type來用POST方法提交表單。
7.文件上傳
js:
window.onload=function(){ var a=document.getElementById("dd"); a.addEventListener("change",function(){ alert(this.files) //返回一個FileList
},false) }

8.HTTP進度事件
HTTP請求超時,觸發timeout事件
HTTP請求中止,觸發abort事件
HTTP太多重定向的網絡錯誤會阻止請求完成,觸發error事件
與progress事件相關的其他三個屬性:
loaded:目前傳輸的字節數值
total:頭傳輸的數據的整體長度
lengthCopmputable:如果知道內容長度,為true
例子:
request.onprogress=function(e){ if(e.lengthCopmputable){ progress.innerHTML=Math.round(100*e.loaded/e.total)+"%完畢!";
} }
9.CORS(跨域資源共享)
10.使用EventSource創建簡單聊天客戶端

