一、位運算符:html
二、輸入輸出流java
/**
* 文件讀寫
*/
static class FilrWrite{
/**
* 字節流讀取文件
*/
public static void InputStream() throws Exception {
File file = new File("E:\\aaa.txt");
InputStream inputStream = new FileInputStream(file);
int k;
StringBuffer str = new StringBuffer();
byte[] bytes = new byte[inputStream.available()];
if((k = inputStream.read(bytes)) != -1){
str = str.append(new String(bytes));
}
inputStream.close();
System.out.println(str);
}
/**
* 字節流寫入文件
*/
public static void OuputStream() throws Exception {
File file = new File("E:\\aaa.txt");
OutputStream outputStream = new FileOutputStream(file);
String text = "明天也是晴天";
outputStream.write(text.getBytes());
outputStream.close();
InputStream();
}
/**
* 字符流讀取文件
*/
public static void FileReader() throws Exception {
File file = new File("E:\\aaa.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer str = new StringBuffer();
String temp = "";
while ((temp = bufferedReader.readLine()) != null){
str = str.append(temp);
}
fileReader.close();
bufferedReader.close();
System.out.println(str);
}
/**
* 字符流寫入文件
*/
public static void FileWriter() throws Exception {
File file = new File("E:\\aaa.txt");
FileWriter writer = new FileWriter(file);
String text = "後天會更好";
writer.write(text);
writer.flush();//寫入
writer.close();//在關閉字符流時會強制性地將緩衝區中的內容進行輸出
FileReader();
}
public static void main(String[] args) throws Exception {
// InputStream();
// OuputStream();
// FileReader();
FileWriter();
}
}
複製代碼
三、重寫、重載web
四、多態算法
五、抽象類數據庫
六、接口編程
七、序列化瀏覽器
八、多線程緩存
實現方式:安全
一、實現Runnable接口bash
二、繼承Thread類重寫run方法
三、經過 Callable 和 Future 建立線程
四、線程池 ThreadPoolExecutor
九、錯誤和異常的區別(Error vs Exception)
Java異常的基類爲java.lang.Throwable,java.lang.Error和java.lang.Exception繼承 Throwable,RuntimeException和其它的Exception等繼承Exception
1)
2)
若是沒有異常出現,並且finally語句中沒有return,則會執行try裏邊的return,而且,會將變量暫存起來(對象存的是引用的地址),再去執行finally中的語句,這時候,若是返回值是基本數據類型或者字符串,則finally至關於更改副本,不會對暫存值有影響;可是,若是返回值是對象,則finally中的語句,仍會根據地址的副本,改變原對象的值
十、常見集合類關係圖
十一、八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型
十二、建立對象的四種方式
public static void main(String[] args) throws Exception {
//todo 建立對象的四種方式
//一、使用new關鍵字
Book book1 = new Book();
System.out.println(book1);
//二、使用反射機制
//使用Class類的newInstance方法
Book book2 = (Book) Class.forName("com.test.entity.Book").newInstance();
System.out.println(book2);
Book book3 = Book.class.newInstance();
System.out.println(book3);
//使用Constructor類的newInstance方法
Constructor<Book> constructor = Book.class.getConstructor();
Book book4 = constructor.newInstance();
System.out.println(book4);
//三、使用clone方法
//不管什麼時候咱們調用一個對象的clone方法,jvm就會建立一個新的對象,將前面對象的內容所有拷貝進去。用clone方法建立對象並不會調用任何構造函數。
//要使用clone方法,咱們須要先實現Cloneable接口並實現其定義的clone方法。
Book book5 = (Book) book4.clone();
System.out.println(book5);
System.out.println("原對象與克隆對象是否相同:"+(book4 == book5));
//四、用對象流來實現 前提是對象必須實現 Serializable
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
new FileOutputStream(filename));
objectOutputStream.writeObject(book5);
ObjectInput input=new ObjectInputStream(new FileInputStream(filename));
Book book6 = (Book) input.readObject();
System.out.println(filename);
System.out.println(book6);
System.out.println("原對象與複製對象是否相同:"+(book6 == book5));
}
private static String filename = Book.class.getResource("").getPath()
+ "/obj.txt";
static File file = new File(filename);
static {
if (!file.exists())
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
複製代碼
1三、加密算法
1四、Spring 數據庫鏈接等配置加密
地址:
複製代碼
1五、靜態語句塊、構造語句塊(就是隻有大括號的那塊)以及構造函數的執行順序
對象的初始化順序:
(1)類加載以後,按從上到下(從父類到子類),從前到後執行被static修飾的語句或靜態屬性,而後執行普通屬性初始化。
(2)若是有語句new了自身的對象,將從上到下執行構造代碼塊、構造器(二者能夠說綁定在一塊兒)。
(3)static初始化塊不能訪問非statci成員,也不能調用非static方法,而且只在類加載時執行一次。
static class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{
System.out.println("I'm A class");
}
static {
System.out.println("static A");
}
}
static class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{
System.out.println("I'm B class");
}
static {
System.out.println("static B");
}
public static void main(String[] args) {
new HelloB();
new HelloB();
}
}
複製代碼
結果:
static修飾的語句 --> 構造代碼塊 --> 構造器
最終結論:
1.父類靜態屬性或靜態代碼塊
2.子類靜態屬性或靜態代碼塊
3.父類屬性初始化
4.父類構造代碼塊
5.父類構造函數
6.子類屬性初始化
7.子類構造代碼塊
8.子類構造函數
複製代碼
例子:
static class Dervied extends Base {
private String name1 = "dervied";
public Dervied() {
tellName();
printName();
}
public void tellName() {
System.out.println("Dervied tell name: " + name1);
}
public void printName() {
System.out.println("Dervied print name: " + name1);
}
public static void main(String[] args){
new Dervied();
}
static {
System.out.println("Dervied static");
}
}
static class Base {
static {
System.out.println("Base static");
}
private static String value = "base";
private String name = "base";
public Base() {
tellName();
printName();
}
public void tellName() {
System.out.println("Base tell name: " + name);
}
public void printName() {
System.out.println("Base print name: " + name);
}
}
複製代碼
運行結果
1六、多個catch語句塊的異常捕獲順序
把子類放前面,由於子類的異常信息比父類更詳細,父類放在前面編譯報錯
try {
throw new FileNotFoundException();
} catch (FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (IOException ex) {
System.out.print("IOException!");
} catch (Exception ex) {
System.out.print("Exception!");
}
複製代碼
1七、java中(基本類型或對象)全局變量和局部變量的賦值方式不一樣。全局變量主動初始化,基本類型爲0,引用類型爲null。局部變量須要手動初始化
1八、switch、case 不加break從匹配等到開始,後面的都執行
public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
//break;
case 2:
result = result + i * 2;
//break;
case 3:
result = result + i * 3;
//break;
}
return result;
}
複製代碼
輸入2,不加break 返回10 , 加break返回4
1九、網絡協議
OSI參考模型,下面是協議層從底層至頂層的一個模型圖:
OSI參考模型中每一個分層的做用:
應用層 : 爲應用程序提供服務並規定應用程序中通訊相關的細節
一、超文本傳輸協議HTTP
二、文件傳送協議FTP
三、DNS域名解析協議
四、DHCP動態主機配置協議
複製代碼
表示層:將應用處理的信息轉換爲適合網絡傳輸的格式,或未來自下一層的數據轉換爲上層可以處理的格式;主要負責數據格式的轉換,確保一個系統的應用層信息可被另外一個系統應用層讀取 具體來講,就是將設備固有的數據格式轉換爲網絡標準傳輸格式,不一樣設備對同一比特流解釋的結果可能會不一樣;所以,主要負責使它們保持一致
會話層:負責創建和斷開通訊鏈接(數據流動的邏輯通路),記憶數據的分隔等數據傳輸相關的管理
傳輸層:只在通訊雙方的節點上(好比計算機終端)進行處理,而無需在路由器上處理,傳輸層是OSI中最重要、最關鍵的一層,是惟一負責整體的數據傳輸和數據控制的一層;傳輸層提供端到端的交換數據的機制,檢查分組編號與次序,傳輸層對其上三層如會話層等,提供可靠的傳輸服務,對網絡層提供可靠的目的地站點信息主要功能 包括的協議以下:
一、TCP:傳輸控制協議,傳輸效率低,可靠性強
二、UDP:用戶數據報協議,適用於傳輸可靠性要求不高,數據量小的數據(好比QQ)
三、DCCP、SCTP、RTP、RSVP、PPTP等協議
複製代碼
網絡層:將數據傳輸到目標地址;目標地址可使多個網絡經過路由器鏈接而成的某一個地址,主要負責尋找地址和路由選擇,網絡層還能夠實現擁塞控制、網際互連等功能 在這一層,數據的單位稱爲數據包(packet) 網絡層協議的表明包括:IP、IPX、RIP、OSPF等
數據鏈路層:負責物理層面上的互聯的、節點間的通訊傳輸(例如一個以太網項鍊的2個節點之間的通訊);該層的做用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。 在這一層,數據的單位稱爲幀(frame) 數據鏈路層協議的表明包括:ARP、RARP、SDLC、HDLC、PPP、STP、幀中繼等
物理層:負責0、1 比特流(0/1序列)與電壓的高低、逛的閃滅之間的轉換 規定了激活、維持、關閉通訊端點之間的機械特性、電氣特性、功能特性以及過程特性;該層爲上層協議提供了一個傳輸數據的物理媒體。只是說明標準 在這一層,數據的單位稱爲比特(bit) 屬於物理層定義的典型規範表明包括:EIA/TIA RS-23二、EIA/TIA RS-44九、V.3五、RJ-4五、fddi令牌環網等
HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,通過幾年的使用與發展,獲得不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工做正在進行之中,並且HTTP-NG(Next Generation of HTTP)的建議已經提出。
HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。
HTTP之URL
HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。URL是一種特殊類型的URI,包含了用於查找某個資源的足夠的信息
URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是互聯網上用來標識某一處資源的地址。如下面這個URL爲例,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
複製代碼
從上面的URL能夠看出,一個完整的URL包括如下幾部分:
1.協議部分:該URL的協議部分爲「http:」,這表明網頁使用的是HTTP協議。在Internet中可使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的「//」爲分隔符
2.域名部分:該URL的域名部分爲「www.aspxfans.com」。一個URL中,也可使用IP地址做爲域名使用
3.端口部分:跟在域名後面的是端口,域名和端口之間使用「:」做爲分隔符。端口不是一個URL必須的部分,若是省略端口部分,將採用默認端口
4.虛擬目錄部分:從域名後的第一個「/」開始到最後一個「/」爲止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是「/news/」
5.文件名部分:從域名後的最後一個「/」開始到「?」爲止,是文件名部分,若是沒有「?」,則是從域名後的最後一個「/」開始到「#」爲止,是文件部分,若是沒有「?」和「#」,那麼從域名後的最後一個「/」開始到結束,都是文件名部分。本例中的文件名是「index.asp」。文件名部分也不是一個URL必須的部分,若是省略該部分,則使用默認的文件名
6.錨點部分:從「#」開始到最後,都是錨部分。本例中的錨部分是「name」。錨部分也不是一個URL必須的部分,#表明網頁中的一個位置。其右
面的字符,就是該位置的標識符。好比,http://www.example.com/index.html#print就表明網頁index.html的print位置。瀏覽器讀取這個
URL後,會自動將print位置滾動至可視區域。爲網頁位置指定標識符,有兩個方法。一是使用錨點,比
如<a name="print"></a>,二是使用id屬性,好比<div id="print">。
7.參數部分:從「?」開始到「#」爲止之間的部分爲參數部分,又稱搜索部分、查詢部分。本例中的參數部分爲「boardID=5&ID=24618&page=1」
。參數能夠容許有多個參數,參數與參數之間用「&」做爲分隔符。
複製代碼
HTTP之請求消息Request
HTTP之狀態碼
狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態碼:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
403 Forbidden //服務器收到請求,可是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
複製代碼
HTTP工做原理 HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行做爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。
如下是 HTTP 請求/響應的步驟:
一、客戶端鏈接到Web服務器
一個HTTP客戶端,一般是瀏覽器,與Web服務器的HTTP端口(默認爲80)創建一個TCP套接字鏈接。例如,www.oakcms.cn。
二、發送HTTP請求
經過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
三、服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
四、釋放鏈接TCP鏈接
若connection 模式爲close,則服務器主動關閉TCP鏈接,客戶端被動關閉鏈接,釋放TCP鏈接;若connection 模式爲keepalive,則該鏈接會保持一段時間,在該時間內能夠繼續接收請求;
五、客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看代表請求是否成功的狀態代碼。而後解析每個響應頭,響應頭告知如下爲若干字節的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。
例如:在瀏覽器地址欄鍵入URL,按下回車以後會經歷如下流程:
一、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
二、解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器創建TCP鏈接;
三、瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文做爲 TCP 三次握手的第三個報文的數據發送給服務器;
四、服務器對瀏覽器請求做出響應,並把對應的 html 文本發送給瀏覽器;
五、釋放 TCP鏈接;
六、瀏覽器將該 html 文本並顯示內容;   
複製代碼
TCP三次握手
所謂三次握手(Three-Way Handshake)即創建TCP鏈接,就是指創建一個TCP鏈接時,須要客戶端和服務端總共發送3個包以確認鏈接的創建。在socket編程中,這一過程由客戶端執行connect來觸發,整個流程以下圖所示:
(1)第一次握手:Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。 (2)第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求創建鏈接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認鏈接請求,Server進入SYN_RCVD狀態。 (3)第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,若是正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,若是正確則鏈接創建成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間能夠開始傳輸數據了。 簡單來講,就是 一、創建鏈接時,客戶端發送SYN包(SYN=i)到服務器,並進入到SYN-SEND狀態,等待服務器確認 二、服務器收到SYN包,必須確認客戶的SYN(ack=i+1),同時本身也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器進入SYN-RECV狀態 三、客戶端收到服務器的SYN+ACK包,向服務器發送確認報ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,客戶端與服務器開始傳送數據。
四次揮手
所謂四次揮手(Four-Way Wavehand)即終止TCP鏈接,就是指斷開一個TCP鏈接時,須要客戶端和服務端總共發送4個包以確認鏈接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程以下圖所示:
上面是一方主動關閉,另外一方被動關閉的狀況,實際中還會出現同時發起主動關閉的狀況,具體流程以下圖:
因爲TCP鏈接時全雙工的,所以,每一個方向都必需要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的鏈接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,可是在這個TCP鏈接上仍然可以發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另外一方則執行被動關閉,上圖描述的便是如此。
(1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
(2)第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
(3)第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
(4)第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。
複製代碼
總結:
(1)三次握手是什麼或者流程?四次握手呢?答案前面分析就是。
(2)爲何創建鏈接是三次握手,而關閉鏈接倒是四次揮手呢?
這是由於服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方
的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方也未必所有數據都發送給對方了,因此己方能夠當即close,也能夠
發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,己方ACK和FIN通常都會分開發送。
複製代碼
GET和POST請求的區別
GET請求
GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
複製代碼
注意最後一行是空行
POST請求
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
複製代碼
一、GET提交,請求的數據會附在URL以後(就是把數據放置在HTTP協議頭中),以?分割URL和傳輸數據,多個參數用&鏈接;例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。若是數據是英文字母/數字,原樣發送,若是是空格,轉換爲+,若是是中文/其餘字符,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII。
POST提交:把提交的數據放置在是HTTP包的包體中。上文示例中紅色字體標明的就是實際的傳輸數據
所以,GET提交的數據會在地址欄中顯示出來,而POST提交,地址欄不會改變 二、傳輸數據的大小:首先聲明:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
而在實際開發中存在的限制主要有:
GET:特定瀏覽器和服務器對URL長度有限制,例如 IE對URL長度的限制是2083字節(2K+35)。對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系 統的支持。
所以對於GET提交時,傳輸數據就會受到URL長度的 限制。
POST:因爲不是經過URL傳值,理論上數據不受 限。但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6都有各自的配置。
三、安全性
POST的安全性要比GET的安全性高。好比:經過GET提交數據,用戶名和密碼將明文出如今URL上,由於(1)登陸頁面有可能被瀏覽器緩存;(2)其餘人查看瀏覽器的歷史紀錄,那麼別人就能夠拿到你的帳號和密碼了,除此以外,使用GET提交數據還可能會形成Cross-site request forgery攻擊
四、Http get,post,soap協議都是在http上運行的
(1)get:請求參數是做爲一個key/value對的序列(查詢字符串)附加到URL上的 查詢字符串的長度受到web瀏覽器和web服務器的限制(如IE最多支持2048個字符),不適合傳輸大型數據集同時,它很不安全
(2)post:請求參數是在http標題的一個不一樣部分(名爲entity body)傳輸的,這一部分用來傳輸表單信息,所以必須將Content-type設置爲:application/x-www-form- urlencoded。post設計用來支持web窗體上的用戶字段,其參數也是做爲key/value對傳輸。 可是:它不支持複雜數據類型,由於post沒有定義傳輸數據結構的語義和規則。
(3)soap:是http post的一個專用版本,遵循一種特殊的xml消息格式 Content-type設置爲: text/xml 任何數據均可以xml化。
Http協議定義了不少與服務器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個URL地址用於描述一個網絡上的資源,而HTTP中的GET, POST, PUT, DELETE就對應着對這個資源的查,改,增,刪4個操做。 咱們最多見的就是GET和POST了。GET通常用於獲取/查詢資源信息,而POST通常用於更新資源信息.
咱們看看GET和POST的區別
GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中.
GET提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.
GET方式須要使用Request.QueryString來取得變量的值,而POST方式經過Request.Form來獲取變量的值。
GET方式提交數據,會帶來安全問題,好比一個登陸頁面,經過GET方式提交數據時,用戶名和密碼將出如今URL上,若是頁面能夠被緩存或者其餘人能夠訪問這臺機器,就能夠從歷史記錄得到該用戶的帳號和密碼.
HTTP VS HTTPS
HTTP特色:
HTTPS特色:
基於HTTP協議,經過SSL或TLS提供加密處理數據、驗證對方身份以及數據完整性保護
經過抓包能夠看到數據不是明文傳輸,並且HTTPS有以下特色:
保護數據完整性:防止傳輸的內容被中間人冒充或者篡改
混合加密:結合非對稱加密和對稱加密技術。客戶端使用對稱加密生成密鑰對傳輸數據進行加密,而後使用非對稱加密的公鑰再對祕鑰進行加密,因此網絡上傳輸的數據是被祕鑰加密的密文和用公鑰加密後的祕密祕鑰,所以即便被HK截取,因爲沒有私鑰,沒法獲取到加密明文的祕鑰,便沒法獲取到明文數據。
數字摘要:經過單向hash函數對原文進行哈希,將需加密的明文「摘要」成一串固定長度(如128bit)的密文,不一樣的明文摘要成的密文其結果老是不相同,一樣的明文其摘要一定一致,而且即便知道了摘要也不能反推出明文。
數字簽名技術:數字簽名創建在公鑰加密體制基礎上,是公鑰加密技術的另外一類應用。它把公鑰加密技術和數字摘要結合起來,造成了實用的數字簽名技術。
收方可以證明發送方的真實身份; 發送方過後不可否認所發送過的報文; 收方或非法者不能僞造、篡改報文。
HTTPS實現原理:
安全性考慮:
HTTPS協議的加密範圍也比較有限,在HK攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼做用
SSL證書的信用鏈體系並不安全,特別是在某些國家能夠控制CA根證書的狀況下,中間人攻擊同樣可行
中間人攻擊(MITM攻擊)是指,HK攔截並篡改網絡中的通訊數據。又分爲被動MITM和主動MITM,被動MITM只竊取通訊數據而不修改,而主動MITM不但能竊取數據,還會篡改通訊數據。最多見的中間人攻擊經常發生在公共wifi或者公共路由上。
成本考慮:
HTTPS 協議的主要功能基本都依賴於 TLS/SSL 協議,TLS/SSL 的功能實現主要依賴於三類基本算法:散列函數 、對稱加密和非對稱加密,其利用非對稱加密實現身份認證和密鑰協商,對稱加密算法採用協商的密鑰對數據加密,基於散列函數驗證信息的完整性。
應該就是客戶端得到證書以後,先對證書進行驗證,若是沒問題,會產生一個隨機數值,客戶端用公鑰對這個隨機值進行加密傳遞到服務端,服務端用私鑰解密得到隨機值(密鑰),而後以後的數據傳輸就使用這個新產生的密鑰進行對稱加密,客戶端是有這個隨機值(密鑰)的,因此能夠進行解密