一、核心知識(shí)點(diǎn)(重點(diǎn)):
1.1 Cookie
1. Cookie:是一種客戶端會(huì)話技術(shù),數(shù)據(jù)會(huì)被保存在客戶端,Cookie會(huì)攜帶數(shù)據(jù)訪問(wèn)服務(wù)器,用以完成一次會(huì)話內(nèi)多次請(qǐng)求間的數(shù)據(jù)共享
2. 過(guò)程:瀏覽器(客戶端)先向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端會(huì)發(fā)送一個(gè)Cookie給客戶端,在此后同一次會(huì)話中,每次客戶端都會(huì)將Cookie發(fā)送給服務(wù)端,數(shù)據(jù)層層疊加。
3. Cookie存活時(shí)間:默認(rèn)情況下,Cookie存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)瀏覽器關(guān)閉,內(nèi)存釋放,則Cookie被銷毀。調(diào)用setMaxAge(int seconds)可以設(shè)置Cookie的存活時(shí)間。
4. Cookie的發(fā)送和獲取:
?
1.2 Session
1. Session:服務(wù)端的會(huì)話跟蹤技術(shù),將數(shù)據(jù)保存在服務(wù)端。JavaEE提供HttpSession接口,來(lái)實(shí)現(xiàn)一次會(huì)話的多次請(qǐng)求間數(shù)據(jù)共享功能。Session的實(shí)現(xiàn)是基于Cookie的。
2. Session的鈍化和活化:(鈍化:)在服務(wù)器正常關(guān)閉后,Tomcat會(huì)自動(dòng)將Session數(shù)據(jù)寫入硬盤的文件中。(活化:)再次啟動(dòng)服務(wù)器后,從文件中加載數(shù)據(jù)到Session中。
3. Session的銷毀,在web.xml中可以用<session-timeout>標(biāo)簽進(jìn)行更改銷毀時(shí)間。:
1.3 HTTP
1. HTTP(Hyper Text Transfer Protocol 超文本傳輸協(xié)議):規(guī)定了瀏覽器和服務(wù)器之間數(shù)據(jù)傳輸?shù)囊?guī)則(服務(wù)器和客戶端之間進(jìn)行數(shù)據(jù)交互的格式)。
2. HTTP協(xié)議特點(diǎn):1. 基于TCP協(xié)議:面向連接、安全。2. 基于請(qǐng)求-響應(yīng)模型的:一次請(qǐng)求對(duì)應(yīng)一次響應(yīng)。3. HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議:對(duì)于事務(wù)處理沒(méi)有記憶能力。每次請(qǐng)求-響應(yīng)都是獨(dú)立的。缺點(diǎn):多次請(qǐng)求間不能共享數(shù)據(jù)。(Java中用會(huì)話技術(shù),如Cookie、Session來(lái)解決這個(gè)問(wèn)題)優(yōu)點(diǎn):速度快。
3. GET和POST的區(qū)別:1. GET請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求行中,沒(méi)有請(qǐng)求體。POST請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求體中。2. GET請(qǐng)求的請(qǐng)求參數(shù)大小有限制,POST沒(méi)有限制。
4. 狀態(tài)碼:302? Found? 找到。304? Not Modified? 沒(méi)有修改。400? Bad Request? 錯(cuò)誤的請(qǐng)求。403? Forbidden? 拒絕。404? Not Found? 請(qǐng)求資源不存在。428? Precondition Required 有條件請(qǐng)求。?429? Too Many Requests? 太多請(qǐng)求。431? ?Request Header Fields Too Large? 請(qǐng)求頭太大。405? ?Method Not Allowed? ?請(qǐng)求方式有誤。500 ? Internal Server Error? ?服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。503 ? Service Unavailable? 服務(wù)器尚未準(zhǔn)備好處理請(qǐng)求。511? ?Network Authentication Required? 需要進(jìn)行身份驗(yàn)證。
二、會(huì)話跟蹤技術(shù)(Cookie+Session)
1.1 預(yù)備知識(shí)
1. 會(huì)話:用戶打開瀏覽器,訪問(wèn)web服務(wù)器的資源,會(huì)話建立,直到有一方斷開連接,會(huì)話結(jié)束。在一次會(huì)話中可以包含多次請(qǐng)求和響應(yīng)。
2. 會(huì)話跟蹤:一種維護(hù)瀏覽器狀態(tài)的方法,服務(wù)器需要識(shí)別多次請(qǐng)求是否來(lái)自于同一個(gè)瀏覽器,以便在同一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù)。
3. 為什么需要會(huì)話跟蹤技術(shù)?
因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的(如果是有狀態(tài)的則后面的請(qǐng)求要攜帶前面請(qǐng)求所有的數(shù)據(jù),會(huì)導(dǎo)致請(qǐng)求的體量很大,訪問(wèn)的速度會(huì)很慢),每次瀏覽器向服務(wù)器請(qǐng)求時(shí),服務(wù)器都會(huì)將該請(qǐng)求視為新的請(qǐng)求,因此我們需要會(huì)話跟蹤技術(shù)來(lái)實(shí)現(xiàn)會(huì)話內(nèi)數(shù)據(jù)共享。
4. 實(shí)現(xiàn)方式:客戶端會(huì)話跟蹤技術(shù):Cookie;服務(wù)端會(huì)話跟蹤技術(shù):Session。
1.2 Cookie基本使用
Cookie:客戶端會(huì)話技術(shù),將數(shù)據(jù)保存到客戶端,以后每次請(qǐng)求都攜帶Cookie數(shù)據(jù)進(jìn)行訪問(wèn)。
過(guò)程:瀏覽器(客戶端)先向服務(wù)端發(fā)送請(qǐng)求,服務(wù)端會(huì)發(fā)送一個(gè)Cookie給客戶端,在此后同一次會(huì)話中,每次客戶端都會(huì)將Cookie發(fā)送給服務(wù)端,數(shù)據(jù)層層疊加。
1.2.1 發(fā)送Cookie
在java-web-cookie路徑下創(chuàng)建AServlet類,寫入下面的代碼:
@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//發(fā)送Cookie
Cookie cookie = new Cookie("username", "zhangsan");//1.創(chuàng)建Cookie對(duì)象
response.addCookie(cookie);//2.發(fā)送Cookie。response
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}
F12-設(shè)置-Cookie和網(wǎng)站權(quán)限-管理和刪除cookie和站點(diǎn)數(shù)據(jù)-查看所有Cookkie和站點(diǎn)數(shù)據(jù)
1.2.2 獲取Cookie
@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取Cookie
Cookie[] cookies = request.getCookies();//獲取Cookie數(shù)組
for(Cookie cookie:cookies) { //遍歷數(shù)組
String name = cookie.getName();
if("username".equals(name)){
String value = cookie.getValue(); //使用Cookie對(duì)象獲取數(shù)據(jù)
System.out.println(name + ":" + value);
break; } } }
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}
1.3 Cookie原理和使用細(xì)節(jié)
Cookie的實(shí)現(xiàn)是基于HTTP協(xié)議的:響應(yīng)頭set-cookie(是服務(wù)端發(fā)送給瀏覽器,里面會(huì)裝有Cookie攜帶的數(shù)據(jù))請(qǐng)求頭cookie(是瀏覽器發(fā)送給服務(wù)端,里面同樣裝有數(shù)據(jù))
1. Cookie存活時(shí)間:默認(rèn)情況下,Cookie存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)瀏覽器關(guān)閉,內(nèi)存釋放,則Cookie被銷毀。
調(diào)用setMaxAge(int seconds)可以設(shè)置Cookie的存活時(shí)間。正數(shù):將Cookie寫入瀏覽器所在電腦的硬盤,持久化存儲(chǔ),到時(shí)間自動(dòng)刪除。負(fù)數(shù):默認(rèn)值,當(dāng)瀏覽器關(guān)閉,則Cookie被銷毀。零:刪除。
2. Cookie存儲(chǔ)中文:Cookie不能直接存儲(chǔ)中文。需要將中文轉(zhuǎn)化成其它編碼格式存儲(chǔ),等到要顯示時(shí)再解析為非中文的數(shù)據(jù)。
因此可以在Cookie的發(fā)送端調(diào)用URLEncoder將字符串轉(zhuǎn)化為UTF-8的格式:
String value="張三";
value = URLEncoder.encode(value, "UTF-8");
然后再Cookie的接收端調(diào)用URLDecoder將字符串解碼為中文字符串:?
String value = cookie.getValue();
value = URLDecoder.decode(value,"UTF-8");
1.4 Session基本使用
Session:服務(wù)端的會(huì)話跟蹤技術(shù),將數(shù)據(jù)保存在服務(wù)端。JavaEE提供HttpSession接口,來(lái)實(shí)現(xiàn)一次會(huì)話的多次請(qǐng)求間數(shù)據(jù)共享功能。
Session發(fā)送端:?
@WebServlet("/demo1")
public class SessionDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//存儲(chǔ)到Session中
HttpSession session = request.getSession();//1. 獲取Session對(duì)象
session.setAttribute("username","zs");//2. 存儲(chǔ)數(shù)據(jù)
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}
Session接收端:
@WebServlet("/demo2")
public class SessionDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取數(shù)據(jù),從session中
HttpSession session = request.getSession();//1. 獲取Session對(duì)象
Object username = session.getAttribute("username");//2. 獲取數(shù)據(jù)
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}
1.5 Session原理和使用細(xì)節(jié)
Session的實(shí)現(xiàn)是基于Cookie的。
通過(guò)打印發(fā)送端和接收端的Session地址,可以發(fā)現(xiàn)二者的地址都是相同的,因此在一次會(huì)話的多次請(qǐng)求中Session是相同的。
原理:Session對(duì)象具有唯一標(biāo)識(shí),叫作id。瀏覽器向網(wǎng)頁(yè)發(fā)出請(qǐng)求,網(wǎng)頁(yè)端的Tomcat作出響應(yīng),當(dāng)發(fā)現(xiàn)使用了Session,會(huì)將id當(dāng)作一個(gè)Cookie發(fā)送給瀏覽器,同時(shí)設(shè)置頭set-cookie:JSESSIONID=id,瀏覽器會(huì)將Cookie存儲(chǔ)在內(nèi)存里。下一次瀏覽器攜帶cookie:JSESSIONID=id這個(gè)Cokie頭訪問(wèn)服務(wù)器。服務(wù)器識(shí)別到Cookie頭,就會(huì)在內(nèi)存里尋找是否帶有這個(gè)頭的Session對(duì)象。
Session的鈍化:在服務(wù)器正常關(guān)閉后,Tomcat會(huì)自動(dòng)將Session數(shù)據(jù)寫入硬盤的文件中。
Session的活化:再次啟動(dòng)服務(wù)器后,從文件中加載數(shù)據(jù)到Session中。
所以服務(wù)器重啟之后Session中的數(shù)據(jù)不會(huì)丟失,前提是要正常的關(guān)閉和重啟。但是Session不是同一個(gè)Session。
Session的銷毀:
默認(rèn):在web.xml中可以用<session-timeout>標(biāo)簽進(jìn)行更改銷毀時(shí)間。
1.6 案例
1. 用戶登錄
思路:Web層接收用戶名和密碼,調(diào)用Service層的方法,傳入username和password,會(huì)在Dao層中執(zhí)行SQL語(yǔ)句,最終會(huì)返回一個(gè)User對(duì)象,如果User不為null則登錄成功,反之登錄失敗。
UserService代碼如下:
public class UserService {
SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
public User login(String username, String password){
SqlSession sqlSession = factory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.select(username, password);
sqlSession.close();
return user;
}
}
UserService代碼如下:
public class UserService {
SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
public User login(String username, String password){
SqlSession sqlSession = factory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.select(username, password);
sqlSession.close();
return user;
}
}
?LoginServlet代碼如下:
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
private UserService service = new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = service.login(username,password);
if(user != null){
//xxx,歡迎您,這里的xxx是username,所以要把username存到共享域里,用session
HttpSession session = req.getSession();
session.setAttribute("user",user); //第1個(gè)參數(shù)是鍵,第2個(gè)參數(shù)是值
String contextPath = req.getContextPath(); //動(dòng)態(tài)獲取虛擬目錄
resp.sendRedirect(contextPath + "/selectAllServlet");
}else{
System.out.println("錯(cuò)誤輸出了");
req.setAttribute("login_msg","用戶名或密碼錯(cuò)誤"); //對(duì)應(yīng)的是login.jsp中的${login_msg}用于顯示錯(cuò)誤信息
//跳轉(zhuǎn)到login.jsp,還要攜帶錯(cuò)誤信息提示
req.getRequestDispatcher("/login.jsp").forward(req,resp);
//轉(zhuǎn)發(fā)的原因是在request域里存儲(chǔ)數(shù)據(jù),只能用轉(zhuǎn)發(fā)
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
還要修改下面2個(gè)地方:
?
?2. 記住用戶
?
在用戶名和密碼匹配成功且勾選的前提下的判斷語(yǔ)句內(nèi)加入如下代碼:
if("1".equals(remember)){ //"1"寫前面可以防止空指針異常
Cookie c_username = new Cookie("username",username);//勾選了,發(fā)送Cookie,先創(chuàng)建對(duì)象
Cookie c_password = new Cookie("password",password);
c_username.setMaxAge(60*60*24*7);//設(shè)置保存時(shí)間
c_password.setMaxAge(60*60*24*7);
resp.addCookie(c_username); //發(fā)送cookie
resp.addCookie(c_password);
}
更改下面這個(gè)地方:
3. 用戶注冊(cè)
在Service層的UserService中寫入如下代碼:
//注冊(cè)方法
public boolean register(User user){
SqlSession sqlSession = factory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user1 = mapper.selectByUsername(user.getUsername());
if(user1==null) {
mapper.add(user);
sqlSession.commit();
}
sqlSession.close();
return user1 == null;
}
在Web層的RegisterServlet中寫入如下代碼:
@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
private UserService service = new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
boolean flag = service.register(user);
if(flag){
req.setAttribute("register_msg","注冊(cè)成功請(qǐng)登錄");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}else{
req.setAttribute("register_msg","用戶名已存在");
req.getRequestDispatcher("/register.jsp").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
然后再修改如下2個(gè)地方:?
???????
4. 驗(yàn)證碼
首先要導(dǎo)入一個(gè)CheckCodeUtil用于生成驗(yàn)證碼:
checkCode存儲(chǔ)用戶輸入的驗(yàn)證碼,checkCodeGen存儲(chǔ)程序生成的驗(yàn)證碼,存儲(chǔ)在session中,然后對(duì)二者進(jìn)行比對(duì),執(zhí)行跳轉(zhuǎn),如果匹配不成功直接返回。
//獲取用戶輸入的驗(yàn)證碼
String checkCode = req.getParameter("checkCode");
//獲取程序的驗(yàn)證碼
HttpSession session = req.getSession();
String checkCodeGen = (String)session.getAttribute("checkCodeGen");
//比對(duì)
if(!checkCodeGen.equalsIgnoreCase(checkCode)){
req.setAttribute("register_msg","驗(yàn)證碼錯(cuò)誤");
req.getRequestDispatcher("/register.jsp").forward(req,resp);
return;
}
checkCodeServlet寫入如下代碼,用于生成驗(yàn)證碼然后存儲(chǔ)到session中:
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
private UserService service = new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletOutputStream os = resp.getOutputStream(); //輸出流
String checkCode = CheckCodeUtil.outputVerifyImage(100, 50, os, 4); //返回驗(yàn)證碼的值
HttpSession session = req.getSession();
session.setAttribute("checkCodeGen",checkCode);// 存入session
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
修改如下地方:?
三、HTTP相關(guān)知識(shí)點(diǎn)
1.1 預(yù)備知識(shí)
B/S架構(gòu):Browser/Server,瀏覽器/服務(wù)器 架構(gòu)模式,它的特點(diǎn)是,客戶端只需要瀏覽器,應(yīng)用程序的邏輯和數(shù)據(jù)都存儲(chǔ)在服務(wù)器端。瀏覽器只需要請(qǐng)求服務(wù)器,獲取Web資源,服務(wù)器把Web資源發(fā)給瀏覽器即可。好處:易于維護(hù)和升級(jí),客戶端無(wú)需任何部署可以使用新版本。
靜態(tài)資源:HTML、CSS、JavaScript、圖片等。負(fù)責(zé)頁(yè)面展示
動(dòng)態(tài)資源:Servlet、JSP等。負(fù)責(zé)邏輯處理。
數(shù)據(jù)庫(kù):負(fù)責(zé)存儲(chǔ)數(shù)據(jù)。
Web服務(wù)器(Tomcat):負(fù)責(zé)解析HTTP協(xié)議,解析請(qǐng)求數(shù)據(jù),并發(fā)送響應(yīng)數(shù)據(jù)。
PS:自動(dòng)登錄、商品的歷史記錄是用會(huì)話技術(shù)實(shí)現(xiàn)的(Cookie、Session)。過(guò)濾器是過(guò)濾掉某些請(qǐng)求。
1.2 HTTP協(xié)議及特點(diǎn)
HTTP(Hyper Text Transfer Protocol 超文本傳輸協(xié)議):規(guī)定了瀏覽器和服務(wù)器之間數(shù)據(jù)傳輸?shù)囊?guī)則(服務(wù)器和客戶端之間進(jìn)行數(shù)據(jù)交互的格式)。
HTTP協(xié)議特點(diǎn):
1. 基于TCP協(xié)議:面向連接、安全
2. 基于請(qǐng)求-響應(yīng)模型的:一次請(qǐng)求對(duì)應(yīng)一次響應(yīng)
3. HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議:對(duì)于事務(wù)處理沒(méi)有記憶能力。每次請(qǐng)求-響應(yīng)都是獨(dú)立的。缺點(diǎn):多次請(qǐng)求間不能共享數(shù)據(jù)。(Java中用會(huì)話技術(shù),如Cookie、Session來(lái)解決這個(gè)問(wèn)題)優(yōu)點(diǎn):速度快。
1.3 HTTP請(qǐng)求數(shù)據(jù)格式
1. 請(qǐng)求行:請(qǐng)求數(shù)據(jù)的第一行。其中GET表示請(qǐng)求方式,斜杠/表示請(qǐng)求資源路徑,HTTP/1.1表示協(xié)議版本。
2. 請(qǐng)求頭:第二行開始,格式為key:value形式。(Host:表示請(qǐng)求的主機(jī)名。User-Agennt:瀏覽器的版本。Accept:瀏覽器能接收的資源類型,接收文本text/*,接收?qǐng)D片image/*,所有*/*。Accept-Language:表示瀏覽器偏好的語(yǔ)言。Accept-Encoding表示瀏覽器可以支持的壓縮類型。)
3. 請(qǐng)求體:POST請(qǐng)求的最后一部分,存放請(qǐng)求參數(shù)。
1.4 GET和POST的區(qū)別
1. GET請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求行中,沒(méi)有請(qǐng)求體。POST請(qǐng)求的請(qǐng)求參數(shù)在請(qǐng)求體中。
2. GET請(qǐng)求的請(qǐng)求參數(shù)大小有限制,POST沒(méi)有限制。
1.5 HTTP響應(yīng)數(shù)據(jù)格式
1. 響應(yīng)行:響應(yīng)數(shù)據(jù)的第一行。其中HTTP/1.1表示協(xié)議版本,200表示響應(yīng)狀態(tài)碼,OK表示狀態(tài)機(jī)描述。
2. 響應(yīng)頭:第二行開始,格式為key:value形式。(Content-Type:表示該響應(yīng)內(nèi)容的類型,比如text/html、image/jpeg。Content-Length:表示響應(yīng)內(nèi)容的長(zhǎng)度。Content-Encoding:表示該響應(yīng)壓縮算法。Cache-Control:指示客戶端應(yīng)如何緩存。)
3. 響應(yīng)體:最后一部分,存放響應(yīng)數(shù)據(jù)。
1.6 狀態(tài)碼
1xx? 響應(yīng)中? ——臨時(shí)狀態(tài)碼,表示請(qǐng)求已經(jīng)接受,告訴客戶端應(yīng)該繼續(xù)請(qǐng)求或者如果它已經(jīng)完成則忽略它。
?2xx? 成功? ——表示請(qǐng)求已經(jīng)被成功接收,處理已完成。
200? OK? 客戶端請(qǐng)求成功,即處理成功,這是我們最想看到的狀態(tài)碼
?3xx 重定向? ——(資源已經(jīng)存儲(chǔ)到了其它地方)重定向到其它地方:它讓客戶端再發(fā)起一個(gè)請(qǐng)求以完成整個(gè)處理。
302? Found? 指示所請(qǐng)求的資源已移動(dòng)到由`Location`響應(yīng)頭給定的 URL,瀏覽器會(huì)自動(dòng)重新訪問(wèn)到這個(gè)頁(yè)面(請(qǐng)求的資源移動(dòng)到了另外一個(gè)位置,通過(guò)Location給出了位置的URL)。
304? Not Modified? 沒(méi)有修改。告訴客戶端,你請(qǐng)求的資源至上次取得后,服務(wù)端并未更改,你直接用你本地緩存吧,相當(dāng)于隱式的重定向。
?4xx 客戶端錯(cuò)誤? ——【處理發(fā)生錯(cuò)誤,責(zé)任在客戶端】如:客戶端的請(qǐng)求一個(gè)不存在的資源,客戶端未被授權(quán),禁止訪問(wèn)等。
400? Bad Request? 錯(cuò)誤的請(qǐng)求??蛻舳苏?qǐng)求有 語(yǔ)法錯(cuò)誤 ,不能被服務(wù)器所理解。
403? Forbidden? 拒絕。服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù),比如:沒(méi)有權(quán)限訪問(wèn)相關(guān)資源 |
404? Not Found? 請(qǐng)求資源不存在,一般是URL輸入有誤,或者網(wǎng)站資源被刪除了
428? Precondition Required 有條件請(qǐng)求。 服務(wù)器要求有條件的請(qǐng)求,告訴客戶端要想訪問(wèn)該資源,必須攜帶特定的請(qǐng)求頭?
429? Too Many Requests? 太多請(qǐng)求,可以限制客戶端請(qǐng)求某個(gè)資源的數(shù)量,配合 Retry-After(多長(zhǎng)時(shí)間后可以請(qǐng)求)響應(yīng)頭一起使用(當(dāng)前資源有太多人訪問(wèn))。
431? ?Request Header Fields Too Large? 請(qǐng)求頭太大,服務(wù)器不愿意處理請(qǐng)求,因?yàn)樗念^部字段太大。請(qǐng)求可以在減少請(qǐng)求頭域的大小后重新提交。?
405? ?Method Not Allowed? ?請(qǐng)求方式有誤,比如應(yīng)該用GET請(qǐng)求方式的資源,用了POST?
?5xx?服務(wù)器端錯(cuò)誤? ——【處理發(fā)生錯(cuò)誤,責(zé)任在服務(wù)端】如:服務(wù)端拋出異常,路由出錯(cuò),HTTP版本不支持等 |文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-695422.html
500 ? Internal Server Error? ?服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤。服務(wù)器出異常了,趕緊看日志去吧。
503 ? Service Unavailable? 服務(wù)器尚未準(zhǔn)備好處理請(qǐng)求,服務(wù)器剛剛啟動(dòng),還未初始化好。
511? ?Network Authentication Required? 客戶端需要進(jìn)行身份驗(yàn)證才能獲得網(wǎng)絡(luò)訪問(wèn)權(quán)限。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-695422.html
到了這里,關(guān)于會(huì)話跟蹤技術(shù)學(xué)習(xí)筆記(Cookie+Session)+ HTTP學(xué)習(xí)筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!