HTTP协议介绍
HTTTP协议介绍
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议的主要特点
- 支持Client/Server 模式
- 简单 - 客户向服务器其你去服务时,只需指定服务URL,携带必要的请求参数或者消息体;
- 灵活 - HTTP 允许传输任意类型的数据对象,传输的内容类型由HTTP消息头中的Content-Type加以标记
- 无状态 - HTTP 协议的无状态协议,无状态是指协议对于事物处理没有记忆能力。缺少状态以为着如果后续处理要之前的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快,负载交轻。
HTTP请求消息
HTTP请求由三部分组成:
- HTTP 请求行
- Method Request-URI HTTP-Version CRLF
Method : 有常见的一些方法,
- GET:请求获取Request-URI 所表示的资源;主要以URL+?+ param1¶m2¶mn ,因此在传输数据大小、安全性上会弱一些
- POST :在Request-URI所表示的资源后附加新的提交数据;数据会保存在HTTP请求的body里面,在数据大小上没有限制、安全性高;
- HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS
- HTTP 消息头
HTTP消息请求表如下(HttpRequest):
名称 Key | 作 用 |
---|---|
Accept | 用于定制客户端接受那些类型的信息。例如:Accept:image/gif 表明客户端希望接受GIF图像格式的资源 |
Accept-Charset | 用于指定客户端接受的字符集。例如:Accept-Charset:iso-8859-1,gb2312,utf-8 ,如果在请求消息中没有设置这个域,默认是任何字符集都可以接受。 |
Accept-Encoding | 类似于Accept,但是它用于指定一种自然语言。例如:Accept-Language:zh-cn,如果请求消息中没有设置这个报头域,则服务器假定客户端对各种语言都可以接受。 |
Accept-Language | 类似于Accept,但是它用于指定一种自然语言。例如:Accept-Language:zh-cn,如果请求消息中没有设置这个报头域,则服务器假定客户端对各种语言都可以接受。 |
Authorization | 主要用于证明客户端有权查看某个资源。 |
Host | 发送请求时,该报头域是必需的,用于指定被请求的资源的Internet主机和端口号,它通常是从HTTP请求的URL中提取出来的。 |
User-Agent | 允许客户端将它的操作系统、浏览器和其它属性告诉服务器 |
Content-Length | 请求消息体的长度 |
Content-Type | 表示后面文档的MIME类型,一般常用的有application/json,text/html 等 |
Connection | 请求连接类型 |
HTTP消息响应(HttpResponse):
主要格式基本不变:
状态码 | 状态描述 |
---|---|
1xx | 指示信息。表示请求已接收,继续处理; |
2xx | 成功。表示请求已被成功接收、理解、接受; |
3xx | 重定向。要完成请求必须进行更进一步的操作; |
4xx | 客户端错误。请求有语法错误或者请求无法实现; |
5xx | 服务器端错误。服务器未能处理请求。 |
- HTTP 请求正文
HTTP协议的主要弊端:
- HTTP协议为半双工协议。半双工协议指数据可以在客户端和服务端两个方向上传输,但是不能同时传输。它意味着在同一时刻,只有一个方向上的数据传送;
- HTTP消息冗长而繁琐。HTTP消息包含消息头、消息体、换行符等,通常情况下采用文本方式传输,相比于其他的二进制通信协议,冗长而繁琐;
- 针对服务器推送的黑客攻击。例如长时间轮询
Netty 建立Http请求