Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
??此賬號為華為云開發(fā)者社區(qū)官方運營賬號,提供全面深入的云計算前景分析、豐富的技術(shù)干貨、程序樣例,分享華為云前沿資訊動態(tài)
本文分享自華為云社區(qū)《學(xué)習(xí)VueRouter,HTML5 History 模式,因為history模式刷新頁面會出現(xiàn)404》,作者: DevFeng 。
vue-router 默認 hash 模式 —— 使用 URL 的 hash 來模擬一個完整的 URL,于是當(dāng) URL 改變時,頁面不會重新加載。
如果不想要很丑的 hash,我們可以用路由的 history 模式,這種模式充分利用 history.pushState API 來完成 URL 跳轉(zhuǎn)而無須重新加載頁面。
const router = new VueRouter({
mode: 'history',
routes: [...]
})
當(dāng)你使用 history 模式時,URL 就像正常的 url,例如 http://yoursite.com/user/id,也好看!
不過這種模式要玩好,還需要后臺配置支持。因為我們的應(yīng)用是個單頁客戶端應(yīng)用,如果后臺沒有正確的配置,當(dāng)用戶在瀏覽器直接訪問 http://oursite.com/user/id 就會返回 404,這就不好看了。
所以呢,你要在服務(wù)端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個 index.html 頁面,這個頁面就是你 app 依賴的頁面。
注意:下列示例假設(shè)你在根目錄服務(wù)這個應(yīng)用。如果想部署到一個子目錄,你需要使用 VueCLI 的
publicPath 選項 (opens new window)和相關(guān)的 router base property (opens new window)。你還需要把下列示例中的根目錄調(diào)整成為子目錄 (例如用 RewriteBase /name-of-your-subfolder/ 替換掉 RewriteBase/)。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
除了 mod_rewrite,你也可以使用 FallbackResource (opens new window)。
location / {
try_files $uri $uri/ /index.html;
}
const http = require('http')
const fs = require('fs')
const httpPort = 80
http.createServer((req, res) => {
fs.readFile('index.html', 'utf-8', (err, content) => {
if (err) {
console.log('We cannot open "index.html" file.')
}
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8'
})
res.end(content)
})
}).listen(httpPort, () => {
console.log('Server listening on: http://localhost:%s', httpPort)
})
對于Node.js/Express,請考慮使用 connect-history-api-fallback 中間件 (opens new window)。
1. 安裝 IIS UrlRewrite(opens new window)
2. 在你的網(wǎng)站根目錄中創(chuàng)建一個 web.config 文件,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Handle History Mode and custom 404/500" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
rewrite {
regexp .*
to {path} /
}
在你的 firebase.json 中加入:
{
"hosting": {
"public": "dist",
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
給個警告,因為這么做以后,你的服務(wù)器就不再返回 404 錯誤頁面,因為對于所有路徑都會返回
index.html 文件。為了避免這種情況,你應(yīng)該在 Vue 應(yīng)用里面覆蓋所有的路由情況,然后再給出一個 404 頁面。
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '*', component: NotFoundComponent }
]
})
或者,如果你使用 Node.js 服務(wù)器,你可以用服務(wù)端路由匹配到來的 URL,并在沒有匹配到路由的時候返回 404,以實現(xiàn)回退。
點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~華為云博客_大數(shù)據(jù)博客_AI博客_云計算博客_開發(fā)者中心-華為云
、良生- input type=file與文件上傳
本文所說的input type=file指的是type類型是file的input元素,最簡HTML代碼如下:
<input type=file>
但是,為了習(xí)慣,我們多寫成:
<input type="file">
在HTML5出現(xiàn)之前(XHTML),我們的閉合規(guī)則則有些出入:
<input type="file" />
顧名思義,選擇文件,并上傳文件。
在萬惡的舊時代,HTML5還沒有出現(xiàn)之前,原生的file input表單元素只能讓我們一次上傳一張圖片。無法滿足一次上傳多圖的交互需求,所以,很多場景,就被swfupload.js給取代了,有點逐漸淡出人們視野的感覺。
然,技術(shù)發(fā)展,日新月異,三十年河?xùn)|,三十年河西。隨著原生HTML5表單對多圖(multiple屬性)、上傳前預(yù)覽,二進制上傳等支持越來越廣泛,原生的file input表單元素又迎來了新的升級,flash為背景的swfupload.js注定要落寞。
但是,對于PC項目,IE8-IE9瀏覽器還是不能忽略的。所以,現(xiàn)在,很流行的一種處理方式,就是HTML5 file上傳和flash swfupload上傳一起整合的模式,優(yōu)先使用原生HTML5上傳,不支持的,使用flash上傳。我之前有篇關(guān)于HTML5上傳的文章,每天訪問量很高的:“基于HTML5的可預(yù)覽多圖片Ajax上傳”,大家有興趣可以看看。
如果想使用瀏覽器原生特性實現(xiàn)文件上傳(如圖片)效果,父級的form元素有個東西不能丟,就是:
enctype="multipart/form-data"
enctype屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如何對表單數(shù)據(jù)進行編碼,默認的編碼是:”application/x-www-form-urlencoded“。對于普通數(shù)據(jù)是挺適用的,但是,對于文件,科科,就不能亂編碼了,該什么就是什么,只能使用multipart/form-data作為enctype屬性值。
無論是舊時代的單圖上傳,還是HTML5中的多圖上傳,均是如此。
文件,尤其圖片,上場前能夠預(yù)覽,是很棒的交互體驗。不走服務(wù)器,不耗費流量,多棒!
理想雖好,實現(xiàn)起來……
在HTML5還沒出現(xiàn)的舊時代,只有低版本的IE瀏覽器貌似有方法,使用私有的濾鏡,超越安全的限制(其實是利用了不好的東西),實現(xiàn)圖片直接預(yù)覽;但是呢,那個時候,Chrome, FireFox沒有這一出,于是,想要使用原生file input實現(xiàn)圖片的上傳前預(yù)覽,兼容性坎很難跨過去。
但是,后來,HTML5來了,我們出現(xiàn)了轉(zhuǎn)機,IE10+以及其他現(xiàn)代瀏覽器,可以讓我們直接讀取圖片的數(shù)據(jù),然后在頁面上呈現(xiàn),實現(xiàn)了上傳前預(yù)覽;加上之前老IE的濾鏡策略,貌似,可行。但是呢但是,老的IE瀏覽器只能最多一次選擇一個文件,因此,只有單圖上傳的時候,大家可以考慮考慮。
傳統(tǒng)的form提交,是要改變頁面流的,也就是刷新后跳轉(zhuǎn)。好的體驗應(yīng)該是走Ajax交互的。HTML5里面支持二進制formData數(shù)據(jù)提交,因此,可以從容Ajax提交上傳的文件數(shù)據(jù);那老舊的IE瀏覽器怎么辦?
一般方法如下:
<form action="" method="post" enctype="multipart/form-data" target="uploadIframe">< <iframe id="uploadIframe"></iframe>
var doc = iframe.contentDocument ? iframe.contentDocument : frames[iframe.id].document; var response = doc.body && doc.body.innerHTML;
OK, 當(dāng)然,你也可以不用像上面這么麻煩,直接使用jquery.form.js. 原理呢,就是上面這樣,但是,不需要這么麻煩。
原生的file input不收待見的另外一個原因是:長的丑還不好控制。
舉個例子,下圖這個“選擇文件”這幾個文字,我們就不好對file控件動刀子實現(xiàn)自定義:
file input框
怎么辦呢?
有一種方法是這樣的: 讓file類型的元素透明度0,覆蓋在我們好看的按鈕上。然后我們?nèi)c擊好看的按鈕,實際上點擊是是file元素。
然而,此方法有一些不足:
更好的方法是,使用label元素與file控件關(guān)聯(lián),好處在于:
<label class="ui_button ui_button_primary" for="xFile">上傳文件</label> <form><input type="file" id="xFile" style="position:absolute;clip:rect(0 0 0 0);"></form>
效果如下(真實實時效果):
input file類型控件有一個屬性,名為
accept
, 可能有些小伙伴不太了解??梢杂脕碇付g覽器接受的文件類型,也就是的那個我們打開系統(tǒng)的選擇文件彈框的時候,默認界面中呈現(xiàn)的文件類型。例如:
accept="image/jpeg"
,則界面中只有jpg圖片,如下截圖,同時,窗體右下方是“自定義文件”按鈕:
自定義文件
實際開發(fā)的時候,很少只允許傳jpg圖片,應(yīng)該都是只能傳圖片類型,此時,可以使用:
accept="image/*"
于是乎,“自定義文件”按鈕變成了語義更明確的“圖片文件”:
圖片文件
accept屬性值其實是MIME類型, 例如下面幾個可能常用的:
accept="application/pdf" accept="audio/x-mpeg" accept="text/html" .accept="video/x-mpeg2"
然后,多個屬性值使用逗號分隔,例如:
<input accept="audio/*,video/*,image/*">
現(xiàn)代瀏覽器直接value = "", 有些IE瀏覽器貌似不行,好像使用file.outerHTML = file.outerHTML,我自己沒測試。
不過我覺得比較麻煩,還要判斷瀏覽器什么的。像本文的Ajax單圖上傳,直接form.reset()就可以了。
以上~
本文為原創(chuàng)文章,會經(jīng)常更新知識點以及修正一些錯誤,因此轉(zhuǎn)載請保留原出處,方便溯源,避免陳舊錯誤知識的誤導(dǎo),同時有更好的閱讀體驗。
下面試題不分先后順序
八股文不想寫了自己百度吧...
Hash模式
1、定義
hash 模式是一種把前端路由的路徑用井號 # 拼接在真實 url 后面的模式。當(dāng)井號 # 后面的路徑發(fā)生變化時,瀏覽器并不會重新發(fā)起請求,而是會觸發(fā) onhashchange 事件。
2、網(wǎng)頁url組成部分
(1)了解幾個url的屬性
屬性 | 含義 |
location.protocal | 協(xié)議 |
location.hostname | 主機名 |
location.host | 主機 |
location.port | 端口號 |
location.patchname | 訪問頁面 |
location.search | 搜索內(nèi)容 |
location.hash | 哈希值 |
(2)演示
下面用一個網(wǎng)址來演示以上屬性:
History模式
hash的特點
1、定義
history API 是 H5 提供的新特性,允許開發(fā)者直接更改前端路由,即更新瀏覽器 URL 地址而不重新發(fā)起請求。
2、與hash的區(qū)別
我們用一個例子來演示, hash 與 history 在瀏覽器下刷新時的區(qū)別。具體如下:
正常頁面瀏覽
改造H5 history模式
3、history的API
下面闡述幾種 HTML5 新增的 history API 。具體如下表:
API | 定義 |
history.pushState(data, title [, url]) | pushState主要用于往歷史記錄堆棧頂部添加一條記錄。各參數(shù)解析如下:①data會在onpopstate事件觸發(fā)時作為參數(shù)傳遞過去;②title為頁面標(biāo)題,當(dāng)前所有瀏覽器都會忽略此參數(shù);③url為頁面地址,可選,缺少時表示為當(dāng)前頁地址 |
history.replaceState(data, title [, url]) | 更改當(dāng)前的歷史記錄,參數(shù)同上; 上面的pushState是添加,這個更改 |
history.state | 用于存儲以上方法的data數(shù)據(jù),不同瀏覽器的讀寫權(quán)限不一樣 |
window.onpopstate | 響應(yīng)pushState或者replaceState的調(diào)用 |
4、history的特點
對于 history 來說,主要有以下特點:
5、存在問題
對于 history 來說,確實解決了不少 hash 存在的問題,但是也帶來了新的問題。
具體如下:
6、兩者選擇
下面我們再來介紹下在實際的項目中,如何對這兩者進行選擇。具體如下:
淺拷貝與深拷貝
借助ConardLi大佬以下兩張圖片,幫我們更好的理解兩者的含義:
總而言之,淺拷貝只復(fù)制指向某個對象的指針,而不復(fù)制對象本身,新舊對象還是共享同一塊內(nèi)存。但深拷貝會另外創(chuàng)造一個一模一樣的對象,新對象跟原對象不共享內(nèi)存,修改新對象不會改到原對象。
var person = new Person()
console.log(person.constructor === Person) // true
當(dāng)獲取person.constructor時,其實person中并沒有constructor屬性,當(dāng)不能讀取到constructor屬性時,會從person的原型,也就是Person.prototype中讀取時,正好原型中有該屬性,所以 person.constructor === Person.prototype.constructor
其次是__proto__,絕大部分瀏覽器都支持這個非標(biāo)準的方法訪問原型,然而它并不存在于Person.prototype中。
實際上,它是來自與Object.prototype,與其說是一個屬性,不如說是一個getter/setter,當(dāng)使用obj.__proto__時,可以理解成返回了Object.getPrototypeOf(obj) 。
總結(jié):
如果沒有參數(shù),就直接寫一個空括號即可
如果只有一個參數(shù),可以省去參數(shù)括號
如果有多個參數(shù),用逗號分割
如果函數(shù)體的返回值只有一句,可以省略大括號
如果函數(shù)體不需要返回值,且只有一句話,可以給這個語句前面加一個void關(guān)鍵字。
最常用的就是調(diào)用一個函數(shù):
let fn = () => void doesNotReturn()
箭頭函數(shù)不會創(chuàng)建自己的this,所以它沒有自己的this,它只會在自己作用域的上一層繼承this。所以箭頭函數(shù)中的this的指向在它在定義時一家確定了,之后不會改變。
戳右邊鏈接:https://segmentfault.com/a/1190000016278115
當(dāng)一個內(nèi)部函數(shù)被調(diào)用,就會形成閉包,閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
閉包作用:
局部變量無法共享和長久的保存,而全局變量可能造成變量污染,所以我們希望有一種機制既可以長久的保存變量又不會造成全局污染。
Promise 是異步編程的一種解決方案:從語法上講,promise是一個對象,從它可以獲取異步操作的消息;從本意上講,它是承諾,承諾它過一段時間會給你一個結(jié)果。promise有三種狀態(tài): pending(等待態(tài)),fulfiled(成功態(tài)),rejected(失敗態(tài)) ;狀態(tài)一旦改變,就不會再變。創(chuàng)造promise實例后,它會立即執(zhí)行。
foreach()方法會針對每一個元素執(zhí)行提供得函數(shù),該方法沒有返回值,是否會改變原數(shù)組取決與數(shù)組元素的類型是基本類型還是引用類型
map()方法不會改變原數(shù)組的值,返回一個新數(shù)組,新數(shù)組中的值為原數(shù)組調(diào)用函數(shù)處理之后的值
localStorage:以鍵值對的方式存儲 儲存時間沒有限制 永久生效 除非自己刪除記錄
sessionStorage:當(dāng)頁面關(guān)閉后被清理與其他相比不能同源窗口共享 是會話級別的存儲方式
cookies數(shù)據(jù)不能超過4k 同時因為每次http請求都會攜帶cookie 所有cookie只適合保存很小的數(shù)據(jù) 如會話標(biāo)識
有五種,分別是 State、 Getter、Mutation 、Action、 Module
Loader:直譯為"加載器"。Webpack將一切文件視為模塊,但是webpack原生是只能解析js文件,如果想將其他文件也打包的話,就會用到`loader`。 所以Loader的作用是讓webpack擁有了加載和解析非JavaScript文件的能力。
Plugin:直譯為"插件"。Plugin可以擴展webpack的功能,讓webpack具有更多的靈活性。 在 Webpack 運行的生命周期中會廣播出許多事件,Plugin 可以監(jiān)聽這些事件,在合適的時機通過 Webpack 提供的 API 改變輸出結(jié)果。
太多了,自己整理吧-.-
區(qū)別:
computed 計算屬性:依賴其它屬性值,并且computed的值有緩存,只有它依賴的屬性值發(fā)生改變,下一次獲取computed的值時才會重新計算computed的值。
watch 偵聽器:更多的是觀察的作用,無緩存性,類似與某些數(shù)據(jù)的監(jiān)聽回調(diào),每當(dāng)監(jiān)聽的數(shù)據(jù)變化時都會執(zhí)行回調(diào)進行后續(xù)操作
運用場景:
當(dāng)需要進行數(shù)值計算,并且依賴與其它數(shù)據(jù)時,應(yīng)該使用computed,因為可以利用computed的緩存屬性,避免每次獲取值時都要重新計算。
當(dāng)需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,應(yīng)該使用watch,使用watch選項允許執(zhí)行異步操作(訪問一個API),限制執(zhí)行該操作的頻率,并在得到最終結(jié)果前,設(shè)置中間狀態(tài)。這些都是計算屬性無法做到的。
Vue 實例有?個完整的?命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模版、掛載Dom -> 渲染、更新 -> 渲染、卸載等?系列過程,稱這是Vue的?命周期。
//利用絕對定位,先將元素的左上角通過 top:50%和 left:50%定位到頁面的中心,然后再通過 translate 來調(diào)整元素的中心點到頁面的中心。該方法需要考慮瀏覽器兼容問題。
//利用絕對定位,設(shè)置四個方向的值都為 0,并將 margin 設(shè)置為 auto,由于寬高固定,因此對應(yīng)方向?qū)崿F(xiàn)平分,可以實現(xiàn)水平和垂直方向上的居中。該方法適用于盒子有寬高的情況:
//利用絕對定位,先將元素的左上角通過 top:50%和 left:50%定位到頁面的中心,然后再通過 margin 負值來調(diào)整元素的中心點到頁面的中心。該方法適用于盒子寬高已知的情況
//使用 flex 布局,通過 align-items:center 和 justify-content:center 設(shè)置容器的垂直和水平方向上為居中對齊,然后它的子元素也可以實現(xiàn)垂直和水平的居中。該方法要**考慮兼容的問題**,該方法在移動端用的較多:
//另外,如果父元素設(shè)置了flex布局,只需要給子元素加上`margin:auto;`就可以實現(xiàn)垂直居中布局
戳右邊鏈接:https://blog.csdn.net/qq_29438877/article/details/103998284
JavaScript中的對象是引用類型的數(shù)據(jù),當(dāng)多個實例引用同一個對象時,只要一個實例對這個對象進行操作,其他實例中的數(shù)據(jù)也會發(fā)生變化。而在Vue中,我們更多的是想要復(fù)用組件,那就需要每個組件都有自己的數(shù)據(jù),這樣組件之間才不會相互干擾。所以組件的數(shù)據(jù)不能寫成對象的形式,而是要寫成函數(shù)的形式。數(shù)據(jù)以函數(shù)返回值的形式定義,這樣當(dāng)我們每次復(fù)用組件的時候,就會返回一個新的data,也就是說每個組件都有自己的私有數(shù)據(jù)空間,它們各自維護自己的數(shù)據(jù),不會干擾其他組件的正常運行。
1.如果obj里面有時間對象,則JSON.stringify后再JSON.parse的結(jié)果,時間將只是字符串的形式,而不是對象的形式
2.如果obj里有RegExp(正則表達式的縮寫)、Error對象,則序列化的結(jié)果將只得到空對象
3、如果obj里有函數(shù),undefined,則序列化的結(jié)果會把函數(shù)或 undefined丟失
4、如果obj里有NaN、Infinity和-Infinity,則序列化的結(jié)果會變成null
5、JSON.stringify()只能序列化對象的可枚舉的自有屬性,例如 如果obj中的對象是有構(gòu)造函數(shù)生成的, 則使用JSON.parse(JSON.stringify(obj))深拷貝后,會丟棄對象的constructor
6、如果對象中存在循環(huán)引用的情況也無法正確實現(xiàn)深拷貝
總結(jié):for...in循環(huán)主要是為了遍歷對象而生,不適用遍歷數(shù)組; for....of循環(huán)可以用來遍歷數(shù)組、類數(shù)組對象、字符串、Set、Map以及Generator對象
1. 語法上的區(qū)別:
函數(shù)式組件是一個純函數(shù),它是需要接受props參數(shù)并且返回一個React元素就可以了。類組件是需要繼承React.Component的,而且class組件需要創(chuàng)建render并且返回React元素,語法上來講更復(fù)雜。
2. 調(diào)用方式
函數(shù)式組件可以直接調(diào)用,返回一個新的React元素;類組件在調(diào)用時是需要創(chuàng)建一個實例的,然后通過調(diào)用實例里的render方法來返回一個React元素。
3. 狀態(tài)管理
函數(shù)式組件沒有狀態(tài)管理,類組件有狀態(tài)管理。
4. 使用場景
類組件沒有具體的要求。函數(shù)式組件一般是用在大型項目中來分割大組件(函數(shù)式組件不用創(chuàng)建實例,所有更高效),一般情況下能用函數(shù)式組件就不用類組件,提升效率。
答案戳這里:zhuanlan.zhihu.com/p/35801438
初次登錄的時候,前端調(diào)后調(diào)的登錄接口,發(fā)送用戶名和密碼,后端收到請求,驗證用戶名和密碼,驗證成功,就給前端返回一個token,和一個用戶信息的值,前端拿到token,將token儲存到Vuex中,然后從Vuex中把token的值存入瀏覽器Cookies中。
把用戶信息存到Vuex然后再存儲到LocalStroage中,然后跳轉(zhuǎn)到下一個頁面,根據(jù)后端接口的要求,只要不登錄就不能訪問的頁面需要在前端每次跳轉(zhuǎn)頁面師判斷Cookies中是否有token,沒有就跳轉(zhuǎn)到登錄頁,有就跳轉(zhuǎn)到相應(yīng)的頁面,我們應(yīng)該再每次發(fā)送post/get請求的時候應(yīng)該加入token,常用方法再項目utils/service.js中添加全局攔截器,將token的值放入請求頭中 后端判斷請求頭中有無token,有token,就拿到token并驗證token是否過期,在這里過期會返回?zé)o效的token然后有個跳回登錄頁面重新登錄并且清除本地用戶的信息
答案戳這里:https://blog.csdn.net/weixin_40599109/article/details/113728974
vue中購物車邏輯的實現(xiàn)
js中購物車邏輯的實現(xiàn)
**展示購物車中的商品******
**完成購物車中商品的購買******
備注1:購物車中商品存儲的數(shù)據(jù)除了“商品id”、“商品數(shù)量”之外,根據(jù)產(chǎn)品要求還可以有其他的信息,例如完整的商品詳情(這樣就不用掉服務(wù)器接口獲得詳情了)、購物車商品的過期時間,超過時間的購物車商品在下次打開網(wǎng)站或者購物車頁面時被清除。
備注2:購物車商品除了存儲在localStorage中,根據(jù)產(chǎn)品的需求不同,也可以存儲在sessionStorage、cookie、session中,或者直接向服務(wù)器接口發(fā)起請求存儲在服務(wù)器上。何種情況使用哪種方式存儲、有啥區(qū)別請自己分析。
<!-- 狀態(tài)碼:由3位數(shù)字組成,第一個數(shù)字定義了響應(yīng)的類別 -->
<!-- 1xx:指示消息,表示請求已接收,繼續(xù)處理 -->
<!-- 2xx:成功,表示請求已被成功接收,處理 -->
<!-- 200 OK:客戶端請求成功
204 No Content:無內(nèi)容。服務(wù)器成功處理,但未返回內(nèi)容。一般用在只是客戶端向服務(wù)器發(fā)送信息,而服務(wù)器不用向客戶端返回什么信息的情況。不會刷新頁面。
206 Partial Content:服務(wù)器已經(jīng)完成了部分GET請求(客戶端進行了范圍請求)。響應(yīng)報文中包含Content-Range指定范圍的實體內(nèi)容 -->
<!-- 3xx 重定向 -->
<!-- 301 Moved Permanently:永久重定向,表示請求的資源已經(jīng)永久的搬到了其他位置。
302 Found:臨時重定向,表示請求的資源臨時搬到了其他位置
303 See Other:臨時重定向,應(yīng)使用GET定向獲取請求資源。303功能與302一樣,區(qū)別只是303明確客戶端應(yīng)該使用GET訪問
307 Temporary Redirect:臨時重定向,和302有著相同含義。POST不會變成GET
304 Not Modified:表示客戶端發(fā)送附帶條件的請求(GET方法請求報文中的IF…)時,條件不滿足。返回304時,不包含任何響應(yīng)主體。雖然304被劃分在3XX,但和重定向一毛錢關(guān)系都沒有 -->
<!-- 4xx:客戶端錯誤 -->
<!-- 400 Bad Request:客戶端請求有語法錯誤,服務(wù)器無法理解。
401 Unauthorized:請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用。
403 Forbidden:服務(wù)器收到請求,但是拒絕提供服務(wù)
404 Not Found:請求資源不存在。比如,輸入了錯誤的url
415 Unsupported media type:不支持的媒體類型 -->
<!-- 5xx:服務(wù)器端錯誤,服務(wù)器未能實現(xiàn)合法的請求。 -->
<!-- 500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯誤。
503 Server Unavailable:服務(wù)器當(dāng)前不能處理客戶端的請求,一段時間后可能恢復(fù)正常, -->
我是cv的各位自取吧-。-
原文鏈接:https://juejin.cn/post/7073869980411887652
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。