前言
各位讀者好, 我是小陳, 這是我的個(gè)人主頁(yè), 希望我的專欄能夠幫助到你:
?? JavaSE基礎(chǔ): 基礎(chǔ)語(yǔ)法, 類和對(duì)象, 封裝繼承多態(tài), 接口, 綜合小練習(xí)圖書(shū)管理系統(tǒng)等
?? Java數(shù)據(jù)結(jié)構(gòu): 順序表, 鏈表, 堆, 二叉樹(shù), 二叉搜索樹(shù), 哈希表等
?? JavaEE初階: 多線程, 網(wǎng)絡(luò)編程, TCP/IP協(xié)議, HTTP協(xié)議, Tomcat, Servlet, Linux, JVM等(正在持續(xù)更新)
上篇文章介紹了HTTP協(xié)議的報(bào)文格式, 分析了請(qǐng)求報(bào)文和響應(yīng)報(bào)中需要掌握的屬性或字段, 本篇主要介紹如何構(gòu)造一個(gè)HTTP請(qǐng)求
提示:是正在努力進(jìn)步的小菜鳥(niǎo)一只,如有大佬發(fā)現(xiàn)文章欠佳之處歡迎批評(píng)指點(diǎn)~ 廢話不多說(shuō),直接上干貨!
一、地址欄輸入
在地址欄輸入一個(gè) URL, 訪問(wèn)頁(yè)面就會(huì)發(fā)送 GET 請(qǐng)求
比如在地址欄輸入百度的域名 :
抓到的包顯示, 發(fā)送了一個(gè) GET 請(qǐng)求, 響應(yīng)就是百度的 HTML 頁(yè)面
二、HTML 特殊標(biāo)簽
HTML 中的 link
, img
, script
, a
標(biāo)簽都會(huì)觸發(fā) GET 請(qǐng)求(前提是訪問(wèn)網(wǎng)絡(luò)資源而不是本地資源)
在瀏覽器打開(kāi) HTML 文件后, 加載完所有的標(biāo)簽, 會(huì)根據(jù)以上這些標(biāo)簽給服務(wù)器發(fā)送 GET 請(qǐng)求以獲取網(wǎng)絡(luò)資源
三、form 表單
form (表單) 是 HTML 中的一個(gè)常用標(biāo)簽. 可以用于給服務(wù)器發(fā)送 GET 或者 POST 請(qǐng)求
form 表單只能發(fā)送 GET 或 POST 方法的請(qǐng)求, 其他的方法不可以
- 編寫(xiě)一個(gè)簡(jiǎn)單的 form 表單來(lái)構(gòu)造 GET 請(qǐng)求 :
<!-- action里是要訪問(wèn)的url, method指定請(qǐng)求的方法 -->
<form action="https://www.baidu.com/abc" method="get">
<input type="text" name = "a">
<input type="text" name = "b">
<input type="submit" value="提交">
</form>
- 運(yùn)行這段代碼 :
- 分別填寫(xiě)
111
和999
, 點(diǎn)擊提交, 會(huì)發(fā)現(xiàn) 404 了, 因?yàn)槲覀兊?URL 是隨便寫(xiě)的, 根本不存在, 但不影響我們發(fā)送請(qǐng)求
- 通過(guò)抓包工具可以看到我們發(fā)送成功了 GET 請(qǐng)求
- 觀察 form 代碼和這個(gè) GET 請(qǐng)求之間的關(guān)系 :
- 剛剛的 form 代碼中把 method=“get” 改成 method=“post”, 來(lái)構(gòu)造一個(gè) POST 請(qǐng)求
<!-- action里是要訪問(wèn)的url, method指定請(qǐng)求的方法 -->
<form action="https://www.baidu.com/abc" method="post">
<input type="text" name = "a">
<input type="text" name = "b">
<input type="submit" value="提交">
</form>
-
展示效果不變, 還是依次輸入
111
和999
點(diǎn)擊提交 : -
依然404, 因?yàn)?URL 是瞎寫(xiě)的, 但不影響抓包, 可以看到構(gòu)造成功了一個(gè) POST 請(qǐng)求
- 觀察 form 代碼和 POST 請(qǐng)求的關(guān)系 :
綜上:
1, form 表單構(gòu)造請(qǐng)求, 根據(jù)代碼中 name 的值會(huì)形成健, 用戶輸入的會(huì)形成值, 這二者結(jié)合成鍵值對(duì)
2, 如果是 GET 請(qǐng)求, form 構(gòu)造的數(shù)據(jù)以 query string 的形式被攜帶在 URL 中, 如果是 POST 請(qǐng)求, 數(shù)據(jù)在請(qǐng)求報(bào)文的 Body 中
版本號(hào)默認(rèn)為HTTP/1.1
四、ajax
目前 ajax 是最主流的前后端交互方式之一
ajax 全稱 Asynchronous Javascript And XML, 是 2005 年提出的一種 JavaScript 給服務(wù)器發(fā)送HTTP 請(qǐng)求的方式
Asynchronous, 意思是異步, 反義詞是同步
在多線程場(chǎng)景下, 同步是指多個(gè)線程可以同時(shí)訪問(wèn)同一個(gè)資源, 加了(互斥)鎖之后就必須阻塞等待
在當(dāng)前 IO 場(chǎng)景下, 同步是指請(qǐng)求的發(fā)起者, 自行獲取響應(yīng), 異步是指, 請(qǐng)求的發(fā)起者不關(guān)心相應(yīng)的結(jié)果, 由響應(yīng)者把響應(yīng)結(jié)果推送請(qǐng)求者
ajax 就是前后端異步交互的方式, 由于JavaScript 提供的原生 API 比較難用, 我們使用 jQuery 提供的 ajax API 來(lái)構(gòu)造請(qǐng)求 :
可惜的是, 這個(gè)代碼會(huì)報(bào)錯(cuò)
因?yàn)?ajax 的保護(hù)機(jī)制, 不允許跨域訪問(wèn), 此處運(yùn)行 ajax 的服務(wù)器和要訪問(wèn)的服務(wù)器域名不一致, 關(guān)于跨域問(wèn)題暫時(shí)不多做討論, 將來(lái)自己做網(wǎng)站, 自己的頁(yè)面訪問(wèn)自己的服務(wù)器, 自然就沒(méi)有跨域問(wèn)題了
另外, 不只是 JS 可以, Java, C++, Pyhon等能夠操作網(wǎng)絡(luò)的語(yǔ)言, 都可以構(gòu)造 HTTP 請(qǐng)求
總結(jié)
以上就是本篇的全部?jī)?nèi)容, 主要介紹了如何 構(gòu)造HTTP 協(xié)議的請(qǐng)求
如果本篇對(duì)你有幫助,請(qǐng)點(diǎn)贊收藏支持一下,小手一抖就是對(duì)作者莫大的鼓勵(lì)啦??????~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-520294.html
上山總比下山辛苦
下篇文章見(jiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-520294.html
到了這里,關(guān)于【HTTP 協(xié)議2】如何構(gòu)造 HTTP 請(qǐng)求的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!