-
標準http消息格式
通過Netty服務器輸出接收到的所有http網絡請求信息,得到一個標準的http請求消息頭,通常是如下格式:
GET /netty-4.1.3 HTTP/1.1
host: localhost:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebkit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
Content-Length:0
-
消息頭主要字段說明
KEY名稱 | 作用 |
---|---|
Accept | 請求報頭域用於指定客戶端接受哪些類型的信息。例如 Accept: image/gif,表示希望接受gif圖像格式的資源 |
Accept-Charset | 請求報頭域用於指定客戶端接受的字符集。例如 Accept-Charset: iso8859-1,gb2312, 如果請求消息中沒有設置這個域, 默認任何字符集都是可以接受的 |
Accept-Encoding | 請求報頭域,類似於Accept,但是它用於指定可以接受的內容編碼。例如Accept-Encoding:gzip,deflate,如果請求 消息中沒有設置這個域,則服務器默認客戶端對各種內容編碼都可以接受 |
Acccept-Language | 請求報頭域,類似於Accept,但是它用於指定一種自然語言。例如Accept-Language:zh-cn, 如果請求消息中沒有設置這個域,則服務器默認客戶端對各種語言都可以接受 |
Authorization | 請求報頭域主要用於證明客戶端擁有權限查看某個資源,當瀏覽器訪問某個頁面時,如果收到服務器的相應代碼 爲401(未授權),可以發送一個包含Authorization報頭域的請求,要求服務器對其進行認證 |
Host | 發送請求時,該報頭域是必須的,用於指定被請求資源的Internet地址和端口號,它通常是從http請求的URL中提取出來 |
User-Agent | 請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器 |
Content-Length | 請求消息體的長度 |
Content-Type | 表示後面的文檔屬於什麼MIME類型。Servlet默認爲text/plain,但通常需要顯示指定爲text/html。 由於經常要設置Content-Type,因此HttpServletResponse提供了一個專用的方法setContentType |
Connection | 連接類型。例如Connection:keep-alive |
Websocket的http請求頭信息結構
Host:localhost:8888
Connection:Upgrade
Pragma:no-cache
Cache-Control:no-cache
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
Upgrade:websocket
Origin:http://localhost:63342
Sec-WebSocket-Version:13
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Cookie:Idea-f913c00a=e413601c-2507-43f2-ad7b-2a13a1f79f09
x-forwarded-for:192.168.6.12
Sec-WebSocket-Key:YNPUr9CTgbwWtzx4j6woEg==
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
content-length:0
相比標準的http請求,主要區別在於以下幾個key:
- Connection-->連接類型不是keep-alive,而是upgrade
- Upgrade-->指定通訊連接爲websocket類型
- Sec-WebSocket-Version-->指定websocket版本號
- Sec-WebSocket-Key-->websocket通訊生成的密鑰
- Sec-WebSocket-Extensions-->websocket通訊的其他擴展信息
有關websocket規範和定義以及介紹可以參考如下鏈接
RFC6455規範 https://tools.ietf.org/html/rfc6455#section-5.5
websocket介紹設計 https://websockets.readthedocs.io/en/stable/design.html