目錄
應(yīng)用層協(xié)議HTTP
HTTP的工作過(guò)程
HTTP協(xié)議格式
HTTP請(qǐng)求
URL
HTTP常用方法
Header報(bào)頭
Host
Content-Length
Content-Type
User-Agent
Referer
Cookie
Body
HTTP響應(yīng)
狀態(tài)碼
?編輯FORM構(gòu)建HTTP請(qǐng)求
GET請(qǐng)求
POST請(qǐng)求
ajax構(gòu)造HTTP請(qǐng)求
GET請(qǐng)求
HTTP (全稱為 "超文本傳輸協(xié)議") 是一種應(yīng)用非常廣泛的 應(yīng)用層協(xié)議.
應(yīng)用層協(xié)議HTTP
像TCP協(xié)議,是傳輸層中的協(xié)議.負(fù)責(zé)的只是將數(shù)據(jù)進(jìn)行傳輸,就像快遞員一樣的作用.
而HTTP應(yīng)用層的協(xié)議,是在接收到的數(shù)據(jù)進(jìn)行處理或表明其使用的方式,相當(dāng)于一種"在加工".
HTTP的工作過(guò)程
當(dāng)我們輸入一個(gè)網(wǎng)址,在同時(shí)瀏覽器就會(huì)對(duì)相應(yīng)要訪問(wèn)的服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求.
在服務(wù)器接收到這個(gè)HTTP請(qǐng)求,經(jīng)過(guò)一定的處理后,再返回一個(gè)HTTP響應(yīng).
當(dāng)我們使用抓包軟件,觀察打開(kāi)CSDN首頁(yè):
可以看到,當(dāng)打開(kāi)一個(gè)網(wǎng)頁(yè)時(shí).涉及到的不止一次HTTP的請(qǐng)求與響應(yīng).
HTTP協(xié)議格式
可以通過(guò)抓包的方式來(lái)查看HTTP協(xié)議中的格式.
- HTTP請(qǐng)求首行內(nèi)容:方法 + URL(網(wǎng)址)?+ 版本號(hào).
- HTTP響應(yīng)首行內(nèi)容:版本號(hào) + 狀態(tài)碼 + 狀態(tài)碼解釋
- 接下來(lái)的內(nèi)容就屬于Header部分:請(qǐng)求的屬性, 冒號(hào)分割的鍵值對(duì);每組屬性之間使用\n分隔;遇到空行表示Header部分結(jié)束.
-
Body: 空行后面的內(nèi)容都是Body. Body允許為空字符串. 如果Body存在, 則在Header中會(huì)有
一個(gè)Content-Length屬性來(lái)標(biāo)識(shí)Body的長(zhǎng)度.
來(lái)分別查看訪問(wèn)CSDN的抓包結(jié)果
HTTP請(qǐng)求:
(中間紅色的是Header部分)
?HTTP響應(yīng):
在請(qǐng)求部分中Body的內(nèi)容不太顯著.在響應(yīng)就可以明顯的看到存放的是訪問(wèn)的網(wǎng)頁(yè)相應(yīng)的前端內(nèi)容.
HTTP請(qǐng)求
URL
URL就是我們俗稱的"網(wǎng)址"
URL-uniform resource locator-統(tǒng)一資源定位器.
一個(gè)URL包含的信息指出了一個(gè)文件在網(wǎng)絡(luò)上的位置,以及其使用的方式.
URL = 包括協(xié)議+域名或ip+端口號(hào)+路徑+查詢參數(shù)+錨點(diǎn),其中一些內(nèi)容是可以被省略的.
- 協(xié)議:像是http,https(加密后的http)
- 域名/IP:要訪問(wèn)的服務(wù)器地址
- 端口號(hào):對(duì)應(yīng)服務(wù)器的端口號(hào)
- 路徑:網(wǎng)絡(luò)服務(wù)器上的資源路徑
- 查詢參數(shù)(query string):訪問(wèn)一個(gè)網(wǎng)頁(yè),其實(shí)就像是在訪問(wèn)一個(gè)文件.此文件可以沒(méi)有什么交互.也可以是一個(gè)程序,在我們提交了一定的參數(shù)后,返回一定的結(jié)果.返回的結(jié)果就是一個(gè)文件(頁(yè)面).參數(shù)中就存放著我們給服務(wù)器的參數(shù),本質(zhì)上是鍵值對(duì)[用&分割鍵值對(duì),=分割鍵與值]
- 錨點(diǎn):像是一個(gè)書(shū)簽,在一些有目錄的查詢頁(yè)面可以看到,幫助定位到網(wǎng)頁(yè)的某一個(gè)位置中
HTTP常用方法
- GET:獲取資源(一般客戶端用來(lái)向服務(wù)器獲取資源)
- POST:傳輸實(shí)體(一般服務(wù)器用來(lái)向客戶端發(fā)送資源)
- PUT:傳輸文件
- HEAD:返回報(bào)頭(header)
- DELETE:刪除文件
關(guān)于GET與POST方法.其實(shí)他們的本質(zhì)是相同的.只是在使用的習(xí)慣和場(chǎng)景上的用法不同.PUT與這兩個(gè)方法也是類似的.
GET不一定只用來(lái)在請(qǐng)求上獲取資源,也可以發(fā)送資源.POST相應(yīng)的也可以發(fā)送資源.
Header報(bào)頭
報(bào)頭中為鍵值對(duì)格式:key:value,一個(gè)鍵值對(duì)占一行空間
Host
表明服務(wù)器主機(jī)的地址與端口
例如:Host: www.csdn.net(此處的地址是域名的形式哈,解析一下就可以得到相應(yīng)的IP了)
Content-Length
表示body中的長(zhǎng)度.在GET方法中一般沒(méi)有body,自然就看不到此鍵值對(duì)啦.
Content-Type
有了此格式,接收HTTP的瀏覽器或者服務(wù)器才能正確的解析出body中的內(nèi)容
較重要的是:
- application/x-www-form-urlencoded : 表示提交的數(shù)據(jù)為form格式,并對(duì)其進(jìn)行urlencoded編碼與序列化
- multipart/form-data: 表示提交的數(shù)據(jù)為form格式
- application/json: 表示提交的數(shù)據(jù)為json格式
urlencoded編碼是將一些符號(hào)進(jìn)行重新編碼成另一種形式,序列化就是為了節(jié)省資源將其的換行與空格都去除了.?
form格式,形如:
name=zhangsan&id=123456
json格式,形如(冒號(hào)分割鍵與值,逗號(hào)分割鍵值對(duì)):
{
? ? ? ? 鍵(規(guī)定為Sting類型) : 值(變量)
????????"name" : zhangsan,
????????"id" : 123456
}
User-Agent
表明瀏覽器或當(dāng)前操作系統(tǒng)的屬性
為了給不同操作系統(tǒng)或?yàn)g覽器傳輸正確版本的資源.
像一些老版本的,例如XP系統(tǒng)就會(huì)打不開(kāi)一些網(wǎng)站.或者一個(gè)網(wǎng)頁(yè)能被XP與win10打開(kāi),說(shuō)明其可能相應(yīng)的配備了兩套資源來(lái)適應(yīng)兩個(gè)操作系統(tǒng).
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203
描述了操作系統(tǒng)為win10,64位
瀏覽器版本是Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203
Referer
表明當(dāng)前網(wǎng)頁(yè)的來(lái)源的地址.
即用百度點(diǎn)擊CSDN的網(wǎng)頁(yè).Referer顯示的就是百度的地址
如果在地址欄輸入U(xiǎn)RL來(lái)訪問(wèn)或者在收藏夾進(jìn)行打開(kāi),是沒(méi)有Referer的噢
像這里的用處,就可以讓投廣告的廣告主查看哪一個(gè)網(wǎng)頁(yè)訪問(wèn)此廣告的瀏覽量最多啦.
Cookie
Cookie是在訪問(wèn)某些頁(yè)面時(shí),留存在本機(jī)中的文件.
此文件記錄了關(guān)于用戶的相關(guān)信息,或是身份標(biāo)識(shí).方便服務(wù)器高效的對(duì)用戶的偏好行為作出反應(yīng).
類似于"個(gè)性化推薦".
每一個(gè)域名下都可以有一個(gè)Cookie,其之間是不會(huì)產(chǎn)生沖突的.
Cookie還具有實(shí)效性,有一些是臨時(shí)的,還有一些是可以長(zhǎng)期存在的.跟服務(wù)器的相應(yīng)設(shè)置相關(guān).
其可以是網(wǎng)頁(yè)自行寫(xiě)入的,也可以的服務(wù)器使用SetCookie方法進(jìn)行寫(xiě)入.
Body
關(guān)于HTTP的請(qǐng)求,在用戶對(duì)服務(wù)器進(jìn)行上傳一些數(shù)據(jù)時(shí)會(huì)使用到POST方法.可以看到其body(正文).
像是上傳頭像,body中存儲(chǔ)的就是一定格式的圖片信息.
HTTP響應(yīng)
狀態(tài)碼
FORM構(gòu)建HTTP請(qǐng)求
FORM的參數(shù)
- action:請(qǐng)求的URL
- method:使用的方法(form只支持get方法或post方法)
INPUT的參數(shù)
type:輸入框的類型
name:構(gòu)造http請(qǐng)求時(shí)的URL上query string鍵值對(duì)中的key
vaule:輸入框中要顯示的文本
GET請(qǐng)求
<body>
<form action="https://www.baidu.com/" method="get">
<input type="text" name="name">
<input type="submit" value="點(diǎn)擊提交">
<!-- <button type="submit">提交</button> -->
</form>
</body>
提交后的結(jié)果:
可以看到input中提交的值,與input的name組成了URL中的query string
POST請(qǐng)求
跟get相同,只要把方法改成post就可以了
<body>
<form action="https://www.baidu.com/" method="post">
<input type="text" name="name">
<input type="submit" value="點(diǎn)擊提交">
<!-- <button type="submit">提交</button> -->
</form>
</body>
結(jié)果:
在post方法中,數(shù)據(jù)從URL中的query sting移動(dòng)到了body內(nèi)容中
ajax構(gòu)造HTTP請(qǐng)求
Asynchronous?Javascript?And?XML-異步的Javascript與XML
相比于form,功能更強(qiáng)大.能夠使用除了get與post的其他方法.
ajax發(fā)送的http請(qǐng)求中的header與body可以靈活的進(jìn)行設(shè)置
特點(diǎn)是:異步請(qǐng)求,局部刷新.
此處異步的意思是:可以不等待服務(wù)器的響應(yīng)就繼續(xù)往下執(zhí)行
GET請(qǐng)求
雖然js原生庫(kù)中含有ajax
但著還是引入了一個(gè)jquery庫(kù)里面有ajax使用更方便一定
<body>
<script src = "http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script>
$.ajax({
type: 'get',
url : 'https://www.baidu.com/index.htm?name=wow',
success: function(data){//回調(diào)函數(shù),異步的體現(xiàn).在服務(wù)器響應(yīng)后再調(diào)用此函數(shù)
console.log("OK")
}
});
console.log("wow");//請(qǐng)求完后即刻執(zhí)行ajax后面的程序,不用等待響應(yīng)
</script>
</body>
post也是差不多的,就不多展開(kāi)了.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-658036.html
以上就是關(guān)于HTTP的一些簡(jiǎn)要說(shuō)明.文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-658036.html
到了這里,關(guān)于[JAVAee]HTTP協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!