国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java EE】-HTTP請求構造以及HTTPS的加密流程

這篇具有很好參考價值的文章主要介紹了【Java EE】-HTTP請求構造以及HTTPS的加密流程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

作者:學Java的冬瓜
博客主頁:?冬瓜的主頁??
專欄:【JavaEE】
分享: 在滿園彌漫的沉靜的光芒之前,一個人更容易看到時間,并看到自己的身影?!疯F生《我與地壇》

主要內(nèi)容:構造http請求,不需要寫代碼直接發(fā)送http請求:地址欄輸入地址,html中 img標簽,script標簽,link標簽,a標簽;需要寫代碼實現(xiàn)http請求:使用form表單,使用jquery封裝后的ajax,通過java socket構造http請求,使用第三方工具postman。http加密變成https,tls加密的流程,對稱加密,非對稱加密,證書,TLS握手過程。

【Java EE】-HTTP請求構造以及HTTPS的加密流程

一、構造HTTP請求

不需要寫代碼直接發(fā)送http請求的方法:
1> 在瀏覽器地址欄輸入url,回車
2> 在html中的標簽 link script img a等

下面是需要寫代碼來完成http請求的方式:

1、form表單

<!-- 構造GET或POST請求 -->
<form action="http://abcdef.com/myPath" method="GET"> <!--或者post-->
    <input type="text" name="userId">
    <input type="text" name="classId">
    <input type="submit" value="提交">
</form>

2、使用jQuery封裝ajax后提供的api

ajax的全稱是 Asynchronous JavaScript and XML,實現(xiàn)異步處理,synchronous是同步。
同步請求時,瀏覽器需要等待收到響應才能繼續(xù)執(zhí)行下面的內(nèi)容,而異步在發(fā)送請求后可以直接往下執(zhí)行,等響應來了,再通過觸發(fā)代碼執(zhí)行特定的代碼。
實現(xiàn)異步一般需要多線程/IO多路復用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 先引入jquery -->
    <script src="./blog/js/jquery.min.js"></script>
    <script>
        // jquery中$是一個全局對象,jQuery中的api都是以$的方式引出的,只有一個參數(shù),是一個js對象,就是{}表示的鍵值對
        $.ajax(
            {
                type: 'get',
                url: 'http://www.baidu.com/?studentName=lihua&password=123',
                // 此處success聲明了一個回調(diào)函數(shù),當服務器響應給瀏覽器時,就會執(zhí)行這個回調(diào)函數(shù),同時正是這個回調(diào)實現(xiàn)了異步
                success: function(data){
                    console.log("瀏覽器收到服務器的響應, 調(diào)用success函數(shù)");
                }
            }
        );
        console.log("發(fā)送請求后,瀏覽器立即執(zhí)行后續(xù)代碼");
    </script>
</body>
</html>

【Java EE】-HTTP請求構造以及HTTPS的加密流程

  • 從上圖中發(fā)現(xiàn),是先執(zhí)行回調(diào)函數(shù)下面的代碼,瀏覽器收到服務器發(fā)送的響應后,才觸發(fā)執(zhí)行的success方法。體現(xiàn)了異步的處理方式。
  • 與form表單相比,ajax功能更強
    1> 支持put,delete等方法
    2> ajax發(fā)送的請求可以根據(jù)需求,靈活設置 header
    3> ajax 發(fā)送的請求的 body也是可以靈活設置的。

3、通過 Java socket 構造 HTTP 請求

