http请求消息头主要结构

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章