HTTP協(xié)議


HTTP(hypertext transfer protocol)協(xié)議是一種用于瀏覽器和服務(wù)端端之間傳輸數(shù)據(jù)的應(yīng)用層協(xié)議撤卢,它規(guī)定了瀏覽器和服務(wù)端之間的格式傳輸規(guī)范。

一钦奋、HTTP協(xié)議內(nèi)容

下面是瀏覽器和服務(wù)器之間傳輸?shù)臄?shù)據(jù)再扭,我們來簡要介紹這些數(shù)據(jù)的含義骗污。
瀏覽器->服務(wù)器請求:

GET /day09/hello HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

this is client!

服務(wù)器->瀏覽器 響應(yīng):

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT

this is hello servlet!!!

二着撩、HTTP請求

GET /day09/hello HTTP/1.1 -請求行
Host: localhost:8080 --請求頭(多個(gè)key-value對(duì)象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
--一個(gè)空行
name=eric&password=123456 --(可選)實(shí)體內(nèi)容

1.請求行

GET /day09/hello HTTP/1.1

POST /day09/hello HTTP/1.1

請求方式:GET
GET是一種向服務(wù)器請求WEB資源的請求方式诅福,常見的請求方式還有:
GET, POST, HEAD, TRACE, PUT, CONNECT, DELETE

POST和GET方式提交的區(qū)別:

GET方式 POST方式
用GET方式提交的時(shí)候用戶提交的請求參數(shù)會(huì)直接附在URI后面 用POST方式提交數(shù)據(jù)時(shí)用戶的請求參數(shù)在請求的實(shí)體內(nèi)容中
GET方式提交不能超過1kb 大小沒有限制
不適合用于提交敏感數(shù)據(jù) 可用來提交敏感數(shù)據(jù)

url統(tǒng)一資源標(biāo)記符:/day09/hello
uri統(tǒng)一資源標(biāo)記符+請求行內(nèi)的"/day09/hello"就組成了URL統(tǒng)一資源標(biāo)記符,唯一的標(biāo)記了互聯(lián)網(wǎng)上的一個(gè)資源睹酌。

HTTP協(xié)議版本:HTTP/1.1
http1.0:當(dāng)前瀏覽器客戶端與服務(wù)器端建立連接之后权谁,只能發(fā)送一次請求剩檀,一次請求之后連接關(guān)閉憋沿。
http1.1:當(dāng)前瀏覽器客戶端與服務(wù)器端建立連接之后,可以在一次連接中發(fā)送多次請求沪猴。(基本都使用1.1)

2.請求頭

Host: localhost:8080 --請求頭(多個(gè)key-value對(duì)象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

一些鍵值對(duì),包含了多個(gè)key-value對(duì)象,描述了瀏覽器和服務(wù)器之間傳輸數(shù)據(jù)所需要的信息辐啄,下面是一些常見的請求頭:

Accept: text/html,image/* -- 瀏覽器接受的數(shù)據(jù)類型
Accept-Charset: ISO-8859-1 -- 瀏覽器接受的編碼格式
Accept-Encoding: gzip,compress --瀏覽器接受的數(shù)據(jù)壓縮格式
Accept-Language: en-us,zh- --瀏覽器接受的語言
Host: www.it315.org:80 --(必須的)當(dāng)前請求訪問的目標(biāo)地址(主機(jī):端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --瀏覽器最后的緩存時(shí)間
Referer: http://www.it315.org/index.jsp -- 當(dāng)前請求來自于哪里
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --瀏覽器類型
Cookie:name=eric -- 瀏覽器保存的cookie信息
Connection: close/Keep-Alive -- 瀏覽器跟服務(wù)器連接狀態(tài)采章。close: 連接關(guān)閉 keep-alive:保存連接。
Date: Tue, 11 Jul 2000 18:23:51 GMT -- 請求發(fā)出的時(shí)間

3.實(shí)體內(nèi)容

只有POST提交的參數(shù)會(huì)放到實(shí)體內(nèi)容中

4.HttpServletRequest對(duì)象

HttpServletRequest對(duì)象封裝了瀏覽器發(fā)來的請求信息壶辜,可以通過這個(gè)對(duì)象獲取請求數(shù)據(jù)悯舟。

核心的API:
請求行:
request.getMethod(); //請求方式
request.getRequetURI() / request.getRequetURL() //請求資源
request.getProtocol() //請求http協(xié)議版本

請求頭:
request.getHeader("名稱") //根據(jù)請求頭獲取請求值
request.getHeaderNames() //獲取所有的請求頭名稱

實(shí)體內(nèi)容:
equest.getInputStream() // 獲取實(shí)體內(nèi)容數(shù)據(jù)

傳遞的請求參數(shù)(如用戶提交的表單信息):
request.getParameter("參數(shù)名"); 根據(jù)參數(shù)名獲取參數(shù)值(注意,只能獲取一個(gè)值的參數(shù))
request.getParameterValue("參數(shù)名“)砸民;根據(jù)參數(shù)名獲取參數(shù)值(可以獲取多個(gè)值的參數(shù))
request.getParameterNames(); 獲取所有參數(shù)名稱列表

請求參數(shù)的編碼問題:
在接受中文請求參數(shù)時(shí)抵怎,為了防止出現(xiàn)亂碼問題可以提前設(shè)定請求參數(shù)編碼,
修改POST方式參數(shù)編碼:
request.setCharacterEncoding("utf-8");
修改GET方式參數(shù)編碼:
手動(dòng)解碼:String name = new String(name.getBytes("iso-8859-1"),"utf-8");

三、HTTP響應(yīng)

HTTP/1.1 200 OK --響應(yīng)行
Server: Apache-Coyote/1.1 --響應(yīng)頭(key-vaule)
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT
--一個(gè)空行
this is hello servlet!!! --實(shí)體內(nèi)容

1.響應(yīng)行

HTTP/1.1 200 OK

HTTP/1.1 是HTTP協(xié)議版本

200 是服務(wù)器處理結(jié)果,以下是常見的服務(wù)器狀態(tài)碼

常見的狀態(tài):
200 : 表示請求處理完成并完美返回
302: 表示請求需要進(jìn)一步細(xì)化岭参。
404: 表示客戶訪問的資源找不到反惕。
500: 表示服務(wù)器的資源發(fā)送錯(cuò)誤。(服務(wù)器內(nèi)部錯(cuò)誤)
OK 是對(duì)服務(wù)器處理狀態(tài)的描述

2.響應(yīng)頭

用于傳輸和瀏覽器交互時(shí)的一些信息演侯,以下是一些常見的響應(yīng)頭:

Location: http://www.it315.org/index.jsp -表示重定向的地址姿染,該頭和302的狀態(tài)碼一起使用。
Server:apache tomcat ---表示服務(wù)器的類型
Content-Encoding: gzip -- 表示服務(wù)器發(fā)送給瀏覽器的數(shù)據(jù)壓縮類型
Content-Length: 80 --表示服務(wù)器發(fā)送給瀏覽器的數(shù)據(jù)長度
Content-Language: zh-cn --表示服務(wù)器支持的語言
Content-Type: text/html; charset=GB2312 --表示服務(wù)器發(fā)送給瀏覽器的數(shù)據(jù)類型及內(nèi)容編碼
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --表示服務(wù)器資源的最后修改時(shí)間
Refresh: 1;url=http://www.it315.org --表示定時(shí)刷新
Content-Disposition: attachment; filename=aaa.zip --表示告訴瀏覽器以下載方式打開資源(下載文件時(shí)用到)
Transfer-Encoding: chunked
Set-Cookie:SS=Q0=5Lb_nQ; path=/search --表示服務(wù)器發(fā)送給瀏覽器的cookie信息(會(huì)話管理用到)
Expires: -1 --表示通知瀏覽器不進(jìn)行緩存
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive --表示服務(wù)器和瀏覽器的連接狀態(tài)秒际。close:關(guān)閉連接 keep-alive:保存連接

3.HttpServletResponse對(duì)象

可以用來修改響應(yīng)信息:

響應(yīng)行:
response.setStatus() 設(shè)置狀態(tài)碼
響應(yīng)頭:
response.setHeader("name","value") 設(shè)置響應(yīng)頭
實(shí)體內(nèi)容:
response.getWriter().writer(); 發(fā)送字符實(shí)體內(nèi)容
response.getOutputStream().writer() 發(fā)送字節(jié)實(shí)體內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悬赏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子娄徊,更是在濱河造成了極大的恐慌闽颇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寄锐,死亡現(xiàn)場離奇詭異进萄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锐峭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門中鼠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沿癞,你說我怎么就攤上這事援雇。” “怎么了椎扬?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵惫搏,是天一觀的道長。 經(jīng)常有香客問我蚕涤,道長筐赔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任揖铜,我火速辦了婚禮茴丰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己贿肩,他們只是感情好峦椰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著汰规,像睡著了一般汤功。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溜哮,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天滔金,我揣著相機(jī)與錄音,去河邊找鬼茂嗓。 笑死鹦蠕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的在抛。 我是一名探鬼主播钟病,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刚梭!你這毒婦竟也來了肠阱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤朴读,失蹤者是張志新(化名)和其女友劉穎屹徘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衅金,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡噪伊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氮唯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鉴吹。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惩琉,靈堂內(nèi)的尸體忽然破棺而出豆励,到底是詐尸還是另有隱情,我是刑警寧澤瞒渠,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布良蒸,位于F島的核電站,受9級(jí)特大地震影響伍玖,放射性物質(zhì)發(fā)生泄漏嫩痰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一窍箍、第九天 我趴在偏房一處隱蔽的房頂上張望串纺。 院中可真熱鬧丽旅,春花似錦、人聲如沸造垛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽五辽。三九已至,卻和暖如春外恕,著一層夾襖步出監(jiān)牢的瞬間杆逗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工鳞疲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罪郊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓尚洽,卻偏偏與公主長得像悔橄,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腺毫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容