所謂的 “發(fā)送 HTTP 請求”, 本質(zhì)上就是按照 HTTP 的格式往 TCP Socket 中寫入一個字符串.
所謂的 “接受 HTTP 響應”, 本質(zhì)上就是從 TCP Socket 中讀取一個字符串, 再按照 HTTP 的格式來解析.
我們基于 Socket 的知識, 完全可以構造出一個簡單的 HTTP 客戶端程序, 用來發(fā)送各種類型的 HTTP 請求.

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class HttpClient {
    private Socket socket;
    private String ip;
    private int port;
    public HttpClient(String ip, int port) throws IOException {
        this.ip = ip;
        this.port = port;
        socket = new Socket(ip, port);
   }
    public String get(String url) throws IOException {
        StringBuilder request = new StringBuilder();
        // 構造首行
        request.append("GET " + url + " HTTP/1.1\n");
        // 構造 header
        request.append("Host: " + ip + ":" + port + "\n");
        // 構造 空行
        request.append("\n");
        // 發(fā)送數(shù)據(jù)
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(request.toString().getBytes());
        // 讀取響應數(shù)據(jù)
        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024 * 1024];
        int n = inputStream.read(buffer);
        return new String(buffer, 0, n, "utf-8");
   }
   public String post(String url, String body) throws IOException {
        StringBuilder request = new StringBuilder();
        // 構造首行
        request.append("POST " + url + " HTTP/1.1\n");
        // 構造 header
        request.append("Host: " + ip + ":" + port + "\n");
        request.append("Content-Length: " + body.getBytes().length + "\n");
        request.append("Content-Type: text/plain\n");
        // 構造 空行
        request.append("\n");
        // 構造 body
        request.append(body);
        // 發(fā)送數(shù)據(jù)
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(request.toString().getBytes());
        // 讀取響應數(shù)據(jù)
        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[1024 * 1024];
        int n = inputStream.read(buffer);
        return new String(buffer, 0, n, "utf-8");
   }
    public static void main(String[] args) throws IOException {
    	HttpClient httpClient = new HttpClient("www.baidu.com", 80);
		String resp = httpClient.get("/index.html");
		System.out.println(resp);
        //HttpClient httpClient = new HttpClient("42.192.83.143", 8080);
        //String getResp = httpClient.get("/AjaxMockServer/info");
        //System.out.println(getResp);
        //String postResp = httpClient.post("/AjaxMockServer/info", "this is 
body");
        //System.out.println(postResp);
   }
}

代碼運行結(jié)果(VSCode):
【Java EE】-HTTP請求構造以及HTTPS的加密流程

4、第三方工具:postman

1> 下載,安裝,注冊登錄,創(chuàng)建個人工作空間后,點下圖+號創(chuàng)建一個標簽頁,用于構造請求
【Java EE】-HTTP請求構造以及HTTPS的加密流程
2> 自定義構造請求,可以修改各種屬性
【Java EE】-HTTP請求構造以及HTTPS的加密流程

二、HTTPS

1、HTTP和HTTPS的區(qū)別

HTTPS在HTTP的基礎上,做了這幾個改造:
1> 默認端口http是80,HTTPS是443;
2> HTTPS使用SSL/TLS加密,實現(xiàn)數(shù)據(jù)傳輸?shù)陌踩?;
3> 使用數(shù)字證書驗證,來驗證網(wǎng)站的身份,確保用戶訪問的是真實的網(wǎng)站。

以前只使用http時,網(wǎng)費不足的時候就會在瀏覽網(wǎng)頁收到互聯(lián)網(wǎng)服務提供商(isp)的彈窗提示,現(xiàn)在HTTPS流行后,網(wǎng)費不足就沒有提示了,而是直接斷網(wǎng)。因為HTTPS對網(wǎng)絡傳輸提供了加密,運營商設備無法再對瀏覽器端發(fā)送到服務器端的數(shù)據(jù)進行解析,也就無法提醒了,從而也解決了運營商劫持的問題。下面我們來看看SSL/TLS給HTTP加密的過程:

2、SSL/TLS加密流程

SSL是TLS的前身,它們都是加密安全協(xié)議,現(xiàn)在絕大部分瀏覽器都不支持SSL,而是支持TLS。

2.1、對稱加密

舉個例子:
【Java EE】-HTTP請求構造以及HTTPS的加密流程

【Java EE】-HTTP請求構造以及HTTPS的加密流程

  • 在上述場景中,同一個密鑰,既可以用來加密,又可以用來解密,雙方之間都只通過這個密鑰進行加密解密,這樣的方式叫做對稱加密。
  • 但是,對稱加密的密鑰如果被第三方知道,就很容易破解了。那么就引入了我們的對稱加密,從而把密鑰安全傳輸。

2.2、非對稱加密

1> 非對稱加密理解:

  • 對稱加密中引入了公鑰和私鑰。如果數(shù)據(jù)用公鑰加密,就只能用私鑰解密;如果數(shù)據(jù)用私鑰加密,就只能用公鑰解密。
  • 應用到客戶端和服務端時,服務器擁有成對的公鑰和私鑰,公布自己的公鑰讓客戶端知道,而私鑰只有服務器端自己知道。
    客戶端使用服務器公布的公鑰進行數(shù)據(jù)加密 傳輸數(shù)據(jù)給服務端,服務端使用只有自己知道的私鑰解密。這樣的非對稱加密也叫公鑰加密。
  • 引入非對稱加密后,客戶端可以用服務器端給的公鑰對 數(shù)據(jù)傳輸?shù)姆绞?比如使用倒念) 進行加密,這個數(shù)據(jù)只有服務器端的 私鑰才能解密,解密后就可以進行對稱加密(后續(xù)進行對稱加密是為了傳輸效率)。就達到了 安全傳輸 對稱密鑰 的目的,不再是對稱加密中,唯一的密鑰被第三方知道的情況。
    【Java EE】-HTTP請求構造以及HTTPS的加密流程

