HTTP协议类
- HTTP的主要特点
- HTTP报文的组成
- HTTP方法
- POST和GET的区别
- HTTP的状态码
- 什么是持久连接
- 什么是管线化
http的主要特点
1.简单快捷:当客户端向服务器端发送请求时,只是简单的填写请求路径即可,然后就可以通过浏览器或其他方式将该请求发送就行了。比较常用的请求方法有三种,分别是:GET、HEAD、POST。不同的请求方法使得客户端和服务器端联系的方式各不相同。因为HTTP协议比较简单,所以HTTP服务器的程序规模相对比较小,从而使得通信的速度非常快。
2.灵活 :Http协议允许客户端和服务器端传输任意类型任意格式的数据对象。这些不同的类型由Content-Type标记。
3.无连接:每次建立的连接只处理一个客户端请求,当服务器处理完客户端的请求之后,服务器端立即断开连接。
4.无状态:无状态是指协议对于请求的处理没有记忆功能。
HTTP报文的组成
HTTP 报文有 请求报文 和 响应报文 两种。
请求报文:从客户向服务器发送请求报文。
响应报文:从服务端到客户的回答。
HTTP 请求报文由请求行、请求头、空行 和 请求体
请求行:请求行由方法字段、URL 字段 和HTTP 协议、版本字段 3 个部分组成
请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
● User-Agent:产生请求的浏览器类型;
● Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ */* ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;
● Accept-Language:客户端可接受的自然语言;
● Accept-Encoding:客户端可接受的编码压缩格式;
● Accept-Charset:可接受的应答的字符集;
● Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;
● connection:连接方式(close 或 keepalive);
● Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;
空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;
请求体:请求体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;
HTTP 响应报文
HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成,如下图所示:
状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;
空行:最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。
响应包体:服务器返回给客户端的文本信息;
HTTP方法
GET:用于获取资源的方法
POST:一般用于传输资源的方法,例如表单提交
PUT:用于更新资源的方法
DELETE:用于删除资源的方法
HEAD:获得报文首部的方法
在实现项目中put,delete方法很少用一般用get,post方法差不多。
get方法和post方法的区别
1.参数的长度不同。get请求参数长度是受限制的,post没有限制 2.浏览器后退的请求不一样。get在浏览器回退的时候是无害的,而post会重新提交请求。 3.请求参数位置不同。get参数是能过URL传递,post放在请求体里 4.get请求会被浏览器主动缓存,post不会 5.get没有post安全 6.get请求的参数会保留在浏览器历史记录里,面post的参数不会
HTTP的状态码
1**(信息类)::表示接收到请求并且继续处理
2**(响应成功):表示动作被成功接收、理解和接受
3**(重定向类):为了完成指定的动作,必须接受进一步处理
4**(客户端错误类):请求包含错误语法或不能正确执行
5**(服务端错误类):服务器不能正确执行一个正确的请求
常用的
持久连接
http协议采用“请示-应答”模式,当使用普通模式,非keep-alive模式,每个请求、应答客户和服务器都要新建一个连接,完成之后就立即断开
当使用keep-alive时,使客户端服到服务器端的连接持续有交,当出现对服务器的后继请求时,Keep-alive功能避免或者重新的建立连接http1.1版本才支持
http://www.cnblogs.com/cswuyg/p/3653263.html
管线化
在使用持久连接的情况下,某个连接 上消息的传递类似于
请求1 -> 响应1 -->请求2 -> 响应2 -->请求3 -> 响应3
某个连接上的消息变成了这样
请求1 -> >请求2 -->请求3-> 响应1 -->响应2 -> 响应3
管线化特点
- 不是持久连接就不能使用管道。仅HTTP/1.1版本的协议
- 支持get和head请求,不应该使用管道化发送重复发送会有副作用的请求(如post,重复提交)
- 必须按照同样的发送顺序回送响应,因为报文没有标签,很可能就顺序就乱咯。
- 初次创建连接不应该启动管线机制,服务器不一定支持HTTP/1.1版本的协议
- 性能提升不一定特别好,所以chrome,firefox默认未开启管线化支持
参考:http://network.chinabyte.com/401/13238901.shtml