前端必备的HTTP基础知识

作者: JokerPeng | 来源:发表于2017-03-08 16:23 被阅读0次

    1、HTTP协议的主要特点

    • (1) 简单快速
      每个资源得到URI是固定的,想访问某个资源,只需要输入这个资源对应的URI就可以了。
      (URL(Uniform Resource Location)统一资源定位符,URI(Uniform Resource Identifier)统一资源标识符。URL是URI的子集,URL就是用定位的方式实现的URI。)

    • (2) 灵活
      每个HTTP头部有个Content-Type,一个HTTP协议通过设置不同的Content-Type值,可以完成不同类型的资源的传输。

    • (3) 无连接
      限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

    • (4) 无状态
      HTTP协议对于事务处理没有记忆能力。知乎一句简单回单很好:就是第二次来你无法识别它曾经来过。(人生若只如初见)
      但是,在通过增加cookie和session机制的前提下,现在的网络请求其实是有状态的。

    2、HTTP报文

    HTTP报文分为请求报文响应报文

    • (1) 请求报文:由 请求行、请求头、空行和请求体组成
      请求行包含HTTP方法,页面地址、HTTP协议和版本
      请求头包含一些key: value值来告诉服务端需要哪些内容,要注意哪些类型
      空行: 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
      请求体:即请求正文。
      如下是一个HTTP请求报文示例:
      HTTP请求报文
    • (2) 响应报文:由 状态行、响应头、空行和响应体组成
      状态行由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
      响应头与请求头部类似,为响应报文添加了一些附加信息
      空行: 最后一个响应头之后是一个空行,发送回车符和换行符,通知客户端以下不再有响应头。
      响应体:即响应正文。
      如下是一个HTTP响应报文示例:
      HTTP响应报文

    3、HTTP方法

    常用的HTTP方法有如下5种:
    GET:获取资源
    POST:传输资源
    PUT:更新资源
    DELETE:删除资源
    HEAD:获取报文首部

    4、POST和GET的区别

    主要的区别有如下几点:

    • ① GET在浏览器回退是无害的,而POST会再次提交请求
    • ② GET产生的URL地址可以被收藏,而POST不可以
    • ③ GET请求会被浏览器主动缓存,而POST不会,除非手动设置
    • ④ GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
    • ⑤ GET请求在URL中传送的参数长度是有限制的,基本为2Kb,所以传送参数不要太长,否则会被浏览器截断,而POST没有限制
    • ⑥ GET参数通过URL传递,而POST放在Request body中
    • ⑦ POST比GET安全,因为GET请求参数直接暴露在URL上,所以不能用来传递敏感信息

    5、HTTP状态码

    • 1xx:指示信息。表示请求已经接受,继续处理
    • 2xx:成功。表示请求已被成功接受
    • 3xx:重定向。要完成请求必须进行更进一步的操作
    • 4xx:客户端错误。请求有有语法错误或请求无法实现
    • 5xx:服务器错误。服务器未能实现合法的请求

    常用HTTP状态码:
    200 OK:客户端请求成功
    206 Partual Content:客户发送了一个带有Range头的GET请求,服务器完成了它
    301 Moved Permanently:所有请求的页面已经转移至新的URL(永久重定向
    302 Found:所有请求的页面已经临时转移到新的URL(临时重定向
    304 Not Modifiled:客户端有缓冲的文档并发出了一个条件性的请求,服务器告诉客户,原来缓冲的文档还可以继续使用
    400 Bad Request:客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
    403 Forbidden:请求页面禁止被访问,一般某个地址只允许服务端访问,客服端访问时就会给出403
    404 Not Found:请求资源不存在
    500 Internal Server Error:服务器错误
    503 Server Unavailable:请求未完成,服务器临时过载或宕机,一段时间后可能恢复正常

    6、持久连接

    HTTP协议采用“请求-应答”模式,当使用普通模式,即非 Keep-Alive(持久连接)模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议无连接的协议)

    当使用Keep-Alive模式时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接

    Keep-Alive只有在HTTP/ 1.1才支持,HTTP 1.0版本是不支持的。

    6、管线化

    (1) 什么是管线化?

    持久连接(Keep-Alive)的情况下,某个连接上消息的传递类似于:
    请求1 —> 响应1 —> 请求2 —> 响应2 —> 请求3 —> 响应3

    这个过程中请求一直没有断开的

    HTTP管线化(HTTP pipelining) 连接上的消息变成了这样:
    请求1 —> 请求2 —> 请求3 —> 响应1 —> 响应2 —> 响应3

    请求通道是持久建立的,但并不是请求一次,响应一次,而是将所有请求一次打包过去,然后响应也一次打包回来。

    (2) 管线化特点
    • 管线化通过持久连接完成,仅HTTP/ 1.1支持此技术
    • 只有GET和HEAD请求可以进行管线化,而POST则有所限制
    • 初次创建连接时,不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本协议
    • 管线化不会影响响应到来的顺序,如上面箭头所示,响应返回的顺序并未改变。
    • 开启管线化很可能并不会带来性能上的大幅度提升,而且很多服务端和代理程序对管线化支持并不好,因此现代浏览器像 Chrome 和 Firefox 默认并未开启管线化支持。

    相关文章

      网友评论

        本文标题:前端必备的HTTP基础知识

        本文链接:https://www.haomeiwen.com/subject/trwbgttx.html