浅谈HTTP

参考文 献:
  1. http://hpoenixf.com/%E9%9D%A2%E8%AF%95%E5%BF%85%E8%80%83%E4%B9%8Bhttp%E7%8A%B6%E6%80%81%E7%A0%81%E6%9C%89%E5%93%AA%E4%BA%9B.html
  2. https://juejin.im/post/5a0ce1d95188253e24708454
  3. http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/
  4. https://juejin.im/post/5c0ce870f265da61171c8c66#heading-1
  • 定义        
        HTTP全称 超文本传输协议,是 应用层协议。在上网浏览网页的时候,浏览器和web服务器之间就会通过HTTP在Internet上进行数据的发送和接收。HTTP是一个 基于请求/响应(Request/Response)模式的无状态协议
 
  • 特点
  1. 支持客户端 /服务器模式(C/S系统)
  2. 通信速度快:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快;
  3. 传输类型多样HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记;
  4. 无连接无连接是指限制每次连接只处理一个请求。服务器处理完客户端的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间;
  5. 无状态:HTTP协议是 无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续要用到前面的数据需要重传。在身份验证的时候,每次请求都要传递身份信息很浪费资源。
   PS:
  • 流(Stream):已建立的TCP连接上的双向字节流,可以承载一个或多个消息。
  • 消息(Message):一个完整的HTTP请求或响应,由一个或多个帧组成。特定消息的帧在同一个流上发送,这意味着一个HTTP请求或响应只能在一个流上发送。
  • 帧(Frame):通信的基本单位。
    一个TCP连接上可以有任意数量的流。

HTTP1.1

  • 缺点
  1. 线头阻塞:若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞。
  2. 多个TCP连接:虽然HTTP1.1管线化可以支持请求并发,但是很多浏览器都禁用了管线化,所以1.1建立请求并发依赖于多个TCP连接,但是多个TCP连接成本高,还会存在 慢启动的问题。
  3. 客户端需要主动请求
  4. 头部冗余,采用文本格式:HTTP/1.X版本采用文本格式,首部未压缩,而且每一个请求都会带上cookie、user-agent等完全相同的首部。
        PS: 一旦一个TCP连接建立之后,就进入了发送数据状态,刚开始TCP协议会采用一个非常慢的速度去发送数据,然后慢慢加快发送数据的速度,直到发送数据的速度达到一个理想状态,我们把这个过程称为慢启动。
        你可以把每个TCP发送数据的过程看成是一辆车的启动过程,当刚进入公路时,会有从0到一个稳定速度的 提速过程,TCP的慢启动就类似于该过程。
        慢启动是TCP为了减少网络拥塞的一种策略,我们是没有办法改变的。
 
 

HTTP2.0

  • 改良
  1. 二进制分帧层: 2.0性能提升的核心就在于二进制分帧层,HTTP2是二进制协议,它采用二进制传输数据而不是1.X的文本格式
  2. 多路复用:让所有的通信都在一个TCP连接上完成。HTTP2建立一个TCP连接以后,一个连接上可以有多个流(stream),一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  3. 头部压缩。
  4. 服务器端推送:服务器预测客户端需要的资源,主动推送到客户端。例如:客户端请求index.html。服务器端会推送script.js和style.css。实现原理就是客户端发出页面请求以后,服务器分析这个请求所依赖的其他资源,然后主动推送到客户端的缓存。

状态码

        详细可参考 http://tool.oschina.net/commons?type=5
 
状态码
对应的信息
1XX(临时响应码)
临时响应,表示请求已接收,继续处理
100 Continue
请求者应当继续提出请求。 服务器已收到请求的一部分正在等待其余部分
101 Switching Protocols
切换协议,请求者已要求服务器切换协议,服务器已确认并准备切换, 只能切换到更高级的协议
2XX(成功状态码)
用于表示请求已被成功接收
200 OK
从客户端发来的请求在服务器端被正常处理了。一般用于POST和GET请求
204 No Content
请求已经成功处理但是没有内容返回也不允许返回任何实体的主体。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
206 Partial Content
表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容
3XX(重定向状态码)
用于表示资源(网页等)被永久转移到其他URL,也就是所谓的重定向
301 Moved Permanently
永久性重定向,表示请求的资源已经被分配了新的URI(统一资源标识符),以后应该使用资源现在所指的URI
302 Found
临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。
303 See Other
表示由于请求对应的资源存在另一个URI,应该使用GET方法定向获取请求的资源
304 Not Modified
如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变。( 协商缓存
4XX(客户端错误状态码)
客户端错误——请求有语法错误/请求无法实现
400 Bad Request
报文中存在语法错误。浏览器会像对待200 OK一样对待该状态码
401 Unauthorized
发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。 若之前已进行过一次请求,则表示用户认证失败
403 Forbidden
请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现问题等情况都会出现403。
404 Not Found
服务器无法找到请求的资源。服务器端拒绝请求且不想说明理由时也可以使用。
405 Method Not Allowed
客户端请求的方法虽然能被服务器识别,但是服务器禁止使用该方法,GET和HEAD应该总是允许客户端进行访问,客户端可以通过OPTIONS方法来查看服务器允许的访问方法。
5XX(服务器错误状态码)
服务器端错误——服务器未能实现合法的请求
500 Internal Server Error
服务器端在执行请求时发生了错误,也有可能是web应用存在的bug或者某些临时的故障
502 Bad Gateway
扮演网关或代理角色的服务器从上游服务器收到的响应是无效的。该错误需要有途径的web服务器或者代理服务器对其修复
503 Service Unavailable
服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。

你可能感兴趣的:(网络请求)