web開發學習筆記二 http協議

2021-07-25 20:51:50 字數 3051 閱讀 2852

http協議:當使用瀏覽器上網時,每個操作都是瀏覽器向伺服器傳送請求資訊,

伺服器也會對每個請求發出相應的響應資訊,就是返回的頁面等..

一、請求:

請求包含 請求行 和 多個請求頭

請求行:一般是顯示所使用的請求方式 和 http協議版本 

請求方式常用的倆鐘 get 和 post

倆鐘請求的區別

以下 get 簡寫為g   post簡寫為p

1.g方式提交,url會跟上引數資料,已?開頭,多個引數之間以&分割

p方式提交,url不會跟上引數資料,資料會跟在請求的實體內容中,以&分割

2.g方式提交引數資料有限制,不超過1kb

p方式提交沒有限制

總結:當填寫註冊資訊等表單時,不適合使用g方式,因為內容會跟在url後面不安全

可以使用p方式提交表單,安全。

注意:瀏覽器直接訪問的請求,預設提交方式是get。

只有使用p方式提交請求才會帶有實體內容,g方式沒有。

一般瀏覽器發出請求都會帶有多個請求頭(key,value),

請求頭的作用是:

告訴伺服器該瀏覽器接受什麼引數型別以及描述請求的**,資訊等等...

我們可以過 servlet程式中的 httpservletrequest物件來獲取、解析這些請求資訊。

-- 請求行相關

request.getmethod();     //獲取請求方式,get或post...

request.getrequesturl(); // 獲取請求的url

request.getprotocol();   // 獲取請求的版本協議

-- 請求頭相關

request.getheader("host"); //根據請求頭的名稱獲取請求頭的值

request.getheadernames();  //獲取所有請求頭的名稱,返回乙個enumeration集合

-- 獲取引數內容(post提交的引數都存放在實體內容中)

request.getquerystring(); //get方式獲取引數內容

request.getinputstream(); // 得到實體內容,返回的是乙個輸入流。post用

倆種方式不通用,推薦使用通用的方法,如下

request.getparameternames(); // 獲取所有的引數名稱列表,返回乙個enumeration集合

request.getparameter();

//根據引數名得到引數值(只能獲取乙個值的引數)

request.getparametervalue(); //根據引數名得到引數值,可以獲取多個值得引數,表單中可能含有複選引數

-- 編碼問題

servlet 是執行在 伺服器的。

由於tomcat伺服器內部的編碼格式是 iso-8859-1。

當 瀏覽器的請求傳送過來時,我們通過 servlet 獲取請求引數時,

引數會在 tomcat中重新編碼再返回給我們,這時就出現了編碼問題。

可以設定所獲取的請求的編碼格式,

request.setcharacterencoding("utf-8");

該方法只能對請求實體內容的資料編碼起作用。post提交的資料在實體內容中,

所以該方法對post方法有效! get方法的引數放在uri後面,所以對get方式無效

所以對於get方式提交的引數,需要重新編碼

name = new string(name.getbytes("iso-8859-1"),"utf-8");

同理,當伺服器對瀏覽器發出響應資訊時,也存在編碼問題。

設定伺服器響應給瀏覽器資訊時所使用的編碼

response.setcontenttype("text/html;charset=utf-8");

二、響應

響應資訊包含 響應行和 多個響應頭

響應行:一般是 http版本協議 + 狀態碼

狀態碼:伺服器處理請求的結果(狀態)

常見的狀態:

200 :  表示請求處理完成並完美返回

302:   表示請求需要進一步細化。

404:   表示客戶訪問的資源找不到。

500:   表示伺服器的資源傳送錯誤。(伺服器內部錯誤)

響應頭:響應的內容包括訊息協議的版本,成功或者錯誤編碼加上包含伺服器資訊、實 體元資訊以及可能的實體內容。

我們可以過 servlet程式中的 httpservletresponse物件來修改響應資訊

-- 響應行相關

response.setstatus(404); //修改狀態碼

response.senderror(404); // 傳送404的狀態碼+404的錯誤頁面

--響應頭相關

response.setheader("響應頭","值");

--實體內容相關

response.getwriter().write("內容");

//字元方式

response.getoutputstream().write("內容".getbytes());//位元組方式

通過響應可以實現 重定向功能。

1,傳送乙個302狀態碼,

2,再傳送乙個 location 響應頭,

**如下:

response.setstatus(302);

response.setheader("location","/test/demo.html");

可簡寫為:

response.sendredirect("/test/demo.html");

content-type

告訴瀏覽器用資料型別及內容編碼來解析

設定響應的資料型別及編碼

response.setheader("content-type","text/html");

可簡化為

response.setcontenttype("text/html");

本人只是作為初學者的學習總結,可能對於同為初學者有所幫助,

如若想深入學習,請另外查閱相應文章。

Web前端開發學習筆記(二)

homework2 1.display屬性的block,inline block,inline值的區分 其實真正需要區分的是inline block和inline。都是在同一行內,怎麼區分他們呢?首先要明白塊元素和行內元素很重要的一點區別 塊元素的高度和寬度我們都是可以控制的,而行內元素是不可以的。...

應用層學習筆記二 Web和HTTP

http hypertext transfer protocal 超文字傳輸協議 http由兩個程式實現 乙個客戶端程式和乙個伺服器程式,執行在不同的端系統中,通過交換http報文進行會話。http定義了報文結構和報文交換的方式。一些術語 web瀏覽器 實現了http的客戶端 web伺服器 實現了h...

HTTP學習筆記(二)

一 uri和url的區別 uri unifrom resource identifier 統一資源標誌符。url unifrom resource locator 統一資源定位符。rfc2396對3個單詞的定義 unifrom 規定統一的格式可方便處理多種不同型別的資源。如ftp http reso...