主要特点
简单快速:客户向服务器请求服务时,只需传送请求方法和路径,使得HTTP服务器的程序规模小,因而通信速度很快。
灵活:http允许传输任意类型的数据对象
无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
无状态:协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传.
报文组成
请求报文:请求行,请求头,空行,请求体
响应报文:状态行,响应头,空号,响应体
1 POST / HTTP1.1 2 Host:www.wrox.com 3 User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) 4 Content-Type:application/x-www-form-urlencoded 5 Content-Length:40 6 Connection: Keep-Alive 7 8 name=Professional%20Ajax&publisher=Wiley 9 10 第一部分:请求行,标明请求类型以及http1.1版本。 11 第二部分:请求头部,第二行至第六行。 12 第三部分:空行,第七行的空行。(标明接下来的是请求体) 13 第四部分:请求数据,第八行。
http方法
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
get和post区别
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被收藏,而POST不可以。
GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
http状态
1xx响应信息提示
2xx - 成功
200 - OK 一切正常
3xx - 重定向
304 - Not Modified 服务器告诉客户,原来缓冲的文档还可以继续使用
4xx - 客户端错误
403 - Forbidden 资源不可用
404 - Not Found 无法找到指定位置的资源
5xx - 服务器错误
503 - Service Unavailable 服务不可用
持久连接
非持久连接:每个连接处理一个请求-响应事务。
持久连接:每个连接可以处理多个请求-响应事务。
持久连接情况下,服务器发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。
HTTP/1.0 使用非持久连接。 HTTP/1.1 默认使用持久连接。
管线化
将多个HTTP要求(request)整批提交的技术,而在传送过程中不需先等待服务端的回应。
管线化机制须通过持久连接完成,仅HTTP/1.1支持此技术(HTTP/1.0不支持),并且只有GET和HEAD要求可以进行管线化,而POST则有所限制。
初次创建连接时也不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议