HTML部分
1. 你是如何理解 HTML 語(yǔ)義化的汗洒?
語(yǔ)義化是指根據(jù)內(nèi)容的結(jié)構(gòu)化(內(nèi)容語(yǔ)義化)减牺,選擇合適的標(biāo)簽(代碼語(yǔ)義化)是嗜,便于開(kāi)發(fā)者閱讀和寫出更優(yōu)雅的代碼的同時(shí),讓瀏覽器的爬蟲(chóng)和機(jī)器很好的解析步责。
標(biāo)題用h1-h5返顺。文章用artical。段落用p蔓肯。時(shí)間用time標(biāo)簽遂鹊。 header標(biāo)簽,footer標(biāo)簽,main標(biāo)簽, nav,artical標(biāo)簽。
html分的歷史階段:
- 后臺(tái)開(kāi)發(fā)寫前端頁(yè)面
使用table標(biāo)簽蔗包。會(huì)出現(xiàn)table套table的窘境 - 美工階段
div+css布局秉扑。不夠語(yǔ)義化。 - 前端階段
語(yǔ)義化標(biāo)簽
2. meta viewport 是做什么用的调限,怎么寫舟陆?
移動(dòng)設(shè)備上的viewport就是設(shè)備的屏幕上能用來(lái)顯示我們的網(wǎng)頁(yè)的那一塊區(qū)域。比如瀏覽器的可展示區(qū)域
<meta name="viewport" content="width=device-width,initial-scale=1">
width設(shè)置layout viewport的寬度耻矮,為一個(gè)正整數(shù)秦躯,或字符串"width-device"
initial-scale設(shè)置頁(yè)面的最大縮放值,為一個(gè)數(shù)字淘钟,可以帶小數(shù)
minimum-scale允許用戶的最小縮放值宦赠,為一個(gè)數(shù)字陪毡,可以帶小數(shù)
maximum-scale允許用戶的最大縮放值米母,為一個(gè)數(shù)字勾扭,可以帶小數(shù)
height設(shè)置layout viewport的高度,這個(gè)屬性并不重要铁瞒,很少使用
user-scalable 是否允許用戶進(jìn)行縮放妙色,值為"no"或"yes"
CSS
兩種盒模型
-
box-sizing: conent-box;
將盒子設(shè)置為標(biāo)準(zhǔn)模型(盒子默認(rèn)為標(biāo)準(zhǔn)模型) -
box-sizing: border-box;
將盒子設(shè)置為 IE 模型(也叫做怪異盒子)
content-box { width: 100px; height: 100px; border: 50px solid; padding: 50px;}
在標(biāo)準(zhǔn)模型中,它在頁(yè)面中實(shí)際占有的寬高為300px
在IE 模型中慧耍,它的頁(yè)面實(shí)際占有寬度還是100px身辨。由于 border + padding 已經(jīng)等于 100px 了,所以這里 content 已經(jīng)被壓縮到只剩 0 了
什么是邊距重疊
兩種現(xiàn)象
- 同一層相鄰元素
<style>
.box-1 {
width: 100px;
height: 100px;
margin-bottom: 50px; /* 會(huì)出現(xiàn)重疊芍碧。不會(huì)出現(xiàn)100px的合邊距煌珊。 只有50px;*/
background-color: aqua;
}
.box-2 {
width: 100px;
height: 100px;
margin-top: 50px; /* 會(huì)出現(xiàn)重疊泌豆。不會(huì)出現(xiàn)100px的合邊距定庵。 只有50px;*/
background-color: blueviolet;
}
</style>
<div class="box-1"></div>
<div class="box-2"></div>
- 父元素和子元素之間沒(méi)有內(nèi)容
<div class="futher">
<div class="child"></div>
</div>
<style>
* { margin: 0; padding: 0;}
.futher {
background: deeppink;
}
.child {
margin-top: 50px; /*父元素也會(huì)跟著有個(gè)50px的margin-top*/
height: 100px;
background: deepskyblue;
}
</style>
實(shí)現(xiàn)垂直居中
如果 .parent 的 height 不寫踪危,你只需要 padding: 10px 0; 就能將 .child 垂直居中蔬浙;
如果父元素height寫了高度
<div id="box">
<div id="child"></div>
</div>
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
width: 150px;
height: 100px;
background: orange;
position: absolute;
top: 50%;
margin: -50px 0 0 0;
}
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
background: orange;
position: absolute;
top: 50%;
transform: translate(0, -50%);
}
#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
align-items: center;
}
#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child{
background: orange;
position: absolute;
width: 150px;
height: 100px;
margin: auto;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
水平垂直居中
- 水平居中
margin: 0 auto;
<div class="wrap">
<div class="example2">
</div>
</div>
.wrap {
position: relative;
background-color: orange;
width: 300px;
height: 300px;
}
.example2 {
background-color: red;
width: 100px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
margin: -50px 0 0 -50px;
}
flex布局
<div class="warp">
<div class="example3">
居中顯示
</div>
</div>
.warp {
position: relative;
background-color: orange;
width: 200px;
height: 200px;
}
.example3 {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: red;
width: 100px;
height: 100px;
margin: auto;
}
.warp {
position: relative;
background-color: orange;
width: 200px;
height: 200px;
}
.example3 {
position: relative;
top:50%;
transform:translateY(-50%);
background-color: red;
width: 100px;
height: 100px;
margin: 0 auto;
}
BFC
塊格式化上下文
1.給父元素overflow:hidden。那么其浮動(dòng)的子元素就會(huì)被包裹
-
兄弟之間劃清界限
假設(shè)現(xiàn)在有一對(duì)兄弟 div贞远,其中一個(gè)加了浮動(dòng)畴博,那么兩個(gè) div 會(huì)重疊一部分
如果讓另一個(gè) div 創(chuàng)建 BFC,那么這兩者就會(huì)界限分明蓝仲。
css優(yōu)先級(jí)
內(nèi)聯(lián) > ID選擇器 > 類選擇器 > 標(biāo)簽選擇器俱病。
- 越具體優(yōu)先級(jí)越高
- 寫在后面的覆蓋前面的
- important ! 優(yōu)先級(jí)最高。少用袱结。
清楚浮動(dòng)
.clearFix {
content: '';
display: block;
clear: both;
}
js
ES6 語(yǔ)法知道哪些亮隙,分別怎么用?
- 塊級(jí)作用域
let變量擎勘,const常量 - 箭頭函數(shù)
咱揍。 默認(rèn)參數(shù)
。 剩余參數(shù): 剩余參數(shù)語(yǔ)法允許我們將一個(gè)不定數(shù)量的參數(shù)表示為一個(gè)數(shù)組
棚饵。 展開(kāi)運(yùn)算符: 可以展開(kāi)數(shù)組
function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5)); // 5
function fun1(...theArgs) {
alert(theArgs.length);
}
fun1(5, 6, 7); // 彈出 "3", 因?yàn)閠heArgs有三個(gè)元素
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
// expected output: 6
[...iterableObj, '4', ...'hello', 6]; // 數(shù)組合并
- 模板字符串
- 對(duì)象屬性加強(qiáng)
煤裙。 屬性定義支持短語(yǔ)法 obj = { x, y } - 解構(gòu)賦值
var a, b, rest;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]
({ a, b } = { a: 10, b: 20 });
console.log(a); // 10
console.log(b); // 20
- 類
- Promise
手寫函數(shù)防抖和函數(shù)節(jié)流
節(jié)流
一段時(shí)間執(zhí)行一次之后,就不執(zhí)行第二次
functiong fn() {}
let cd = false // 技能是否在冷卻
button.onclick = function () {
if(cd) {
// 在冷卻噪漾,什么也不錯(cuò)
} else {
fn() // 執(zhí)行函數(shù) 或者fn在setTimeout里面執(zhí)行硼砰。相當(dāng)于施法有吟唱時(shí)間
cd = true
setTimeout(() => {
cd = false
}, 3000)
}
}
防抖
用戶在1s內(nèi)連續(xù)點(diǎn)擊兩次。只執(zhí)行最后一次欣硼。等一秒之后再執(zhí)行题翰。如果一秒內(nèi)再次觸發(fā)。則清除上次的執(zhí)行timeout
比如再拖動(dòng)窗口的時(shí)候。用戶再一秒內(nèi)可能改變了很多次窗口的大小豹障。此時(shí)我只執(zhí)行最后一次
function fn () {}
var timerId = null
button.onclick = function () {
if(timerId) {
window.clearTimeout(timerId)
}
timerId = setTimeout(() => {
fn()
timerId = null
}, 1000)
}
手寫一個(gè)AJAX
function ajax() {
let request = new XMLHttpRequest()
request.open('get', 'https://www.google.com') // 請(qǐng)求方式和請(qǐng)求路徑
request.onreadystatechange = () => { // 監(jiān)聽(tīng)狀態(tài)
if (request.readyState === 4) { // 0:代理創(chuàng)建 1:open方法被調(diào)用 2:send方法被調(diào)用 3:下載中 4: 下載操作已完成
if (request.status >= 200 && request.status <300) {
let string = request.responseText
let object = JSON.parse(string)
}
}
}
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 設(shè)置請(qǐng)求頭
request.send(data) // 要傳的參數(shù) 可以使用JSON.stringify()和JSON.parse()進(jìn)行轉(zhuǎn)換
}
this是什么
閉包/立即執(zhí)行函數(shù)是什么冯事?
「函數(shù)」和「函數(shù)內(nèi)部能訪問(wèn)到的變量」(也叫環(huán)境)的總和,就是一個(gè)閉包血公。
function foo(){
var local = 1
function bar(){ // bar 和local就形成了閉包昵仅。此時(shí)我需要把bar返回出去。這樣外面就能方問(wèn)到里面的局部變量
local++
return local
}
return bar
}
var func = foo()
func()
或者
!function(){
var lives = 50
window.獎(jiǎng)勵(lì)一條命 = function(){
lives += 1
}
window.死一條命 = function(){
lives -= 1
}
}()
在其他js文件中就能通過(guò)windown.獎(jiǎng)勵(lì)一條命等去操作局部變量 lives
(function(){alert('我是匿名函數(shù)')}) () //用括號(hào)把函數(shù)包起來(lái)
!function(){alert('我是匿名函數(shù)')}() // 求反累魔,我們不在意值是多少摔笤,只想通過(guò)語(yǔ)法檢查。 常用形式
+function(){alert('我是匿名函數(shù)')}()
-function(){alert('我是匿名函數(shù)')}()
~function(){alert('我是匿名函數(shù)')}()
立即執(zhí)行函數(shù)的作用 創(chuàng)建一個(gè)獨(dú)立的作用域垦写。
var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
liList[i].onclick = function(){
alert(i) // 為什么 alert 出來(lái)的總是 6吕世,而不是 0、1梯投、2命辖、3、4晚伙、5吮龄。 因?yàn)閕是全局變量
}
}
var liList = ul.getElementsByTagName('li')
for(var i = 0; i< 6: i++) {
!function(ii){
liList.onclick = function() {
alert(ii) // 0 1 2 3 4 5
}
}(i)
}
JSONP是什么
jsonp的核心是動(dòng)態(tài)添加<script>標(biāo)簽來(lái)調(diào)用服務(wù)器提供的js腳本。
例子一
跨域服務(wù)器
文件:remote.js
代碼:
alert('我是遠(yuǎn)程文件');
本地
<script type="text/javascript" src="跨域服務(wù)器/remote.js"></script>
例子二
跨域服務(wù)器
文件:
remote.js
代碼:
localHandler({"result":"我是遠(yuǎn)程js帶來(lái)的數(shù)據(jù)"});
本地
<script type="text/javascript">
var localHandler = function(data){
alert('我是本地函數(shù)咆疗,可以被跨域的remote.js文件調(diào)用漓帚,遠(yuǎn)程js帶來(lái)的數(shù)據(jù)是:' + data.result);
};
</script>
<script type="text/javascript" src="跨域服務(wù)器/remote.js"></script>
例子三(我需要告訴服務(wù)器我的回調(diào)名稱及參數(shù))
跨域服務(wù)器
文件:flightResult.php
代碼:
flightHandler({ "code":"CA1998", "price": 1780, "tickets": 5 });
本地
<script type="text/javascript">
// 得到航班信息查詢結(jié)果后的回調(diào)函數(shù)
var flightHandler = function(data){
alert('你查詢的航班結(jié)果是:票價(jià) ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 張午磁。');
};
// 提供jsonp服務(wù)的url地址(不管是什么類型的地址尝抖,最終生成的返回值都是一段javascript代碼)
var url = "跨域服務(wù)器/flightResult.php?code=CA1998&callback=flightHandler";
// 創(chuàng)建script標(biāo)簽,設(shè)置其屬性
var script = document.createElement('script');
script.setAttribute('src', url);
// 把script標(biāo)簽加入head,此時(shí)調(diào)用開(kāi)始
document.getElementsByTagName('head')[0].appendChild(script);
</script>
CORS是什么
它允許瀏覽器向跨源服務(wù)器。
瀏覽器將CORS請(qǐng)求分成兩類:簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求蝎亚。
只要同時(shí)滿足以下兩大條件,就屬于簡(jiǎn)單請(qǐng)求搅荞。
- 請(qǐng)求方法是以下三種方法之一:
HEAD
GET
POST- HTTP的頭信息不超出以下幾種字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個(gè)值application/x-www-form-urlencoded、multipart/form-data框咙、text/plain
對(duì)于簡(jiǎn)單請(qǐng)求咕痛,瀏覽器直接發(fā)出CORS請(qǐng)求。具體來(lái)說(shuō)喇嘱,就是在頭信息之中茉贡,增加一個(gè)Origin字段。
Origin字段用來(lái)說(shuō)明者铜,本次請(qǐng)求來(lái)自哪個(gè)源(協(xié)議 + 域名 + 端口)腔丧。服務(wù)器根據(jù)這個(gè)值放椰,決定是否同意這次請(qǐng)求。
GET /cors HTTP/1.1
Origin: http://api.bob.com // 來(lái)自哪里
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...
如果
Origin
指定的源愉粤,不在許可范圍內(nèi)砾医,服務(wù)器會(huì)返回一個(gè)正常的HTTP回應(yīng)。瀏覽器發(fā)現(xiàn)科汗,這個(gè)回應(yīng)的頭信息沒(méi)有包含Access-Control-Allow-Origin
字段(詳見(jiàn)下文)藻烤,就知道出錯(cuò)了绷雏,從而拋出一個(gè)錯(cuò)誤头滔,被XMLHttpRequest
的onerror
回調(diào)函數(shù)捕獲。
如果Origin指定的域名在許可范圍內(nèi)涎显,服務(wù)器返回的響應(yīng)坤检,會(huì)多出幾個(gè)頭信息字段。
//它的值要么是請(qǐng)求時(shí)Origin字段的值期吓,要么是一個(gè)*早歇,表示接受任意域名的請(qǐng)求。
Access-Control-Allow-Origin: http://api.bob.com 該字段是必須的讨勤。
// 該字段可選箭跳。它的值是一個(gè)布爾值,表示是否允許發(fā)送Cookie潭千。
Access-Control-Allow-Credentials: true
withCredentials 屬性
CORS請(qǐng)求默認(rèn)不發(fā)送Cookie和HTTP認(rèn)證信息谱姓。
一方面服務(wù)器端需要同意,設(shè)置
Access-Control-Allow-Credentials: true
另一方面前端開(kāi)發(fā)設(shè)置
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
非簡(jiǎn)單請(qǐng)求
比如請(qǐng)求方法是
PUT
或DELETE
刨晴,或者Content-Type
字段的類型是application/json
屉来。
非簡(jiǎn)單請(qǐng)求的CORS請(qǐng)求,會(huì)在正式通信之前狈癞,增加一次HTTP查詢請(qǐng)求茄靠,稱為"預(yù)檢"請(qǐng)求(preflight)
服務(wù)器收到"預(yù)檢"請(qǐng)求以后,檢查了
Origin
(來(lái)源)蝶桶、Access-Control-Request-Method
(請(qǐng)求方法)和Access-Control-Request-Headers
(額外發(fā)送的頭信息)字段以后慨绳,確認(rèn)允許跨源請(qǐng)求,就可以做出回應(yīng)真竖。
一旦服務(wù)器通過(guò)了"預(yù)檢"請(qǐng)求脐雪,以后每次瀏覽器正常的CORS請(qǐng)求,就都跟簡(jiǎn)單請(qǐng)求一樣
深拷貝
JSON.parse(JSON.stringify())
能完成大部分?jǐn)?shù)據(jù)得深拷貝疼邀。但存在問(wèn)題
1.undefined喂江、function、symbol這三種類型的值就是非安全的旁振,所以格式化后获询,就被過(guò)濾掉了
- set涨岁、map這種數(shù)據(jù)格式的對(duì)象,也并沒(méi)有被正確處理吉嚣,而是處理成了一個(gè)空對(duì)象
- 循環(huán)引用報(bào)錯(cuò)
- 相同的引用會(huì)被重復(fù)復(fù)制
**寫一個(gè)遞歸調(diào)用得函數(shù)進(jìn)行深拷貝
function deepCopy(data) {
if(typeof data !== 'object' || data === null){
throw new TypeError('傳入?yún)?shù)不是對(duì)象')
}
let newData = {};
const dataKeys = Object.keys(data);
dataKeys.forEach(value => {
const currentDataValue = data[value];
// 基本數(shù)據(jù)類型的值和函數(shù)直接賦值拷貝
if (typeof currentDataValue !== "object" || currentDataValue === null) {
newData[value] = currentDataValue;
} else if (Array.isArray(currentDataValue)) {
// 實(shí)現(xiàn)數(shù)組的深拷貝
newData[value] = [...currentDataValue];
} else if (currentDataValue instanceof Set) {
// 實(shí)現(xiàn)set數(shù)據(jù)的深拷貝
newData[value] = new Set([...currentDataValue]);
} else if (currentDataValue instanceof Map) {
// 實(shí)現(xiàn)map數(shù)據(jù)的深拷貝
newData[value] = new Map([...currentDataValue]);
} else {
// 普通對(duì)象則遞歸賦值
newData[value] = deepCopy(currentDataValue);
}
});
return newData;
}
測(cè)試數(shù)據(jù)
// 測(cè)試數(shù)據(jù)項(xiàng)
var data = {
age: 18,
name: "liuruchao",
education: ["小學(xué)", "初中", "高中", "大學(xué)", undefined, null],
likesFood: new Set(["fish", "banana"]),
friends: [
{ name: "summer", sex: "woman"},
{ name: "daWen", sex: "woman"},
{ name: "yang", sex: "man" }
],
work: {
time: "2019",
project: { name: "test",obtain: ["css", "html", "js"]}
},
play: function() {console.log("玩滑板");}
}
如何用正則實(shí)現(xiàn) trim()梢薪?
function trim(string){
return string.replace(/^\s+|\s+$/g, '')
}
不用 class 如何實(shí)現(xiàn)繼承?用 class 又如何實(shí)現(xiàn)尝哆?
不用class
function Animal(name){
this.name = name;
this.colors = ["red", "blue", "green"];
}
Animal.prototype.sayName = function(){
console.log(this.name);
}
function Dog(name, age){
//繼承屬性
Animal.call(this, name);
this.age = age;
}
let f = function () {}
f.prototype = Animal.prototype
//繼承方法
Dog.prototype = new f();
Dog.prototype.constructor = Dog;
Dog.prototype.sayAge = function(){
alert(this.age);
};
用class實(shí)現(xiàn)繼承
class Animal{
constructor(color){
this.color = color
}
move(){}
}
class Dog extends Animal{
constructor(color, name){
super(color)
this.name = name
}
say(){}
}
數(shù)組去重
- 利用indexOf實(shí)現(xiàn)去重秉撇。
indexOf()方法返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在秋泄,則返回-1琐馆。
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
let res = []
for (let i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i])
}
}
return res
}
- 相鄰元素去重
先用sort進(jìn)行排序
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
arr = arr.sort()
let res = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
res.push(arr[i])
}
}
return res
}
- 使用set
set中的值是唯一的
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
return [...new Set(arr)]
}
DOM
事件冒泡、事件捕獲恒序、事件委托
<div class="father">
<div class="child"></div>
</div>
用戶點(diǎn)擊瘦麸,當(dāng)father和child都存在點(diǎn)擊事件時(shí),先執(zhí)行哪一個(gè)事件
事件冒泡認(rèn)為應(yīng)該先從子元素開(kāi)始執(zhí)行歧胁。往后面冒泡滋饲。
事件捕獲則是從父元素開(kāi)始執(zhí)行。最后執(zhí)行子元素喊巍。
event.stopPropagation()可組織事件冒泡或者捕獲屠缭。
在子元素點(diǎn)擊事件執(zhí)行時(shí)添加stopPropagation就可以組織父元素的點(diǎn)擊事件執(zhí)行
addEventListener第三個(gè)參數(shù)可以設(shè)置事件冒泡或者事件捕獲
ul.addEventListener('click', function(e){
if(e.target.tagName.toLowerCase() === 'li'){
fn() // 執(zhí)行某個(gè)函數(shù)
}
}) // 默認(rèn)為false。事件冒泡
高階版
當(dāng)li里面有個(gè)span崭参。點(diǎn)擊了span
function delegate(element, eventType, selector, fn) {
element.addEventListener(eventType, e => {
let el = e.target
while (!el.matches(selector)) {
if (element === el) {
el = null
break
}
el = el.parentNode
}
el && fn.call(el, e, el)
})
return element
}
HTTP
HTTP 狀態(tài)碼知道哪些呵曹?分別什么意思?
- 100 Continue
這個(gè)臨時(shí)響應(yīng)表明阵翎,迄今為止的所有內(nèi)容都是可行的逢并,客戶端應(yīng)該繼續(xù)請(qǐng)求,如果已經(jīng)完成郭卫,則忽略它砍聊。 - 102 Processing
此代碼表示服務(wù)器已收到并正在處理該請(qǐng)求,但沒(méi)有響應(yīng)可用贰军。 - 200 OK
請(qǐng)求成功 - 201 Created
該請(qǐng)求已成功玻蝌,并因此創(chuàng)建了一個(gè)新的資源。這通常是在POST請(qǐng)求词疼,或是某些PUT請(qǐng)求之后返回的響應(yīng)俯树。 - 204 No content
服務(wù)器成功處理了請(qǐng)求,但不需要返回任何實(shí)體內(nèi)容 - 301 Moved Permanently
被請(qǐng)求的資源已永久移動(dòng)到新位置. - 302 Found
請(qǐng)求的資源現(xiàn)在臨時(shí)從不同的 URI 響應(yīng)請(qǐng)求贰盗。由于這樣的重定向是臨時(shí)的许饿,客戶端應(yīng)當(dāng)繼續(xù)向原有地址發(fā)送以后的請(qǐng)求。 - 400 Bad Request
1舵盈、語(yǔ)義有誤陋率,當(dāng)前請(qǐng)求無(wú)法被服務(wù)器理解球化。除非進(jìn)行修改,否則客戶端不應(yīng)該重復(fù)提交這個(gè)請(qǐng)求瓦糟。
2筒愚、請(qǐng)求參數(shù)有誤。 - 403 Forbidden
服務(wù)器已經(jīng)理解請(qǐng)求菩浙,但是拒絕執(zhí)行它巢掺。權(quán)限 - 404 No Found
請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)劲蜻。 - 500 Internal Server Error
服務(wù)器遇到了不知道如何處理的情況陆淀。
2開(kāi)頭一般表示成功。3開(kāi)頭表示需要進(jìn)一步的操作斋竞。4開(kāi)頭表示客戶端錯(cuò)誤倔约。5開(kāi)頭表示服務(wù)器端錯(cuò)誤。