歡迎大家關注筆者的微信公眾號:JAVAandPython君
關注后發(fā)送“領取資料”即可領取5T技術資源
web服務器和URL
我們首先來講講web服務器,Web服務器是指能夠為發(fā)出請求的瀏覽器提供文檔的程序替久。服務器是一種被動的程序凉泄,只有當我們從瀏覽器發(fā)出請求時才會響應。我們所說的寫網(wǎng)站蚯根,到最后我們是需要把我們所寫的代碼部署到web服務器上后众,這樣就可以讓全世界的人都能夠去訪問你的網(wǎng)站,你那里面放置的所有的數(shù)據(jù)、資源蒂誉,大家都可以下載教藻。目前最主流的三個Web服務器是Apache,Nginx拗盒,IIS怖竭。
? ? ? 然后一個就是我們的URL,例如:“http://www.baidu.com” 這就是一個url陡蝇,它包含些什么呢痊臭?
協(xié)議:包括http,https等
域名或者ip地址:www.baidu.com這個就是域名登夫,116.211.94.1這個就是ip地址广匙。
端口號:這里可能沒有體現(xiàn)出來,80是我們常用的端口號恼策,程序必須使用端口號才能夠讓另一臺計算機訪問鸦致。
2
什么是HTTP?為什么要學它涣楷?
?HTTP協(xié)議(HyperText Transfer Protocol分唾,超文本傳輸協(xié)議)是因特網(wǎng)上應用最為廣泛的一種網(wǎng)絡傳輸協(xié)議,所有的WWW文件都必須遵守這個標準狮斗。
? ? ?HTTP是一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)绽乔。
? ? 其實就是我們服務器和客戶端瀏覽器傳輸數(shù)據(jù)時的一種協(xié)議,你可以把它理解為計算機世界里面的一種規(guī)則碳褒,我們必須去遵守它折砸。
? ? 我們?yōu)槭裁匆W習它呢?這就有點廢話了沙峻,我們遵守規(guī)則的前提是我們得了解這個規(guī)則睦授,并且HTTP是Javaweb開發(fā)的基礎,每一個請求和響應都是web開發(fā)最基本的操作摔寨,當我們學習web開發(fā)的時候去枷,不去學http協(xié)議,我們會“打拳不練功是复,到老一場空”沉填,當我們在web開發(fā)懵B的時候還不如好好的去學習http協(xié)議,不然花費在懵逼路上的時間比學http協(xié)議多得多佑笋。
3
HTTP的原理、作用斑鼻、特點
原理:
HTTP協(xié)議工作于客戶端-服務端架構(gòu)上蒋纬。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發(fā)送所有請求。
Web服務器根據(jù)接收到的請求后,向客戶端發(fā)送響應信息蜀备。
HTTP默認端口號為80关摇,但是你也可以改為8080或者其他端口。
作用:
? ? ? ?它能夠使瀏覽器和客戶端瀏覽器之間更加高效的傳輸數(shù)據(jù)碾阁,它不僅保證計算機正確快速的傳輸超文本文檔输虱,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先展示(如文本先于圖像)等脂凶。
特點:
? ? ? ?基于請求-響應模型宪睹,先有請求后有響應,如圖:
4
HTTP的請求
? ? HTTP請求協(xié)議包括:請求行蚕钦,請求頭亭病,請求體
????HTTP響應協(xié)議包括:響應行,響應頭嘶居,響應體
那么什么是HTTP請求呢罪帖?
? ? ? ?當客戶端連接上服務器后,向服務器請求某個web資源時邮屁,稱之為客戶端向服務器發(fā)送了一個http請求整袁。
? ? ? ?請求包括一個請求行、若干個請求頭佑吝、以及請求體內(nèi)容坐昙,請求頭和請求體內(nèi)容之間要用空行隔開。
格式如下圖(圖來自網(wǎng)絡迹蛤,侵權必刪):
例如下面就是一個get請求:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3libcurl/7.16.3OpenSSL/0.9.7lzlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
5
HTTP請求方式有哪幾種民珍?
在開發(fā)中常見的請求方式有POST,GET,DELETE,PUT,我們主要講一講GET和POST。
? ?1.GET請求:向服務器特定的資源發(fā)出查詢請求盗飒,一般是用于查詢數(shù)據(jù)或者資源的請求中嚷量。
GET請求有幾個特點:
get請求查詢的參數(shù)是可以在瀏覽器的地址欄中查看到的
請求的數(shù)據(jù)會附帶在url之后,以逆趣?分割URL和傳輸數(shù)據(jù)蝶溶,多個參數(shù)之間用&連接
例如:GET /get.html?name=jap&password=123 HTTP/1.1
2.POST請求:向指定資源提交數(shù)據(jù)進行處理請求(例如注冊登錄或者上傳文件)。數(shù)據(jù)被包含在請求體中宣渗。POST請求可能會導致新的資源的建立和/或已有資源的修改抖所。
? ?POST的特點:
? ?post請求的數(shù)據(jù)會放置在HTTP請求體中
? ?例如:POST /post.html HTTP/1.1
? ? ? ? ? ? 數(shù)據(jù) name=jap&password=123放在請求中了
?3.兩者的區(qū)別:在HTTP規(guī)范中,沒有對URL的長度和傳輸?shù)臄?shù)據(jù)大小進行大小的限制痕囱,但是在實際的開發(fā)中田轧,對于GET請求,特定的瀏覽器和服務器對URL的長度有限制鞍恢。因此在使用GET請求時傻粘,會受到長度的限制
6
什么是請求頭每窖,請求體?
請求頭用于描述客戶端請求哪臺主機弦悉,以及客戶端的一些基本環(huán)境信息等窒典,請求頭是以鍵值對的方式來傳遞數(shù)據(jù)
如下面:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*;q=0.8?
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:max-age=0
Connection:keep-alive
Cookie:BIDUPSID=9D9C53E416CD7FF75D06ECDD54E96CBB; PSTM=1543042511; BD_UPN=12314753; __cfduid=d7051da25724d1e9caf4c4f142767136e1547043423; MCITY=-43%3A; ispeed_lsm=0;?
Host:www.baidu.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
請求體代表著瀏覽器在post請求方式中傳遞給服務器的參數(shù),請求體中的每一個數(shù)據(jù)都是采用鍵值對的形式稽莉,多個參數(shù)用&連接瀑志,另外服務器在接收到請求體后會單獨對其解析。
7
HTTP的響應
一個HTTP響應代表服務器向客戶端回送的數(shù)據(jù)污秆,它包括一個響應行劈猪,若干個響應頭,以及響應體混狠,其中的一些響應頭和響應體都是可選的岸霹,響應頭和響應體內(nèi)容之間需要用空行隔開。
響應頭用于描述服務器的基本信息将饺,以及數(shù)據(jù)的描述贡避,通過這些數(shù)據(jù)的描述,可以通知客戶端怎么處理它待會回送的數(shù)據(jù)
例如下面就是一個響應頭:
HTTP/1.1?200?OK
Date: Mon, 27 Jul 2019 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
響應行中包含了HTTP協(xié)議的版本予弧,以及用于描述服務器對請求的處理結(jié)果
例如? ? HTTP/1.1? 200? OK
? ? ? ? ? ?協(xié)議/版本? 狀態(tài)碼? ?狀態(tài)碼描述
?這里來補充一下狀態(tài)碼:它是服務器和瀏覽器之間確定狀態(tài)的固定數(shù)字(200:請求成功刮吧,302:請求重定向,404:請求資源不存在掖蛤,500:服務器內(nèi)部發(fā)生錯誤)
響應體代表著服務器向客戶端瀏覽器回送的正文
例如:
<!DOCTYPE html>
<!--STATUS OK-->
HTTP_百度搜索
省略...