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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP请求消息数据格式分析以及request和response

發布時間:2024/9/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP请求消息数据格式分析以及request和response 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

* HTTP概念

Hyper Text Transfer Protocol 超文本傳輸協議
?? ??? ?* 傳輸協議:定義了,客戶端和服務器端通信時,發送數據的格式
?? ??? ?* 特點:
?? ??? ??? ?1. 基于TCP/IP的高級協議
?? ??? ??? ?2. 默認端口號:80
?? ??? ??? ?3. 基于請求/響應模型的:一次請求對應一次響應
?? ??? ??? ?4. 無狀態的:每次請求之間相互獨立,不能交互數據

?? ??? ?* 歷史版本:
?? ??? ??? ?* 1.0:每一次請求響應都會建立新的連接
?? ??? ??? ?* 1.1:復用連接

* 請求消息數據格式


?? ??? ?1. 請求行
?? ??? ??? ?請求方式 請求url 請求協議/版本
?? ??? ??? ?GET /login.html?? ?HTTP/1.1

?? ??? ??? ?* 請求方式:
?? ??? ??? ??? ?* HTTP協議有7中請求方式,常用的有2種
?? ??? ??? ??? ??? ?* GET:
?? ??? ??? ??? ??? ??? ?1. 請求參數在請求行中,在url后。
?? ??? ??? ??? ??? ??? ?2. 請求的url長度有限制的
?? ??? ??? ??? ??? ??? ?3. 不太安全
?? ??? ??? ??? ??? ?* POST:
?? ??? ??? ??? ??? ??? ?1. 請求參數在請求體中
?? ??? ??? ??? ??? ??? ?2. 請求的url長度沒有限制的
?? ??? ??? ??? ??? ??? ?3. 相對安全
?? ??? ?2. 請求頭:客戶端瀏覽器去告訴服務器一些信息(主要是我使用的瀏覽器和我從哪個網頁來的)
?? ??? ??? ?請求頭名稱: 請求頭值
?? ??? ??? ?* 常見的請求頭:
?? ??? ??? ??? ?1. User-Agent:瀏覽器告訴服務器,我訪問你使用的瀏覽器版本信息
?? ??? ??? ??? ??? ?* 可以在服務器端獲取該頭的信息,解決瀏覽器的兼容性問題

?? ??? ??? ??? ?2. Referer:http://localhost/login.html
?? ??? ??? ??? ??? ?* 告訴服務器,我(當前請求)從哪里來?
?? ??? ??? ??? ??? ??? ?* 作用:
?? ??? ??? ??? ??? ??? ??? ?1. 防盜鏈:
?? ??? ??? ??? ??? ??? ??? ?2. 統計工作:
?? ??? ?3. 請求空行
?? ??? ??? ?空行,就是用于分割POST請求的請求頭,和請求體的。
?? ??? ?4. 請求體(正文):
?? ??? ??? ?* 封裝POST請求消息的請求參數的

?? ??? ?* 字符串格式:
?? ??? ??? ?POST /login.html?? ?HTTP/1.1
?? ??? ??? ?Host: localhost
?? ??? ??? ?User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
?? ??? ??? ?Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
?? ??? ??? ?Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
?? ??? ??? ?Accept-Encoding: gzip, deflate
?? ??? ??? ?Referer: http://localhost/login.html
?? ??? ??? ?Connection: keep-alive
?? ??? ??? ?Upgrade-Insecure-Requests: 1
?? ??? ??? ?username=zhangsan?? ?


?? ?* 響應消息數據格式

## Request:


?? ?1. request對象和response對象的原理


?? ??? ?1. request和response對象是由服務器創建的。我們來使用它們
?? ??? ?2. request對象是來獲取請求消息,response對象是來設置響應消息


?? ?
?? ?2. request對象繼承體系結構:?? ?


?? ??? ?ServletRequest?? ??? ?--?? ?接口
?? ??? ??? ?|?? ?繼承
?? ??? ?HttpServletRequest?? ?-- 接口
?? ??? ??? ?|?? ?實現
?? ??? ?org.apache.catalina.connector.RequestFacade 類(tomcat)

?? ?3. request功能:


?? ????1. 獲取請求消息數據


?? ??? ??? ?1. 獲取請求行數據


?? ??? ??? ??? ?* GET /day14/demo1?name=zhangsan HTTP/1.1
?? ??? ??? ??? ?* 方法:
?? ??? ??? ??? ??? ?1. 獲取請求方式 :GET
?? ??? ??? ??? ??? ??? ?* String getMethod() ?
?? ??? ??? ??? ??? ?2. (*)獲取虛擬目錄:/day14
?? ??? ??? ??? ??? ??? ?* String getContextPath()
?? ??? ??? ??? ??? ?3. 獲取Servlet路徑: /demo1
?? ??? ??? ??? ??? ??? ?* String getServletPath()
?? ??? ??? ??? ??? ?4. 獲取get方式請求參數:name=zhangsan
?? ??? ??? ??? ??? ??? ?* String getQueryString()
?? ??? ??? ??? ??? ?5. (*)獲取請求URI:/day14/demo1
?? ??? ??? ??? ??? ??? ?* String getRequestURI():?? ??? ?/day14/demo1
?? ??? ??? ??? ??? ??? ?* StringBuffer getRequestURL() ?:http://localhost/day14/demo1

