日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java-Web HTTP协议

發(fā)布時(shí)間:2025/3/20 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java-Web HTTP协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、HTTP概述

????????HTTP(hypertext transport protocol),即超文本傳輸協(xié)議。這個(gè)協(xié)議詳細(xì)規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間互相通信的規(guī)則。

????????HTTP就是一個(gè)通信規(guī)則,通信規(guī)則規(guī)定了客戶端發(fā)送給服務(wù)器的內(nèi)容格式,也規(guī)定了服務(wù)器發(fā)送給客戶端的內(nèi)容格式??蛻舳税l(fā)送給服務(wù)器的格式叫“請求協(xié)議”;服務(wù)器發(fā)送給客戶端的格式叫“響應(yīng)協(xié)議”。

二、請求協(xié)議

????格式:

????????????????????請求首行;

????????????????????請求頭信息;

????????????????????空行;

????????????????????請求體。

????????瀏覽器發(fā)送給服務(wù)器的內(nèi)容就這個(gè)格式的,如果不是這個(gè)格式服務(wù)器將無法解讀!在HTTP協(xié)議中,請求有很多請求方法,其中最為常用的就是GETPOST。

? ? 1.GET請求
GET /hello/index.jsp HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98

GET /hello/index.jsp HTTP/1.1:GET請求,請求服務(wù)器路徑為/hello/index.jsp,協(xié)議為1.1;

Host:localhost:請求的主機(jī)名為localhost;

