標籤:
1.DDoS攻擊原理
DDoS是指分散式阻斷服務(Distributed Denial of Service):試圖通過惡意請求使系統或者網路超載進而無法繼續提供服務。對於一個網站來說,這意味著,該網站將無法載入,使用者無法進行交易,查看內容或者登入賬戶。對於網路來說,DDoS攻擊導致頻寬飽和甚至淹沒網路設施,對整個網路的使用者造成大面積中斷。慢慢地,一對一的DoS攻擊形態已慢慢淡出,取而代之的是DDoS攻擊,其原理就是一次尋找幾百台/幾千台或幾萬台電腦,同時對受害者的伺服器或電腦發動聯合大攻擊,這樣就算是再強勁,面對如此規模的攻擊,仍無招架之力。
2.TCP串連有哪些狀態
LISTEN:偵聽來自遠方的TCP連接埠的串連請求
SYN-SENT:在發送串連請求後等待匹配的串連請求(用戶端狀態)。用戶端嘗試連結服務端,通過open方法
SYN-RECEIVED:在收到和發送一個串連請求後等待對方對串連請求的確認(服務端狀態)。服務接受建立請求的SYN後,也就是TCP三向交握中的第2步,發送ACK資料包之前
ESTABLISHED:代表一個開啟的串連。用戶端接受到服務端的ACK包後的狀態,服務端在發出ACK在一定時間後即為ESTABLISHED
FIN-WAIT-1:等待遠程TCP串連插斷要求,或先前的串連插斷要求的確認。主動關閉的一方,在發出FIN請求之後,也就是在TCP四次握手的第1步
FIN-WAIT-2:從遠程TCP等待串連插斷要求。主動關閉的一方,在接受到被動關閉一方的ACK後,也就是TCP四次握手的第2步
CLOSE-WAIT:等待從本機使用者發來的串連插斷要求。被動關閉的一方,在接受到用戶端的FIN後,也就是在TCP四次握手的第2步
CLOSING:等待遠程TCP對串連中斷的確認
LAST-ACK:等待原來的發向遠程TCP的串連插斷要求的確認。被動關閉的一方,在發送ACK後一段時間後(確保用戶端已收到),再發起一個FIN請求。也就是TCP四次握手的第3步
TIME-WAIT:等待足夠的時間以確保遠程TCP接收到串連插斷要求的確認。主動關閉的一方,在收到被動關閉的FIN包後,發送ACK。也就是TCP四次握手的第4步
CLOSED:沒有任何串連狀態
3.HTTP/1.0 vs HTTP/1.1中Keep-Alive的作用
Keep-Alive就是我們通常所說的長串連,他可以減少我們tcp連結的開銷,加快網站的載入速度。在HTTP1.0及各種加強版中,需要在request中增加”Connection: keep-alive“ header才能夠支援,而在HTTP1.1中是預設開啟的。
4.HTTPS的原理
https是基於安全目的的Http通道,其安全基礎由SSL層來保證。最初由netscape公司研發,主要提供了通訊雙方的身份認證和加密通訊方法。現在廣泛應用於互連網上安全敏感通訊。 http和https區別:
(1) 協議基礎不同:Https在Http下加入了SSL層,
(2)通訊方式不同:Https在資料通訊之前需要用戶端、伺服器進行握手(身份認證),建立串連後,傳輸資料經過加密,通訊連接埠443。
SSL協議基礎
SSL協議位於TCP/IP協議與各種應用程式層協議之間,本身又分為兩層:
SSL記錄協議(SSL Record Protocol):建立在可靠傳輸層協議(TCP)之上,為上層協議提供資料封裝、壓縮、加密等準系統。
SSL握手協議(SSL Handshake Procotol):在SSL記錄協議之上,用於實際資料轉送前,通訊雙方進行身份認證、協商密碼編譯演算法、交換加密金鑰等。
5.如何對HTTP資料進行gzip壓縮
gzip是一種資料壓縮格式,預設且目前僅使用deflate演算法壓縮data部分;deflate是一種壓縮演算法,是huffman編碼的一種加強,他能更加有效節約頻寬流量。他先把文本壓縮為.gz然後傳輸給瀏覽器,最後由瀏覽器負責解壓縮呈現給使用者,其大致過程如下:
(1)首先瀏覽器請求某個URL 地址,並在請求的頭 (head) 中設定屬性accept-encoding值為gzip、deflate,表明瀏覽器支援gzip和deflate這兩種壓縮方式。
(2)WEB伺服器接收到請求後判斷瀏覽器是否支援壓縮,如果支援就傳送壓縮後的響應內容,否則傳送不經過壓縮的內容;
(3)瀏覽器擷取響應內容後,判斷內容是否被壓縮,如果是則解壓縮,然後顯示響應頁面的內容。
servlet中的實現
String data = "abcdabcdabcdabcdabcdabcdab"
System.out.println("未經處理資料的大小為:" + data.getBytes().length);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
GZIPOutputStream gout = new GZIPOutputStream(bout); //buffer
gout.write(data.getBytes());
gout.close();
//得到壓縮後的資料
byte g[] = bout.toByteArray();
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Length",g.length +"");
response.getOutputStream().write(g);
資料量過小時可能會發生壓縮後更大的情況
6.Cookie的Domain, Path, Expires什麼作用
Expires – 到期時間。指定cookie的生命期。具體是值是到期日期。如果想讓cookie的存在期限超過當前瀏覽器會話時間,就必須使用這個屬性。當過了到期日時,瀏覽器就可以刪除cookie檔案,沒有任何影響。
Path – 路徑。指定與cookie關聯的WEB頁。值可以是一個目錄,或者是一個路徑。如果http://www.zdnet.com/devhead/index.html 建立了一個cookie,那麼在http://www.zdnet.com/devhead/目錄裡的所有頁面,以及該目錄下面任何子目錄裡的頁面都可以訪問這個cookie。這就是說,在http://www.zdnet.com/devhead/stories/articles 裡的任何頁面都可以訪問http://www.zdnet.com/devhead/index.html建立的cookie。但是,如果http://www.zdnet.com/zdnn/ 需要訪問http://www.zdnet.com/devhead/index.html設定的cookes,該怎麼辦?這時,我們要把cookies的path屬性設定成“/”。在指定路徑的時候,凡是來自同一伺服器,URL裡有相同路徑的所有WEB頁面都可以共用cookies。現在看另一個例子:如果想讓 http://www.zdnet.com/devhead/filters/ 和http://www.zdnet.com/devhead/stories/共用cookies,就要把path設成“/devhead”。
Domain – 域。指定關聯的WEB伺服器或域。值是網域名稱,比如zdnet.com。這是對path路徑屬性的一個延伸。如果我們想讓catalog.mycompany.com 能夠訪問shoppingcart.mycompany.com設定的cookies,該怎麼辦? 我們可以把domain屬性設定成“mycompany.com”,並把path屬性設定成“/”。FYI:不能把cookies域屬性設定成與設定它的伺服器的所在域不同的值
7.瀏覽器如何快取檔案
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
Expires策略
Expires是Web伺服器響應訊息頭欄位,在響應http請求時告訴瀏覽器在到期時間前瀏覽器可以直接從瀏覽器緩衝取資料,而無需再次請求。
Cache-control策略
Cache-Control與Expires的作用一致,都是指明當前資源的有效期間,控制瀏覽器是否直接從瀏覽器緩衝取資料還是重新發請求到伺服器取資料。只不過Cache-Control的選擇更多,設定更細緻,如果同時
設定的話,其優先順序高於Expires。
javaweb作業中的幾個要點