?? ??? ??? ??? ??? ??? ?* URL:統一資源定位符 : http://localhost/day14/demo1?? ?中華人民共和國
?? ??? ??? ??? ??? ??? ?* URI:統一資源標識符 : /day14/demo1?? ??? ??? ??? ??? ?共和國
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?6. 獲取協議及版本:HTTP/1.1
?? ??? ??? ??? ??? ??? ?* String getProtocol()

?? ??? ??? ??? ??? ?7. 獲取客戶機的IP地址:
?? ??? ??? ??? ??? ??? ?* String getRemoteAddr()


?? ??? ??? ??? ??? ?
?? ??? ??2. 獲取請求頭數據


?? ??? ??? ??? ?* 方法:
?? ??? ??? ??? ??? ?* (*)String getHeader(String name):通過請求頭的名稱獲取請求頭的值
?? ??? ??? ??? ??? ?* Enumeration<String> getHeaderNames():獲取所有的請求頭名稱
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ?//獲取所有的請求頭名稱
?? ??? ??? ??? ?Enumeration<String> headEnumeration=request.getHeaderNames();
?? ??? ??? ??? ?//遍歷
?? ??? ??? ??? ?while (headEnumeration.hasMoreElements()) {
?? ??? ??? ??? ??? ?String name = (String) headEnumeration.nextElement();
?? ??? ??? ??? ??? ?//根據請求頭部名稱獲取請求頭部值
?? ??? ??? ??? ??? ?String valueString=request.getHeader(name);
?? ??? ??? ??? ??? ?System.out.println(name+"---"+valueString);
?? ??? ??? ??? ?}


?? ??? ??? ??? ?
?? ? ? ?3. 獲取請求體數據:


?? ??? ??? ??? ?* 請求體:只有POST請求方式,才有請求體,在請求體中封裝了POST請求的請求參數
?? ??? ??? ??? ?* 步驟:
?? ??? ??? ??? ??? ?1. 獲取流對象
?? ??? ??? ??? ??? ??? ?* ?BufferedReader getReader():獲取字符輸入流,只能操作字符數據
?? ??? ??? ??? ??? ??? ?* ?ServletInputStream getInputStream():獲取字節輸入流,可以操作所有類型數據
?? ??? ??? ??? ??? ??? ??? ?* 在文件上傳知識點后講解

?? ??? ??? ??? ??? ?2. 再從流對象中拿數據
?? ??? ??? ??? ?
?? ??? ??? ???


??2. 其他功能:


?? ??? ??? ?1. 獲取請求參數通用方式:不論get還是post請求方式都可以使用下列方法來獲取請求參數
?? ??? ??? ??? ?1.1. String getParameter(String name):根據參數名稱獲取參數值 ? ?username=zs&password=123
?? ??? ??? ??? ?1.2?String[] getParameterValues(String name):根據參數名稱獲取參數值的數組 ?hobby=xx&hobby=game
? ? ? ? ? ? ? ? 1.3. Enumeration<String> getParameterNames():獲取所有請求的參數名稱
? ? ? ? ? ? ? ? 1.4. Map<String,String[]> getParameterMap():獲取所有參數的map集合

?? ??? ??? ??? ?* 中文亂碼問題:
?? ??? ??? ??? ??? ?* get方式:tomcat 8 已經將get方式亂碼問題解決了
?? ??? ??? ??? ??? ?* post方式:會亂碼
?? ??? ??? ??? ??? ??? ?* 解決:在獲取參數前,設置request的編碼request.setCharacterEncoding("utf-8");

? ? ? ? ? ?

? ? ? ? ? ?2. 請求轉發:一種在服務器內部的資源跳轉方式
?? ??? ??? ??? ?1. 步驟:
?? ??? ??? ??? ??? ?1. 通過request對象獲取請求轉發器對象:RequestDispatcher? ? ? ? ? ? ? ? ? ? ? ? ?getRequestDispatcher(String path)
?? ??? ??? ??? ??? ?2. 使用RequestDispatcher對象來進行轉發:forward(ServletRequest request,? ?ServletResponse response)?

?? ??? ??? ??? ?2. 特點:
?? ??? ??? ??? ??? ?1. 瀏覽器地址欄路徑不發生變化
?? ??? ??? ??? ??? ?2. 只能轉發到當前服務器內部資源中。
?? ??? ??? ??? ??? ?3. 轉發是一次請求


?? ??? ? ? 3. 共享數據:
?? ??? ??? ??? ?* 域對象:一個有作用范圍的對象,可以在范圍內共享數據
?? ??? ??? ??? ?* request域:代表一次請求的范圍,一般用于請求轉發的多個資源中共享數據
?? ??? ??? ??? ?* 方法:
?? ??? ??? ??? ??? ?1. void setAttribute(String name,Object obj):存儲數據
?? ??? ??? ??? ??? ?2. Object getAttitude(String name):通過鍵獲取值
?? ??? ??? ??? ??? ?3. void removeAttribute(String name):通過鍵移除鍵值對

?? ??? ???4. 獲取ServletContext:
?? ??? ??? ??? ?* ServletContext getServletContext()

ps:response方法下一次再講解。。。

總結

以上是生活随笔為你收集整理的HTTP请求消息数据格式分析以及request和response的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。