HTTP 协议类我们需要知道的事

345 阅读4分钟

春季招聘攻略公众号封面首图1.png

1. HTTP 协议的主要特点

  • 简单快速 (URI是固定的,地址栏输入就可以)
  • 灵活 (可以完成不同类型的传输)
  • 无连接 (链接一次就会断掉,不会保持链接)
  • 无状态 (服务端不能通过HTTP 协议直接记录客户端状态)

2. HTTP 报文组成部分

2.1 请求报文

  • 请求行
  • 请求头
  • 空行
  • 请求体

2.2 响应报文

  • 状态行
  • 响应头
  • 空行
  • 响应体

3. HTTP 状态码

3.1 状态码

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

3.2 常用状态码

200 OK  客户端请求成功 

3XX 重定向
301 Moved Permanently    永久重定向,表示请求的资源已经永久的搬到了其他位置
302 Found  临时重定向,表示请求的资源临时搬到了其他位置
303 See Other  表示请求资源存在另一个URI,应使用GET定向获取请求资源
304 Not Modified  表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足,原来缓冲的文档开可以继续使用

4XX 客户端错误
400 Bad Request  表示请求报文存在语法错误或参数错误,服务器不理解
401 Unauthorized  表示发送的请求需要有HTTP认证信息或者是认证失败了,未经授权
403 Forbidden    表示对请求资源的访问被服务器拒绝了
404 Not Found  表示服务器找不到你请求的资源

5XX 服务器错误
500 Internal Server Error  表示服务器执行请求的时候出错了
503 Service Unavailable  表示服务器超负载或正停机维护,无法处理请求
504 网关超时 

4. POST 和 GET 的区别

区别GETPOST
浏览器回退无害的会再次提交请求
URL地址可以被隐藏可以不可以
缓存会被浏览器主动缓存不会,除非手动设置
编码只能进行URL 编码支持多种编码方式
参数保留会完整保存在浏览器历史记录参数不会被保留
长度限制有,具体的数值取决于浏览器和服务器的限制没有
参数类型只接受ASCII字符没有限制
安全性比POST更不安全,参数直接暴露在URL上,不能传输敏感信息比GET安全
参数传递通过URL传递,以 " ? "分割url和传输数据放在Request body 中

5. 持久链接

  • HTTP协议采用“请求- 应答”模式,

5.1 非Keep-Alive 模式(普通模式)

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

5.2 Keep-Alive模式 (又称持久链接、连接重用)

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

  • HTTP 持久连接 (版本是 1.1 才支持持久连接)

6. 管线化

  • 在使用持久连接的情况下,某个连接上消息的传递类似于

    • 请求1 -> 响应1 -> 请求2 -> 响应2-> 请求3 -> 响应3
  • 某个连接上的消息变成了类似这样

    • 请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
  • HTTP协议类 管线化

    • 管线化机制通过持久连线完成,仅HTTP/1.1支持此技术
    • 只有GET和HEAD请求可以进行管线化,而POST则有所限制
    • 初次创建连接时不应启动管线机制,如上面的例子所示,响应返回的顺序并未改变
    • 管线化不会影响响应到来的顺序,如上面的例子所示,响应返回的顺序并未改变
    • HTTP/1.1要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败即可
    • 由于上面提到的服务器端问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理对管线的支持并不好,因此现代浏览器如Chrome和Firefox默认并未开启管线化支持