2> 通過非對稱加密(公鑰加密,私鑰解密)的方式,可以讓 對稱密鑰 安全的發(fā)送到服務端,但是還存在一種問題,第三方雖然不知道服務端的私鑰,但是是否依舊可以獲取數(shù)據(jù)呢?答案是可以的,請看下圖:

【Java EE】-HTTP請求構造以及HTTPS的加密流程
在上圖中,黑客就作為中間的聯(lián)系人,進行"兩頭騙"的操作,怎么解決這個問題?加證書!

2.3、證書

客戶端如何認證證書是否被修改?

  • 認證機構也有一組公鑰和私鑰,私鑰用來加密hash值得到簽名,公鑰是公布給客戶端的。
  • 當客戶端向服務器申請公鑰時,服務器會把證書一并發(fā)給客戶端??蛻舳丝梢允褂谜J證機構提供的公鑰對證書的簽名進行解密,這里使用一種hash算法得到hash1,然后自己用同樣的hash算法對其它字段進行計算得到hash2,如果hash1和hash2一樣就代表證書未被修改過。

【Java EE】-HTTP請求構造以及HTTPS的加密流程

  • 引入證書后,首先黑客不知道認證機構的私鑰,無法對服務端證書的簽名進行解密,也就無法篡改證書;其次,黑客只要一修改證書上對應的頒發(fā)機構或服務器公鑰,客戶端這里計算得到的hash1和hash2就不再相同。
  • 所以,引入證書后,就保證了黑客無法在中間使用自己的公鑰和私鑰進行"兩頭騙"的行為。但是如果黑客把證書也一并替換了呢?
    黑客通過欺騙 證書頒發(fā)機構(CA)或者攻擊 CA的系統(tǒng)來獲得有效證書,這種情況叫做 “CA欺騙攻擊”,但是由于證書頒發(fā)機構有嚴格的審核程序和安全措施,黑客獲取證書頒發(fā)機構的有效證書的概率很小,并且瀏覽器和操作系統(tǒng)也會定期更新黑名單,將已經(jīng)被證實為不安全的證書加入其中,以保護用戶受此類攻擊。
    黑客無法獲取到證書,自然就無法使用自己的證書進行替換了!

2.4、TLS握手過程

TCP三次握手后,客戶端與服務器建立連接,以確保雙方的通信是可靠的。在TCP連接建立之后,客戶端和服務器進行TLS握手以建立安全通信。下面是TLS握手的過程:

【Java EE】-HTTP請求構造以及HTTPS的加密流程文章來源地址http://www.zghlxwxcb.cn/news/detail-433489.html

