- HTTP狀態(tài)碼
- HTTP數(shù)據(jù)報(bào)的構(gòu)造
JavaEE & HTTP狀態(tài)碼 & HTTP數(shù)據(jù)報(bào)的構(gòu)造
1. HTTP狀態(tài)碼
c語言也學(xué)到了一個(gè)全局的變量errno,在一些內(nèi)存函數(shù)或者文件操作的時(shí)候,這個(gè)變量會(huì)有所變化,如果程序出錯(cuò)了,這個(gè)變量對(duì)應(yīng)的值就代表了對(duì)應(yīng)的錯(cuò)誤信息,【errno - error no(number)】,通過一些函數(shù)去解析這個(gè)錯(cuò)誤碼就可以了~
而HTTP的狀態(tài)碼,就是反應(yīng)網(wǎng)頁的狀態(tài)的(正確以及錯(cuò)誤…)
- 比如你所熟知的404,就是找不到這個(gè)網(wǎng)頁的意思~
- 而瀏覽器一般遇到錯(cuò)誤信息,頁面是打不開的,就會(huì)打印狀態(tài)碼和錯(cuò)誤信息
- 當(dāng)然,HTTP的狀態(tài)碼不僅僅只有這個(gè),還有很多~
傳送門1:HTTP 響應(yīng)狀態(tài)碼 - HTTP | MDN (mozilla.org)
傳送門2:HTTP 狀態(tài)碼 | 菜鳥教程 (runoob.com)
可見,狀態(tài)碼的數(shù)量很多很多,但是我們并不需要掌握那么多,我們只需要掌握大概的意思,以及個(gè)別常見的狀態(tài)碼的含義即可~
1.1 200 - OK
- 表示的是請(qǐng)求成功
抓包:
- 抓到很多狀態(tài)碼為200的包~
1.2 404 - Not Found
- 表示訪問的資源不存在~
抓包:
b站的404錯(cuò)誤信息則是顯示成這樣的:
-
一些網(wǎng)站對(duì)應(yīng)這些狀態(tài)碼的打印提醒比較獨(dú)特
-
這個(gè)響應(yīng)的正文,就是這個(gè)頁面~
1.3 403 - Forbidden
- 表示的含義就是,訪問被拒絕,沒有權(quán)限
以碼云為例:
- 私有項(xiàng)目別人是沒有權(quán)限訪問的
別人訪問的話:
1.4 500 - Internal Server Error
- 服務(wù)器內(nèi)部錯(cuò)誤
- 在互聯(lián)網(wǎng)上不容易見到,但是在你自己寫代碼的過程中,你的服務(wù)器經(jīng)常bug,拋了異常沒catch,就會(huì)500~
在我們寫的第一個(gè)Servlet程序的時(shí)候,就演示過這個(gè)500
- 所以我們寫代碼要catch,不然是直接讓整個(gè)網(wǎng)頁掛了,catch到服務(wù)器那顯示錯(cuò)誤信息打印日志就行了~
博客片段:
1.5 504 - Gateway Timeout
- 表示服務(wù)器訪問超時(shí)
- 瀏覽器給服務(wù)器發(fā)請(qǐng)求,服務(wù)器要響應(yīng)才對(duì),如果這個(gè)等待請(qǐng)求的時(shí)間異常,就會(huì)504
這就是超時(shí)重傳后,又又又超時(shí)的“放棄訪問”
- 熱門的時(shí)間點(diǎn),搶火車票的時(shí)候就可能會(huì)出現(xiàn)
1.6 302/301 重定向
302:Move temporarily 臨時(shí)重定向
301:Moved Permanently 永久重定向
重定向是什么?
- 有一個(gè)笑話:一個(gè)男孩給喜歡的女孩送早餐,然后這個(gè)女孩就將這份早餐送給她喜歡的男孩,這就是重定向
- 如果這個(gè)男孩是個(gè)舔狗,這個(gè)女孩如果一直不告訴這個(gè)男孩這件事情,那么就是永久重定向,如果是良心發(fā)現(xiàn),就是臨時(shí)重定向~
- 另一個(gè)例子:呼叫轉(zhuǎn)移
- 我原本的一個(gè)手機(jī)號(hào):135xxxx,后來我改了手機(jī)號(hào)153xxxx,但是我的好友只知道我的舊號(hào)碼呀,那么我們就可以到營業(yè)廳,做一個(gè)業(yè)務(wù)“呼叫轉(zhuǎn)移”,好友撥打135xxxx重定向到153xxxx
臨時(shí):下次要不要繼續(xù)重定向?不清楚
永久:以后都重定向
所以重定向就是,訪問舊地址被自動(dòng)引導(dǎo)到新地址上~
抓包:
- 在學(xué)校一些教務(wù)系統(tǒng)上就有,因?yàn)橛行┦怯信f版本的,所以要重定向到新版本
這些就是常見的狀態(tài)碼了,其他遇到了再去查~
傳送門1:HTTP 響應(yīng)狀態(tài)碼 - HTTP | MDN (mozilla.org)
傳送門2:HTTP 狀態(tài)碼 | 菜鳥教程 (runoob.com)
HTTP協(xié)議的標(biāo)準(zhǔn)文檔中,還有一個(gè)特殊的狀態(tài)碼,418(彩蛋,隱藏劇情)
- teapot其實(shí)就是彩蛋的意思
在百度搜“黑洞”:
2. 構(gòu)造HTTP請(qǐng)求
- 至于HTTP響應(yīng),就得有HTTP服務(wù)器和收到請(qǐng)求才行,在Tomcat,Servlet中我們重寫對(duì)應(yīng)方法,計(jì)算和設(shè)置響應(yīng)信息后,就會(huì)幫我們發(fā)去客戶端
2.1 瀏覽器搜索欄輸入url
- 這樣就會(huì)構(gòu)造出一個(gè)GET請(qǐng)求~
2.2 HTML中,一些特殊標(biāo)簽
- link標(biāo)簽
- script標(biāo)簽
- img標(biāo)簽
- a標(biāo)簽
都是向網(wǎng)絡(luò)索取資源的~
以我們做過的博客系統(tǒng)頁面為例子:
這就是script發(fā)出的一個(gè)GET請(qǐng)求,去網(wǎng)絡(luò)上索取jQuery
- 本地資源就不會(huì)觸發(fā)~
2.3 form表單
- HTML中,form標(biāo)簽頁能構(gòu)造請(qǐng)求(GET/POST…)
例子:
效果:
抓包:
- 這個(gè)url問號(hào)后面的query string就是兩個(gè)input的對(duì)應(yīng)關(guān)系(由于沒輸入,所以是空值)~
- name=value
- 層級(jí)路徑就是action
- 方法就是method
構(gòu)造POST:
不在query string,而是在body:這里aaa和abc對(duì)應(yīng)空值,就是因?yàn)檩斎肟蛭覜]輸入數(shù)據(jù)~
而且它有個(gè)Content-Type:application/x-www-form-urlencoded
form只支持get和post方法,其他的put 、delet 、options都無能為力~
使用form的話,版本號(hào)固定是HTTP/1.1
2.4 ajax【重要】
- 現(xiàn)在最主流的前后端交互方式之一
Ajax即Asynchronous Javascript And XML(異步JavaScript和XML)
- 在 2005年被Jesse James Garrett提出的新術(shù)語,用來描述一種使用現(xiàn)有技術(shù)集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。使用Ajax技術(shù)網(wǎng)頁應(yīng)用能夠快速地將增量更新呈現(xiàn)在用戶界面上,而不需要重載(刷新)整個(gè)頁面,這使得程序能夠更快地回應(yīng)用戶的操作。
XML
- Servlet編程maven的pom.xml為例
- 是一種標(biāo)簽形式的自定義數(shù)據(jù)格式
![]()
html來說,支持哪些標(biāo)簽,是啥含義,是標(biāo)準(zhǔn)委員會(huì)規(guī)定的
而xml的標(biāo)簽都是自定義的~
Asynchronous,異步
- synchronize,同步
同步異步的含義:
- 同步與互斥(加鎖的場(chǎng)景)
- 同步與異步(IO的場(chǎng)景)
- 同步:請(qǐng)求的發(fā)起者主動(dòng)獲取這個(gè)響應(yīng)(從服務(wù)器拿來)
- 這里的同步是指主動(dòng)拿來之后就可以直接用這份響應(yīng),與原計(jì)劃同步
- 異步請(qǐng)求的發(fā)氣質(zhì)被動(dòng)獲取這個(gè)響應(yīng)(服務(wù)器推送過來)
- 這里的異步是指被動(dòng)獲取之后,不一定立即用到這份響應(yīng),排在計(jì)劃后面,與原計(jì)劃異步
js提供了原生的ajax的api,這個(gè)api賊難用(不講)
- 用jQuery的ajax和api就好啦
即調(diào)用ajax函數(shù),傳參是一個(gè)大括號(hào)包住的一個(gè)東西,就是JS中的“對(duì)象”
- 而里面的success就是之前說將的“函數(shù)指針”,這也就是一個(gè)回調(diào)函數(shù),就是在ajax代碼體中合適的時(shí)間調(diào)用這個(gè)函數(shù)!
- 即ajax代碼中的某一段邏輯是未定義的,是由這個(gè)函數(shù)來定義的~
- 這類似于C語言的函數(shù)指針,類似于Java傳參中的”對(duì)象”(比如lambda表達(dá)式,run方法,迭代器,比較器…)
這也是異步的原因,因?yàn)檫@個(gè)是我們“丟個(gè)函數(shù)”進(jìn)去,讓瀏覽器調(diào)用這個(gè)ajax,發(fā)送一個(gè)請(qǐng)求,之后瀏覽器獲取到正確響應(yīng)后自動(dòng)執(zhí)行這個(gè)success函數(shù),執(zhí)行處理響應(yīng)的一些邏輯(body就是響應(yīng)的正文),將響應(yīng)“喂”給我們的代碼,這個(gè)過程我們是被動(dòng)的~
/*測(cè)試代碼*/
<script>
// $ 即jQuery的別名
$.ajax(
{
url: "https://www.baidu.com",
type: "GET",
data: "this is body",
contentType: "text/plain",
success: function(body) {
//寫處理響應(yīng)的代碼
console.log(body);
}
}
);
</script>
打開html按f12:
- 這個(gè)錯(cuò)誤的原因是請(qǐng)求發(fā)都沒有發(fā):
抓包:
這個(gè)是屬于ajax的一個(gè)非常典型的問題: “跨域問題”
- 現(xiàn)在運(yùn)行的ajax的代碼的頁面域名與ajax里面的請(qǐng)求訪問的域名不一致的話,(不是要求路徑一模一樣,而是域名一樣,不如百度頁面發(fā)出的請(qǐng)求得是百度內(nèi)部的,反正都是baidu.com),哪怕服務(wù)器給你響應(yīng)了數(shù)據(jù),瀏覽器還是不能處理這個(gè)數(shù)據(jù),而是直接報(bào)錯(cuò)~
- 這個(gè)不是bug,而是瀏覽器考慮到安全問題做出的限制
- 一般頁面的跳轉(zhuǎn)也不需要用到ajax,用其他的就行了(form則沒有這個(gè)限制)
- 在以后,在自己的頁面發(fā)請(qǐng)求給自己的服務(wù)器,自然不會(huì)出現(xiàn)這個(gè) “跨域問題”~
構(gòu)造HTTP請(qǐng)求,不僅僅是js可以構(gòu)造,java也可以構(gòu)造,C++也能,任何一個(gè)可以操作網(wǎng)絡(luò)的語言,都可以構(gòu)造http請(qǐng)求,所以爬蟲不僅僅只有python能做到
2.5 Postman
前面的方法都是通過寫代碼去實(shí)現(xiàn)的,有沒有一種方法,不寫代碼也能發(fā)送請(qǐng)求呢?
- 有,使用一個(gè)軟件—Postman
下載傳送門:Download Postman | Get Started for Free
- 然后注冊(cè)賬號(hào)登錄一下~(云存檔)
他甚至有對(duì)象 — Postwoman
- 有興趣的可以去了解一下
操作流程:
- 你會(huì)發(fā)現(xiàn)創(chuàng)建不了public,但是可以創(chuàng)建其他,這是因?yàn)閜ublic不允許中文~
- 改為英文/數(shù)字/其他字符既可以
- 這里我把名字改為mara-ring
創(chuàng)建標(biāo)簽頁:
在這里構(gòu)造http請(qǐng)求:
點(diǎn)擊save改名:
選擇請(qǐng)求的“方法”:
創(chuàng)造query string:
創(chuàng)造header:
構(gòu)造body:
- 也可以模擬form表單請(qǐng)求的body
- none—無body
由于不是瀏覽器,所以沒有cookie設(shè)置也很正常
- 但是響應(yīng)是有cookie的~
獲取響應(yīng):
fiddler抓包:
可見請(qǐng)求沒有cookie,響應(yīng)首行沒有方法和url,只有版本號(hào)和狀態(tài)碼和狀態(tài)碼描述
補(bǔ)充:HTTP響應(yīng)的首行比請(qǐng)求的首行多了一個(gè)部分:就是空格分割的狀態(tài)碼和狀態(tài)碼描述
因?yàn)檫@個(gè)軟件不是瀏覽器~
如果你對(duì)http報(bào)文格式特別熟悉,那么Postman的使用就不是問題~
Postman還有一個(gè)特別牛的功能:自動(dòng)生成代碼
HTTP請(qǐng)求報(bào)文:
構(gòu)造ajax:
后面不是Native的,前提是要安裝對(duì)應(yīng)的庫!
文章到此結(jié)束!謝謝觀看
可以叫我 小馬,我可能寫的不好或者有錯(cuò)誤,但是一起加油鴨??!文章來源:http://www.zghlxwxcb.cn/news/detail-465928.htmlHTTP的知識(shí)就講到這里了,下一個(gè)章節(jié):HTTPS~文章來源地址http://www.zghlxwxcb.cn/news/detail-465928.html
到了這里,關(guān)于JavaEE & HTTP狀態(tài)碼 & HTTP數(shù)據(jù)報(bào)的構(gòu)造的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!