0%

JavaWeb学习(二)——http

HTTP

常用响应头

  HTTP响应中的常用响应头(消息头)
  Location: 服务器通过这个头,来告诉浏览器跳到哪里
  Server:服务器通过这个头,告诉浏览器服务器的型号
  Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
  Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
  Content-Language: 服务器通过这个头,告诉浏览器语言环境
  Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
  Refresh:服务器通过这个头,告诉浏览器定时刷新
  Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据
  Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
  Expires: -1 控制浏览器不要缓存
  Cache-Control: no-cache
  Pragma: no-cache

常用的状态码简述

  • 2XX

一般是请求成功

200 正常处理

204 成功处理,但服务器没有新数据返回,显示页面不更新

206 对服务器进行范围请求,只返回一部分数据

  • 3XX

一般表示重定向

301 请求的资源已分配了新的URI中,URL地址改变了。【永久重定向】

302 请求的资源临时分配了新的URI中,URL地址没变【临时重定向】

303 与302相同的功能,但明确客户端应该采用GET方式来获取资源

304 发送了附带请求,但不符合条件【返回未过期的缓存数据】

307 与302相同,但不会把POST请求变成GET

  • 4XX

表示客户端出错了。

400 请求报文语法错误了

401 需要认证身份

403 没有权限访问

404 服务器没有这个资源

  • 5XX

服务器出错了

500 内部资源出错了

503 服务器正忙

HTTP版本区别

HTTP1.0和HTTP1.1最主要的区别就是:

  • HTTP1.1默认是持久化连接

相对于持久化连接还有另外比较重要的改动:

  • HTTP 1.1增加host字段
  • HTTP 1.1中引入了Chunked transfer-coding,范围请求,实现断点续传(实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输)
  • HTTP 1.1管线化(pipelining)理论,客户端可以同时发出多个HTTP请求,而不用一个个等待响应之后再请求
    • 注意:这个pipelining仅仅是限于理论场景下,大部分桌面浏览器仍然会选择默认关闭HTTP pipelining!
    • 所以现在使用HTTP1.1协议的应用,都是有可能会开多个TCP连接的!

参考资料:

HTTP2基础

直观比较一下HTTP2和HTTP1.1的区别:

HTTP 1.1提出了管线化(pipelining)理论,但是仅仅是限于理论的阶段上,这个功能默认还是关闭了的。

管线化(pipelining)和非管线化的区别

HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应!

HTTP1.1新改动:

  • 持久连接
  • 请求管道化
  • 增加缓存处理(新的字段如cache-control)
  • 增加Host字段、支持断点传输等

HTTP2新改动:

  • 二进制分帧
  • 多路复用
  • 头部压缩
  • 服务器推送

参考资料:

HTTPS

使用了SSL建立安全的通信线路。

HTTPS使用的是共享密钥和公开私有密钥混合来进行加密的。由于公开私有密钥需要太多的资源,不可能一直以公开私有密钥进行通信。因此,HTTP在建立通信线路的时候使用公开私有密钥,当建立完连接后,随后就使用共享密钥进行加密和解密了

  • 对称加密:
    • 加密和解密都是用同一个密钥
  • 非对称加密:
    • 加密用公开的密钥,解密用私钥
    • (私钥只有自己知道,公开的密钥大家都知道)
  • 数字签名:
    • 验证传输的内容是对方发送的数据
    • 发送的数据没有被篡改过
  • 数字证书 (Certificate)
    • 认证机构证明是真实的服务器发送的数据

面试题

HTTP面试题都在这里 - SegmentFault 思否