到了這里,關于【Java EE】-HTTP請求構造以及HTTPS的加密流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【JavaSE專欄91】Java如何主動發(fā)起Http、Https請求?

    【JavaSE專欄91】Java如何主動發(fā)起Http、Https請求?

    作者主頁 :Designer 小鄭 作者簡介 :3年JAVA全棧開發(fā)經(jīng)驗,專注JAVA技術、系統(tǒng)定制、遠程指導,致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學院、藍橋云課認證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了如何使用 Java 發(fā)起 Http 請求,并給出了樣例代碼,HTTP 是一種用于在 Web 瀏

    2024年02月09日
    瀏覽(17)
  • java使用hutool工具類發(fā)送http或者https請求太香啦

    我們使用java內(nèi)置的http工具實現(xiàn)遠程調(diào)用的時候,都是用try catch包一堆代碼,巨難受,今天看見有人使用hutool工具類那是天簡單了呀,具體操作如下: 1,引入依賴 2, 如果不需要設置其他什么頭信息,代碼: 如果是https請求直接換url里面的http就行 返回信息格式: {\\\"code\\\":200

    2024年02月14日
    瀏覽(24)
  • java發(fā)送https請求以及解析調(diào)用接口返回來的數(shù)據(jù)信息

    一、返回的Json數(shù)據(jù)信息格式 二、解析 引用的是 判斷如果code為200則證明數(shù)據(jù)返回成功,然后獲取data中的value數(shù)據(jù)。 獲取data數(shù)據(jù) 這樣就可以獲取data中的數(shù)據(jù)了。 如果想要將data中的數(shù)據(jù)變成集合 就可以啦 三、發(fā)送https請求

    2024年02月19日
    瀏覽(24)
  • 【HTTP 協(xié)議2】如何構造 HTTP 請求

    【HTTP 協(xié)議2】如何構造 HTTP 請求

    各位讀者好, 我是小陳, 這是我的個人主頁, 希望我的專欄能夠幫助到你: ?? JavaSE基礎: 基礎語法, 類和對象, 封裝繼承多態(tài), 接口, 綜合小練習圖書管理系統(tǒng)等 ?? Java數(shù)據(jù)結(jié)構: 順序表, 鏈表, 堆, 二叉樹, 二叉搜索樹, 哈希表等 ?? JavaEE初階: 多線程, 網(wǎng)絡編程, TCP/IP協(xié)議, HTTP協(xié)議

    2024年02月12日
    瀏覽(28)
  • 高效便捷構造 Http 請求

    高效便捷構造 Http 請求

    對于Get請求: 地址欄直接輸入 點擊收藏夾 html 中的 link script img a… form 標簽 這里我們重點強調(diào) form 標簽構造的 http請求 使用 form 標簽構造http請求. form 的重要參數(shù): action: 構造 http 請求的 URL 是什么 method:構造 http 請求的方法是 GET 還是 POST(form 僅支持 GET 和 POST) input 的重要參數(shù)

    2023年04月14日
    瀏覽(22)
  • 【JavaEE】HTTP請求的構造

    【JavaEE】HTTP請求的構造

    目錄 1、通過form表單構造HTTP請求 2、通過JS的ajax構造HTTP請求 3、Postman的安裝和簡單使用 常見的構造HTTP請求的方式有一下幾種: 直接通過瀏覽器的地址欄,輸入一個URL,就可以構造一個GET請求 HTML中的一些特殊標簽,也會觸發(fā)GET請求,例如:link、script、img、a.... 通過form表單

    2024年02月17日
    瀏覽(20)
  • 【Http協(xié)議④】常見的幾種構造http請求的方式,form表單構造,Ajax構造,postman構造

    【Http協(xié)議④】常見的幾種構造http請求的方式,form表單構造,Ajax構造,postman構造

    前言: 大家好,我是 良辰丫 ,這篇文章我將協(xié)同大家一起去學習幾種構造http請求的方式.?????? ??個人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??勵志語句:生活也許會讓我們遍體鱗傷,但最終這些傷口會成為我們一輩子的財富。 ??期待大家三連,關注,點贊,收藏。

    2024年02月06日
    瀏覽(25)
  • 計算機網(wǎng)絡——如何構造HTTP請求

    計算機網(wǎng)絡——如何構造HTTP請求

    ????????構造HTTP請求的常見方式有,通過form表單標簽來實現(xiàn),通過ajax來實現(xiàn),這兩種是通過HTML/JS來實現(xiàn)的,還可通過java使用Socket來進行構造(本質(zhì)就是根據(jù)不同的格式來解析字符串,處理請求),最簡單的也可以使用一些工具來進行構造,比如使用postman來進行構造。

    2023年04月08日
    瀏覽(23)
  • 【JavaEE】_ajax構造HTTP請求

    【JavaEE】_ajax構造HTTP請求

    目錄 1. ajax簡述 2. ajax構造HTTP請求 2.1 jquery庫的引入 2.2 ajax構造HTTP請求格式 3. ajax構造GET請求實例 4. ajax構造POST請求實例 本專欄關于form表單構造HTTP請求一文中已經(jīng)提到:form表單構造法只支持GET和POST,且會觸發(fā)頁面跳轉(zhuǎn)。 原文詳情鏈接如下: 【JavaEE】_form表單構造HTTP請求-

    2024年02月22日
    瀏覽(24)
  • 【Java EE初階二十二】https的簡單理解

    【Java EE初階二十二】https的簡單理解

    ?????????當前網(wǎng)絡上,主要都是 HTTPS 了,很少能見到 HTTP.實際上 HTTPS 也是基于 HTTP.只不過 HTTPS 在 HTTP 的基礎之上, 引入了\\\"加密\\\"機制;引入 HTTPS 防止你的數(shù)據(jù)被黑客篡改 ; ????????HTTPS 就是一個重要的保護措施.之所以能夠安全, 最關鍵的在于\\\"加密”; ? ? ? ? 明文:

    2024年02月22日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包