1.http協(xié)議
1.1 概念
是對瀏覽器和服務器端數(shù)據(jù)傳輸格式的規(guī)范!
1.2 http協(xié)議內(nèi)容
- 請求
- 響應
2.http請求
2.1 請求行
GET /day08/first HTTP/1.1
http協(xié)議版本:http1.0: 當瀏覽器和服務器連接之后,在一次連接中只能發(fā)出一個請求;
http1.1:當瀏覽器和服務器連接之后,在一次連接中可以發(fā)出多次請求。(效率比1.0更高);
請求資源:請求服務器的哪個資源文件
/day08/first : URI: 統(tǒng)一資源描述符。可以描述任何文件,本地,互聯(lián)網(wǎng);
http://localhsot:8080/day08/first:URL : 統(tǒng)一資源定位符,互聯(lián)網(wǎng)(基于http協(xié)議) ,是URI的子集。
請求方式(提交方式):
http協(xié)議中的請求方式:GET、POST、HEAD、PUT、CONNECT。。。。
最常用的的請求方式: GET 和 POST
2.2 請求頭
2.3 案例- user-agent頭 -- 獲取瀏覽器類型
2.4 案例- referer頭 --- 防止非法鏈接
第一次:下載資源 - > 下載頁面 -> 打開廣告頁面(下載鏈接) -> 開始下載
第二次:直接點擊下載鏈接 -> 跳轉(zhuǎn)廣告頁面(下載鏈接) -> 開始下載
非法請求:
1)直接訪問下載資源
2)不是從廣告頁面過來的請求
住:referer請求頭只有從超鏈接過來的請求才有這個頭**
2.5 獲取參數(shù)數(shù)據(jù)
get: 放在請求行的URI后面
post: 放在請求的實體內(nèi)容
原生 HttpServlet
reuqest.getParameter("name") 獲取一個值的參數(shù)
request.getParameterValue("name") 獲取多個值的參數(shù)
request.getParameterNames() 獲取所有參數(shù)名稱
request.getParameterMap() 獲取所有參數(shù)對象
解決get亂碼問題:手動解碼
if("GET".equals(request.getMethod())){
name = new String(name.getBytes("iso-8859-1"),"utf-8");
}
解決post亂碼問題:
request.setCharacterEncoding("utf-8");
3.Http響應
3.1 響應行
狀態(tài)碼:當前服務器處理請求的狀態(tài)(結果)
常見的狀態(tài)碼:
302: 需要瀏覽器進一步請求,才能完成。
404: 瀏覽器端的錯誤。沒有找到資源。
500: 服務器端的錯誤。