-
标准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