码迷,mamicode.com
首页 > Web开发 > 详细

http

时间:2016-08-10 23:00:26      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:服务器   应用层   服务端   客户端   能力   

一.http是应用层的协议,具有五个特点:

(1) 支持客户端/服务端模式

(2)简单快速:基于请求响应,请求响应一次,关闭连接

(3)灵活:http可以传输任意类型的数据对象

(4)无连接:限制每次连接只处理一个请求,服务器处理完客户请求,并收到客户应答后,就断开连接

(5)无状态:协议对于事务处理是没有记忆能力的

二.HTTP请求和应答

http请求内容包括:请求行、头部字段和可选的消息体

请求行包括:方法、URL(路径和参数)、http版本,中间用"\r‘或‘\n‘隔开

消息报头包括:字段名称、冒号、空格和字段的值

头部字段之后有一空行。之后还有一行可选的消息体。如果消息体不为空,则http头部字段中包括描述该消息体长度的字段‘content-length‘

2.http应答包括内容:状态行、头部字段和可选的消息体

状态行包括:协议版本、状态码和状态描述

消息报头包括:字段名称、冒号、空格和字段的值

头部字段之后有一空行。之后还有一行可选的消息体。如果消息体不为空,则http头部字段中包括描述该消息体长度的字段‘content-length‘

三。keep-alive模式

 http协议普通模式下,一请求和应答之后,会关闭连接,在keep-alive模式下,客户端和服务器端的连接不关闭。需要在http头部字段加入:connect:keep-alive

使用keep-alive‘的优点可以避免多次连接,节省了开销,高效。

使用keep-alive字段如何判断消息是否接收玩。可以通过头部字段的content-length。除了利用头部字段content-length,当客户端向服务器端请求静态页面或者图片时,服务器知道需要内容的大小,可以直接通过content-length,但是如果是动态页面等时,服务器是不可能预先知道内容大小,这时就可以使用Transfer-Encoding:chunk模式来传输 数据了。即如果要一边产生数据,一边发给客户端,服务器就需要使用"Transfer-Encoding:  chunked"这样的方式来代替Content-Length。

chunk编码将数据分成一块一块的发生。Chunked编码将使用若干个Chunk串连而成,由一个标明长度为0 的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定正文的字符总数(十六进制的数字 )和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF) 隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。


http

标签:服务器   应用层   服务端   客户端   能力   

原文地址:http://10810512.blog.51cto.com/10800512/1836653

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!