Q1: 怎么理解HTTP的无状态?
- 服务端不会记住之前的连接
- 每个request都是唯一且独立的
- cookie和session让连接变得有状态
- 举例:我登陆了淘宝之后才能看到我的购物车,我不登陆的话我就无法看到购物车,是cookie和session让服务端记住了我有登陆过这件事。
Q2: http有哪些缓存策略?
- 强制缓存
- 客户端初次请求后,服务器返回资源和
Cache-Control,之后客户端再次请求,就是本地缓存返回资源了,而不是服务端
- 客户端初次请求后,服务器返回资源和
- 协商缓存
- 客户端初次请求后,服务器返回资源和资源标识,标识可以是
Last-Modified最后修改时间或者是Etag资源的唯一标识,如果返回的是Last-Modified,当客户端再次请求时,Request Headers会带着if-Modified-Since,服务端判断if-Modified-Since和资源最后修改时间是否一样,如果一样的话则返回304,不一样的话说明资源已经更新了,就返回新的资源和新的Last-Modified. 如果是Etag的话,客户端再次请求时会在Request Headers带着if-None-Match,服务端判断if-None-Match和现在资源的标识是否一样,如果一样则返回304,不一样就返回新的资源和新的Etag. 总的来说优先使用Etag, 因为Last-Modified记录的时间没办法非常精确,而且如果资源被重复生成内容不变的话,用Etag会更好。
- 客户端初次请求后,服务器返回资源和资源标识,标识可以是
Q3: 说一下常见的http状态码以及对应的场景
- 【101 - 切换协议 Switching Protocol】 服务器已经接受了客户端的协议切换请求,并且将切换到不同的协议进行进一步的通信。
- 【200 - 正常访问 OK】,服务器返回请求的数据。
- 【301 - 永久重定向 Moved Permanently】 请求的资源已经被转移到新的网址上,浏览器会自动跳转的,新网址可以在返回的location header里找到
- 【302 - 临时重定向 Move Temporarily】 请求的资源被暂时转移到了新网址上,浏览器会自动跳转的,新网址可以在返回的location header里找到
- 【304 - 资源未被修改 Not Modified】 用户进行第二次请求该资源时,服务端如果确定资源和之前的一样,则返回304告诉用户可以用缓存的资源,否则返回200和最新的资源。
- 【400 - 错误请求 Bad Request】 由于客户端请求中存在格式错误,服务器无法处理请求, 比如缺少某些参数。
- 【401 - 未经证实 Unauthorized】 用于缺失或者错误的身份验证,比如没登陆淘宝就去访问购物车,服务器不知道你是谁,但是你登录之后有了身份凭证然后再次请求就可以访问了。
- 【403 - 未经许可 Forbidden】 用户经过服务器验证了,服务器知道你是谁,但是未被服务器授权去请求某些资源,服务器拒绝返回这些资源,不管你修改什么修改身份都没用,请求多次都会被拒绝。
- 【404 - 未发现指定网址 Not Found】 可能是输错网址或者原本的资源已经被删除
- 【500 - 服务器错误 Internal Server Error】 服务器可能没启动
- 【504 - 网关超时 Gateway Timeout】 表示网关无法在预定的时间内获得另一个服务器的响应,可能是因为服务器过载或者是网络问题
401和403的英文有争议,401可以认为是Unauthenticated, 403可以认为是Unauthorized.
Q4: http和https的区别
- HTTPS是HTTP协议的安全版本
- HTTP协议的数据传输是明文的,是不安全的,HTTPS对数据进行了加密处理
- http默认端口是80,https默认端口是443