中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaEE基礎(03):Http請求詳解,握手揮手流程簡介

發布時間:2020-07-15 09:33:14 來源:網絡 閱讀:192 作者:知了一笑 欄目:編程語言

本文源碼:GitHub·點這里 || GitEE·點這里

一、Http協議簡介

1、概念說明

HTTP超文本傳輸協議,是用于從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議,基于TCP/IP通信協議來傳遞數據:HTML文件、圖片、查詢數據等。HTTP協議基于客戶端-服務端架構模式。瀏覽器作為HTTP客戶端通過URL向服務端即WEB服務器發送請求。Web服務器根據接收到的請求后,處理完請求后向客戶端發送響應信息。

JavaEE基礎(03):Http請求詳解,握手揮手流程簡介

2、協議特點

  • 簡單快速

請求服務器時,只需傳送請求方法和路徑。請求類型常用GET、POST。由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

  • 靈活:

HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

  • 無連接

無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。

  • 無狀態

HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態則后續處理需要前面的信息,沒有則需要重新請求,這樣可能導致每次連接傳送的數據量增大。

  • 支持客戶/服務器模式

二、Http請求詳解

1、請求接口

public class ServletOneImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("doGet...");
        response.setContentType("text/html;charset=utf-8");
        String userName = request.getParameter("userName") ;
        response.getWriter().print("Hello:"+userName);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println("doPost...");
        response.setContentType("text/html;charset=utf-8");
        String userName = request.getParameter("userName") ;
        response.getWriter().print("Hello:"+userName);
    }
}

2、請求內容

  • Get請求

地址:http://localhost:6003/servletOneImpl?userName=cicada

GET /servletOneImpl?userName=cicada HTTP/1.1
Host: localhost:6003
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Referer: http://localhost:6003/request.jsp
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=183C0F91B49A025C795FBC3067B37BC8
  • Post請求

地址:http://localhost:6003/servletOneImpl

POST /servletOneImpl HTTP/1.1
Host: localhost:6003
Connection: keep-alive
Content-Length: 15
Cache-Control: max-age=0
Origin: http://localhost:6003
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Referer: http://localhost:6003/request.jsp
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=183C0F91B49A025C795FBC3067B37BC8

3、參數說明

  • Method:常見GET 和 POST,另外還有DELETE、PUT 等 ;
  • URI:/servletOneImpl,和Host組成請求的URL ;
  • HTTP/1.1:傳輸協議Http,版本1.1 ;
  • Host:請求資源所在的主機和端口 ;
  • Connection:TCP連接默認不關閉,可以被多個請求復用 ;
  • Upgrade-Insecure-Requests:瀏覽器不再顯示 https 頁面中的 http 請求警報 ;
  • Content-Length:指示實體主體大小,以字節為單位十進制數,發送到接收方。
  • Cache-Control:max-age=0使用緩存,但是會立即過期 ;
  • User-Agent:客戶端瀏覽器類型、版本、操作系統等信息 ;
  • Content-Type: 請求或響應中,傳輸資源類型信息 ;
  • Origin:當前請求出自的站點 ;
  • Accept:客戶端聲明自己可以接收的資源格式 ;
  • DNT: 請求禁用用戶追蹤 ;
  • Referer:告訴服務器該網頁是從哪個頁面鏈接過來 ;
  • Accept-Encoding: 聲明瀏覽器支持的編碼類型 ;
  • Accept-Language: 聲明瀏覽器支持的語言類型 ;
  • Cookie: 辨識存儲在客戶端的緩存數據,通常會加密 ;

4、GET和POST區別

  • 瀏覽器端

從瀏覽器角度看這個兩種請求的區別:GET方式讀取資源,比如Get到靜態頁面,即使多次讀取不會對訪問數據產生影響,也被稱為"冪等"操作。POST方式在頁面中定義表單,提交表單會把數據提交到服務器,而且多數情況下會產生數據,比如常用的保存數據接口,并非"冪等"操作,不冪等也就意味著不能隨意多次執行。

  • 服務接口

這里指用Ajax程序請求服務接口,提交的請求類型。或者其他Http請求工具類,還有情況是微服務中各種Feign接口間的請求。這種情況接口發送請求時,限制相對較少,比如REST風格接口常用GET、POST、PUT、DELETE,幾種方式分別獲取、創建、更新、刪除 資源,

三、Https請求協議

1、Https簡介

  • 基礎概念

HTTPS:是以安全為準則的HTTP通道,是HTTP的安全版,在HTTP請求上加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

  • 安全模式

HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

2、Https工作原理

JavaEE基礎(03):Http請求詳解,握手揮手流程簡介

(1)客戶基于Https方式訪問服務端,與服務器建立SSL連接 ;
(2)服務端收到請求后,會將包含公鑰的證書傳送給客戶端 ;
(3)客戶端與服務端進行協調SSL連接的安全等級,也就是指加密的等級 ;
(4)客戶端根據雙方同意的安全等級,建立會話密鑰,使用公鑰將會話密鑰加密,并傳送給服務端 ;
(5)服務端使用私鑰解密出會話中傳遞的內容,使用會話密鑰加密與客戶端之間的通信 ;

3、Https和Http區別

  • 安全證書

Https協議需要到CA申請證書,一般免費證書較少,因而需要一定費用。

  • 數據傳輸

Http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

  • 連接方式

Http和Https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

四、TCP傳輸協議

1、TCP協議簡介

TCP傳輸控制協議是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。TCP用意在于適應并支持多網絡應用的分層協議層次結構。

2、三次握手

這一場景在生活中可以描述為通話:

甲:你好,我是甲,你是乙嗎;
乙:你好甲:我是乙;
甲:正好找你有點事情,身份確認:

JavaEE基礎(03):Http請求詳解,握手揮手流程簡介

  • 第一次握手

客戶端主動向服務器發起請求連接,請求報文中發送SYN=1,此時隨機生成初始序列號seq=x,此時,客戶端進程進入SYN-SENT同步已發送狀態。

  • 第二次握手

服務端收到請求報文后,確認客戶的SYN,如果請求沒有拒絕,則發出確認報文。報文中應該ACK=1,SYN=1,確認號是ack=x+1,同時自己也發送一個SYN包seq=y,此時,服務器進程進入SYN-RCVD同步收到狀態。

  • 第三次握手

客戶端收到確認后,需要向服務器確認報文的ACK=1,ack=y+1,此時,TCP連接建立,客戶端進入ESTABLISHED已建立連接狀態。完成三次握手,客戶端與服務器開始傳送數據。

3、四次揮手

JavaEE基礎(03):Http請求詳解,握手揮手流程簡介

  • 第一次揮手

客戶端發送一個結束FIN,用來主動關閉和服務端的數據傳輸,釋放連接且停止發送數據,報文首部:FIN=1,序列號seq=u;隨后客戶端進入終止等待1狀態FIN-WAIT-1。

  • 第二次揮手

服務端收到這個FIN,發出確認報文ACK=1,確認收到序號是收到的序號+1,即ack=u+1,且帶上自己的序列號seq=v,和SYN一樣,一個FIN將占用一個序號。如此,服務器通知應用進程,客戶端已經沒有數據要發送,如果服務器發送數據,客戶端依然要接收,該狀態會持續一段時間,服務端進入關閉等待狀態CLOSE-WAIT。客戶端收到服務器的確認請求后,進入終止等待2狀態FIN-WAIT-2,等待服務器發送連接釋放報文。

  • 第三次揮手

服務器向客戶端發送釋放連接報文FIN=1,ack=u+1,此時服務端還處于半關閉狀態,服務器可能還會發送一些數據,此時序列號為seq=w,如此,服務器進入最后確認狀態LAST-ACK,等待客戶端的確認。

  • 第四次揮手

客戶端收到服務器的連接釋放報文后,回發確認,ACK=1,ack=w+1,序列號是seq=u+1,如此,客戶端進入時間等待狀態TIME-WAIT。此時TCP連接還沒有釋放,必須經過最長報文段壽命的時間后,才進入CLOSED狀態。MSL:最長報文段壽命,一般2分鐘,TCP連接釋放時,主動方必須經過2MSL后才進入CLOSED狀態,因此主動方關閉時間比較晚。

五、源代碼地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

JavaEE基礎(03):Http請求詳解,握手揮手流程簡介

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

固镇县| 连山| 平遥县| 桐柏县| 北辰区| 东光县| 勃利县| 常州市| 安阳县| 南城县| 进贤县| 平原县| 黄骅市| 永德县| 开封市| 霍城县| 弥勒县| 夏津县| 杭锦后旗| 腾冲县| 泰兴市| 遵义市| 乌拉特中旗| 铜陵市| 临猗县| 新竹县| 临汾市| 呼玛县| 龙门县| 邢台市| 大兴区| 威海市| 湟源县| 栾城县| 肥东县| 邳州市| 崇礼县| 镇沅| 小金县| 德昌县| 郴州市|