HTTP协议类

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**(服务端错误类):服务器不能正确执行一个正确的请求

常用的

100 Continue  继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK   正常返回信息
206 页面有视频播放, 服务器完成了一个包含Range头信息的局部请求时被发送的。迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
202 Accepted  服务器已接受请求,但尚未处理
301 Moved Permanently  请求的网页已永久移动到新位置
302 Found  临时性重定向
304 Not Modified  服务器告诉客户端本地的缓存文档还可以继续使用
400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求
401 Unauthorized  请求未授权
403 Forbidden  禁止访问
404 Not Found  找不到如何与 URI 相匹配的资源
500 Internal Server Error  最常见的服务器端错误
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)
 
详情请看:http://www.cnblogs.com/myzy/p/6110725.html

持久连接

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

原文地址:https://www.cnblogs.com/myzy/p/7482520.html