HTTP
什么是HTTP?
超文本傳輸協(xié)議,是一個基于請求與響應(yīng)脚曾,無狀態(tài)的东且,應(yīng)用層的協(xié)議,潮炯ィ基于TCP/IP協(xié)議傳輸數(shù)據(jù)珊泳,互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,所有的WWW文件都必須遵守這個標(biāo)準(zhǔn)。設(shè)計(jì)HTTP的初衷是為了提供一種發(fā)布和接收HTML頁面的方法
我們可以從以下幾個方面來了解HTTP:
1.HTTP協(xié)議的主要特點(diǎn)
2.HTTP報(bào)文的組成部分
3.HTTP方法
4.get 和 post的區(qū)別
5.HTTP狀態(tài)碼
HTTP協(xié)議的主要特點(diǎn)
簡單快速
每個資源(比如圖片拷沸、頁面)都通過 url 來定位色查。這都是固定的,在http協(xié)議中撞芍,處理起來也比較簡單秧了,想訪問什么資源,直接輸入url即可序无。
靈活
http協(xié)議的頭部有一個數(shù)據(jù)類型验毡,通過http協(xié)議,就可以完成不同數(shù)據(jù)類型的傳輸帝嗡。
無連接
連接一次晶通,就會斷開,不會繼續(xù)保持連接
無狀態(tài)
客戶端和服務(wù)器端是兩種身份哟玷。第一次請求結(jié)束后狮辽,就斷開了,第二次請求時(shí)巢寡,服務(wù)器端并沒有記住之前的狀態(tài)喉脖,也就是說,服務(wù)器端無法區(qū)分客戶端是否為同一個人讼渊、同一個身份动看。有的時(shí)候,我們訪問網(wǎng)站時(shí)爪幻,網(wǎng)站能記住我們的賬號菱皆,這個是通過其他的手段(比如 session)做到的,并不是http協(xié)議能做到的挨稿。
HTTP報(bào)文的組成部分
HTTP方法
主要包含:
GET:獲取資源
POST:傳輸資源
put:更新資源
DELETE:刪除資源
HEAD:獲得報(bào)文首部
get 和 post 比較常見仇轻,其他較少。
get 和 post的區(qū)別
http狀態(tài)碼
http狀態(tài)碼分類:
狀態(tài)碼查詢:https://www.runoob.com/http/http-status-codes.html
Content-Type
Content-Type 標(biāo)頭告訴客戶端實(shí)際返回的內(nèi)容的內(nèi)容類型奶甘。
conten-type查詢:https://www.runoob.com/http/http-content-type.html
HTTP通信傳輸
HTTPS
什么是HTTPS篷店?
HTTPS是身披SSL外殼的HTTP。HTTPS是一種通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行安全通信的傳輸協(xié)議,經(jīng)由HTTP進(jìn)行通信疲陕,利用SSL/TLS建立全信道方淤,加密數(shù)據(jù)包。HTTPS使用的主要目的是提供對網(wǎng)站服務(wù)器的身份認(rèn)證蹄殃,同時(shí)保護(hù)交換數(shù)據(jù)的隱私與完整性携茂。
PS:TLS是傳輸層加密協(xié)議,前身是SSL協(xié)議诅岩,由網(wǎng)景公司1995年發(fā)布讳苦,有時(shí)候兩者不區(qū)分。
HTTPS特點(diǎn):
基于HTTP協(xié)議吩谦,通過SSL或TLS提供加密處理數(shù)據(jù)鸳谜、驗(yàn)證對方身份以及數(shù)據(jù)完整性保護(hù)
通過抓包可以看到數(shù)據(jù)不是明文傳輸,而且HTTPS有如下特點(diǎn):
1.內(nèi)容加密:采用混合加密技術(shù)式廷,中間者無法直接查看明文內(nèi)容
2.驗(yàn)證身份:通過證書認(rèn)證客戶端訪問的是自己的服務(wù)器
3.保護(hù)數(shù)據(jù)完整性:防止傳輸?shù)膬?nèi)容被中間人冒充或者篡改
- 收方能夠證實(shí)發(fā)送方的真實(shí)身份咐扭;
- 發(fā)送方事后不能否認(rèn)所發(fā)送過的報(bào)文;
- 收方或非法者不能偽造懒棉、篡改報(bào)文草描。
HTTPS實(shí)現(xiàn)原理
AJAX
在講Ajax之前我們先了解一下同步和異步。
同步和異步的概念
同步:必須等待前面的任務(wù)完成策严,才能繼續(xù)后面的任務(wù)穗慕。
異步:不受當(dāng)前任務(wù)的影響。
異步更新
我們在訪問一個普通的網(wǎng)站時(shí)妻导,當(dāng)瀏覽器加載完HTML逛绵、CSS、JS以后倔韭,網(wǎng)站的內(nèi)容就固定了术浪。如果想讓網(wǎng)站內(nèi)容發(fā)生更改,就必須刷新頁面才能夠看到更新的內(nèi)容寿酌。
可如果用到異步更新胰苏,情況就大為改觀了。比如醇疼,我們在訪問新浪微博時(shí)硕并,看到一大半了,點(diǎn)擊底部的加載更多秧荆,會自動幫我們加載更多的微博倔毙,同時(shí)頁面并沒有刷新。
試想一下乙濒,如果沒有異步刷新的話陕赃,每次點(diǎn)擊“加載更多”,網(wǎng)頁都要刷新,體驗(yàn)就太不好了么库。
web前端里的異步更新傻丝,就要用到 Ajax
Ajax 的概念
在瀏覽器中,我們可以在不刷新頁面的情況下诉儒,通過ajax的方式去獲取一些新的內(nèi)容桑滩。
Ajax:Asynchronous Javascript And XML(異步 JavaScript 和 XML)。它并不是憑空出現(xiàn)的新技術(shù)允睹,而是對于現(xiàn)有技術(shù)的結(jié)合。Ajax 的核心是 js 對象:XMLHttpRequest幌氮。
一個完整的HTTP請求需要的是:
- 請求的網(wǎng)址缭受、請求方法get/post。
- 提交請求的內(nèi)容數(shù)據(jù)该互、請求主體等米者。
- 接收響應(yīng)回來的內(nèi)容。
Ajax的請求步驟
(1)創(chuàng)建異步對象宇智。即 XMLHttpRequest 對象蔓搞。
(2)使用open方法設(shè)置請求的參數(shù)。open(method, url, async)随橘。參數(shù)解釋:請求的方法喂分、請求的url、是否異步机蔗。
(3)發(fā)送請求蒲祈。
(4)注冊事件。 注冊onreadystatechange事件萝嘁,狀態(tài)改變時(shí)就會調(diào)用梆掸。
如果要在數(shù)據(jù)完整請求回來的時(shí)候才調(diào)用,我們需要手動寫一些判斷的邏輯牙言。
(5)獲取返回的數(shù)據(jù)酸钦。
XMLHttpRequest 對象詳解
發(fā)送請求:
- open(method, url, async);
參數(shù)解釋:
- method:請求的類型;GET 或 POST
- url:文件在服務(wù)器上的位置
- async:true(異步)或 false(同步)
POST請求注意:
- send(string); //string要發(fā)送的內(nèi)容
- xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//定義發(fā)送內(nèi)容的格式
onreadystatechange 事件
注冊 onreadystatechange 事件后咱枉,每當(dāng) readyState 屬性改變時(shí)卑硫,就會調(diào)用 onreadystatechange 函數(shù)。
readyState:(存有 XMLHttpRequest 的狀態(tài)庞钢。從 0 到 4 發(fā)生變化)
- 0: 請求未初始化
- 1: 服務(wù)器連接已建立
- 2: 請求已接收
- 3: 請求處理中
- 4: 請求已完成拔恰,且響應(yīng)已就緒
status: - 200: "OK"。
- 404: 未找到頁面基括。
在 onreadystatechange 事件中颜懊,當(dāng) readyState 等于 4,且狀態(tài)碼為200時(shí),表示響應(yīng)已就緒河爹。
服務(wù)器響應(yīng)的內(nèi)容
- responseText:獲得字符串形式的響應(yīng)數(shù)據(jù)匠璧。
- responseXML:獲得 XML 形式的響應(yīng)數(shù)據(jù)。
如果響應(yīng)的是普通字符串咸这,就使用responseText夷恍;如果響應(yīng)的是XML,使用responseXML媳维。
JSON
JSON 的語法
JSON(JavaScript Object Notation):是ECMAScript的子集酿雪。作用是進(jìn)行數(shù)據(jù)的交換。
語法更為簡潔侄刽,網(wǎng)絡(luò)傳輸指黎、機(jī)器解析都更為迅速。
語法規(guī)則:
- 數(shù)據(jù)在鍵值對中
- 數(shù)據(jù)由逗號分隔
- 花括號保存對象
- 方括號保存數(shù)組
數(shù)據(jù)類型:
- 數(shù)字(整數(shù)或浮點(diǎn)數(shù))
- 字符串(在雙引號中)
- 邏輯值(true 或 false)
- 數(shù)組(在方括號中)
- 對象(在花括號中)
- null
JSON對象和字符串轉(zhuǎn)換
JSON.parse():將JSON字符串轉(zhuǎn)化為 js 對象
JSON.stringify():將 JS 對象轉(zhuǎn)化為JSON字符串州丹。