User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:與瀏覽器和OS相關(guān)的信息。有些網(wǎng)站會顯示用戶的系統(tǒng)版本和瀏覽器版本信息,這都是通過獲取User-Agent頭信息而來的;

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告訴服務(wù)器,當(dāng)前客戶端可以接收的文檔類型,其實(shí)這里包含了*/*,就表示什么都可以接收;

Accept-Language: zh-cn,zh;q=0.5:當(dāng)前客戶端支持的語言,可以在瀏覽器的工具選項(xiàng)中找到語言相關(guān)信息;

Accept-Encoding: gzip, deflate:支持的壓縮格式。數(shù)據(jù)在網(wǎng)絡(luò)上傳遞時(shí),可能服務(wù)器會把數(shù)據(jù)壓縮后再發(fā)送;

Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:客戶端支持的編碼;

Connection: keep-alive:客戶端支持的鏈接方式,保持一段時(shí)間鏈接,默認(rèn)為3000ms;

Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因?yàn)椴皇堑谝淮卧L問這個(gè)地址,所以會在請求中把上一次服務(wù)器響應(yīng)中發(fā)送過來的Cookie在請求中一并發(fā)送去過;這個(gè)Cookie的名字為JSESSIONID。

? ? 2.POST請求
<form action="" method="post">關(guān)鍵字:<input type="text" name="keyword"/><input type="submit" value="提交"/> </form> POST /hello/index.jsp HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Referer: http://localhost:8080/hello/index.jsp Accept-Language: zh-cn,en-US;q=0.5 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: localhost:8080 Content-Length: 13 Connection: Keep-Alive Cache-Control: no-cache Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D [請求頭,下面是空行] keyword=hello[請求體,上面是空行。]

POST請求是可以有體的,而GET請求不能有請求體。

Referer: http://localhost:8080/hello/index.jsp:請求來自哪個(gè)頁面,例如你在百度上點(diǎn)擊鏈接到了這里,那么請求頭為Referer:http://www.baidu.com;如果你是在瀏覽器的地址欄中直接輸入的地址,那么就沒有Referer這個(gè)請求頭了;

Content-Type: application/x-www-form-urlencoded:表單的數(shù)據(jù)類型,說明會使用url格式編碼數(shù)據(jù);url編碼的數(shù)據(jù)都是以“%”為前綴,后面跟隨兩位的16進(jìn)制,例如“傳智”這兩個(gè)字使用UTF-8的url編碼用為“%E4%BC%A0%E6%99%BA”;

Content-Length:13:請求體的長度,這里表示13個(gè)字節(jié)。

keyword=hello:請求體內(nèi)容!hello是在表單中輸入的數(shù)據(jù),keyword是表單字段的名字。

Referer請求頭是比較有用的一個(gè)請求頭,它可以用來做統(tǒng)計(jì)工作,也可以用來做防盜鏈。

? ? ? ? 統(tǒng)計(jì)工作:我公司網(wǎng)站在百度上做了廣告,但不知道在百度上做廣告對我們網(wǎng)站的訪問量是否有影響,那么可以對每個(gè)請求中的Referer進(jìn)行分析,如果Referer為百度的很多,那么說明用戶都是通過百度找到我們公司網(wǎng)站的。

????????防盜鏈:我公司網(wǎng)站上有一個(gè)下載鏈接,而其他網(wǎng)站盜鏈了這個(gè)地址,例如在我網(wǎng)站上的index.html頁面中有一個(gè)鏈接,點(diǎn)擊即可下載JDK7.0,但有某個(gè)人的微博中盜鏈了這個(gè)資源,它也有一個(gè)鏈接指向我們網(wǎng)站的JDK7.0,也就是說登錄它的微博,點(diǎn)擊鏈接就可以從我網(wǎng)站上下載JDK7.0,這導(dǎo)致我們網(wǎng)站的廣告沒有看,但下載的卻是我網(wǎng)站的資源。這時(shí)可以使用Referer進(jìn)行防盜鏈,在資源被下載之前,我們對Referer進(jìn)行判斷,如果請求來自本網(wǎng)站,那么允許下載,如果非本網(wǎng)站,先跳轉(zhuǎn)到本網(wǎng)站看廣告,然后再允許下載。

三、響應(yīng)協(xié)議

? ? 格式:

? ? ? ? ? ? ? ? ? ?響應(yīng)首行;

????????????????????響應(yīng)信息;

????????????????????空行;

????????????????????響應(yīng)體。

HTTP/1.1 200 OK[響應(yīng)首行] Server: Apache-Coyote/1.1 Content-Type: text/html;charset=UTF-8 Content-Length: 724 Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello Date: Wed, 25 Sep 2012 04:15:03 GMT [響應(yīng)頭][空行] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><base href="http://localhost:8080/hello/"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body> <form action="" method="post">關(guān)鍵字:<input type="text" name="keyword"/><input type="submit" value="提交"/> </form></body> </html>[響應(yīng)體] HTTP/1.1 200 OK:響應(yīng)協(xié)議為HTTP1.1,狀態(tài)碼為200,表示請求成功,OK是對狀態(tài)碼的解釋;
Server: Apache-Coyote/1.1:服務(wù)器的版本信息;
Content-Type: text/html;charset=UTF-8:響應(yīng)體使用的編碼為UTF-8;
Content-Length: 724:響應(yīng)體為724字節(jié);
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:響應(yīng)給客戶端的Cookie;

Date: Wed, 25 Sep 2012 04:15:03 GMT:響應(yīng)的時(shí)間,這可能會有8小時(shí)的時(shí)區(qū)差;

四、狀態(tài)碼

百度百科:HTTP狀態(tài)碼

?????HTTP狀態(tài)碼(HTTP Status Code)是用以表示網(wǎng)頁服務(wù)器HTTP響應(yīng)狀態(tài)的3位數(shù)字代碼。

????????200:請求成功,瀏覽器會把響應(yīng)體內(nèi)容(通常是html)顯示在瀏覽器中;
? ?? ? ?404:請求的資源沒有找到,說明客戶端錯誤的請求了不存在的資源;
? ?? ? ?500:請求資源找到了,但服務(wù)器內(nèi)部出現(xiàn)了錯誤;

? ?????302:重定向,當(dāng)響應(yīng)碼為302時(shí),表示服務(wù)器要求瀏覽器重新再發(fā)一個(gè)請求,服務(wù)器會發(fā)送一個(gè)響應(yīng)頭Location,它指定了新請求的URL地址;

????? ? 重定向原理:


????????304:當(dāng)用戶第一次請求index.html時(shí),服務(wù)器會添加一個(gè)名為Last-Modified響應(yīng)頭,這個(gè)頭說明了index.html的最后修改時(shí)間,瀏覽器會把index.html內(nèi)容,以及最后響應(yīng)時(shí)間緩存下來。當(dāng)用戶第二次請求index.html時(shí),在請求中包含一個(gè)名為If-Modified-Since請求頭,它的值就是第一次請求時(shí)服務(wù)器通過Last-Modified響應(yīng)頭發(fā)送給瀏覽器的值,即index.html最后的修改時(shí)間,If-Modified-Since請求頭就是在告訴服務(wù)器,我這里瀏覽器緩存的index.html最后修改時(shí)間是這個(gè),您看看現(xiàn)在的index.html最后修改時(shí)間是不是這個(gè),如果還是,那么您就不用再響應(yīng)這個(gè)index.html內(nèi)容了,我會把緩存的內(nèi)容直接顯示出來。而服務(wù)器端會獲取If-Modified-Since值,與index.html的當(dāng)前最后修改時(shí)間比對,如果相同,服務(wù)器會發(fā)響應(yīng)碼304,表示index.html與瀏覽器上次緩存的相同,無需再次發(fā)送,瀏覽器可以顯示自己的緩存頁面,如果比對不同,那么說明index.html已經(jīng)做了修改,服務(wù)器會響應(yīng)200。


????????響應(yīng)頭:
????????????Last-Modified:最后的修改時(shí)間;
????????請求頭:
????????????If-Modified-Since:把上次請求的index.html的最后修改時(shí)間還給服務(wù)器;

????????????狀態(tài)碼:304,比較If-Modified-Since的時(shí)間與文件真實(shí)的時(shí)間一樣時(shí),服務(wù)器會響應(yīng)304,而且不會有響正文,表示瀏覽器緩存的就是最新版本!

五、HTML中指定響應(yīng)頭

????????在HTMl頁面中可以使用<meta http-equiv="" content="">來指定響應(yīng)頭,例如在index.html頁面中給出<meta http-equiv="Refresh" content="3;url=http://www.baidu.com">,表示瀏覽器只會顯示index.html頁面3秒,然后自動跳轉(zhuǎn)到http://www.baidu.com。

總結(jié)

以上是生活随笔為你收集整理的Java-Web HTTP协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。