面试题-计算机网络-HTTP部分

前言

计算机网络2-HTTP部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮助。

系列文章:

面试题-Java基础

面试题-Java集合

面试题-Java多线程基础、实现工具和可见性保证

面试题-线程池和原子变量

面试题-Java虚拟机

面试题-计算机网络1

HTTP

  1. URI和URL的区别

    • URI是统一资源标识符,可以理解为一个抽象的概念或者功能需求

    • URL是统一资源定位符URL是URI的一种实现用定位的方式实现唯一标识的功能

    互联网中有许多的资源,如何获取一个具体的资源呢?

    URI定义了一种获取资源的方式:如果想要获取资源,就需要给每个资源定义一种唯一的标识符,然后按照定义的唯一标识符去获取资源。URL代表了URI概念的一种具体实现。

  2. HTTP方法

    • GET:用于请求服务器发送某个资源
    • HEAD:和GET方法类似,但是只会返回首部,不会返回实体
    • PUT:用于请求服务器 使用请求主体部分中包含的内容 创建或修改 一个以请求URL 命名的文档。
    • POST:用于向服务器发送数据
    • DELETE:用于请求服务器删除 请求URL代表的资源文档
    • OPTIONS:用于请求服务器 告知 支持的各项功能
  3. HTTP的首部的分类

    • 通用首部:客户端和服务器都可以使用的首部
    • 请求首部:请求报文特有的首部
    • 响应头部:响应报文特有的首部
    • 实体首部:说明请求或者响应实体部分信息的首部
    • 扩展首部:由程序开发者自定义的,但可以被HTTP程序接受并转发
  4. 说说你对cookie的认识

  5. 你了解跨域吗?跨域的请求是如何处理的?

    上面问题4中介绍过同源的定义,只要不满足这个要求即为跨域。

    现在的浏览器都实现了CORS标准,在CORS标准中,当发起一个跨域请求时:

    如果是简单请求(GET HEAD POST 并且请求头中不能超出规定的几个字段),会在请求中加入一个Origin字段,Origin字段用来说明,本次请求的来源域(协议主机端口)

    GET /cors HTTP/1.1
    Origin: http://api.bob.com
    Host: api.alice.com
    Accept-Language: en-US
    Connection: keep-alive
    User-Agent: Mozilla/5.0...
    

    如果是非简单请求(简单请求之外的请求),浏览器会在请求之间加入一个预检请求,预检请求是一个OPTIONS请求.

    OPTIONS /cors HTTP/1.1
    Origin: http://api.bob.com
    Access-Control-Request-Method: PUT //必须字段,列出请求会使用哪些方法
    Access-Control-Request-Headers: X-Custom-Header //可选字段,列出请求会额外发送的请求头
    Host: api.alice.com
    Accept-Language: en-US
    Connection: keep-alive
    User-Agent: Mozilla/5.0...
    

    如果检查通过,可以访问,服务端会响应一些CORS字段;如果未通过,则会发送一个200响应,不包含任何CORS字段,浏览器发现后会抛出一个错误,然后用户可以通过XHR中的onerror回调函数捕获错误。

    CORS字段介绍:跨域资源共享 CORS 详解

  6. Session是什么?如何使用Session

    HttpSession是javax.servlet.http中定义的接口,用来在服务端存储用户的信息,目的还是为了保持状态。

    生成的SessionID可以存储在cookie中或者通过URL传递过来

    好文章:Tomcat 是如何管理Session的?

  7. HTTP 1.0和HTTP 1.1的主要区别是什么?

    • 连接复用:1.0协议每个请求都是短连接,请求完毕后就会关闭TCP连接。TCP建立连接的过程成本较高,并且因为拥塞控制中的慢启动机制会影响新建立连接的发送速率,1.1版本中连接默认可以被多个请求复用了。
    • 管道机制:1.1版本允许在未收到上一个请求的响应时就可以发送下一个请求,提高效率。
  8. Token机制和Session机制的区别?

    • Session的机制:Session是保存在服务器内存中的数据,用户登录成功后,会返回一个SessionID,用户登录时,会携带SessionID,服务器根据SessionID拿到Session数据,从而得知用户是谁。
    • Session的缺点:当需要部署多台服务器,就需要考虑Session如何在多台服务器同步以避免用户重复登陆问题。如果没有token,可以使用redis等缓存系统保存状态信息,多台服务器都从redis中查询信息,并且利用redis的过期失效机制来清除session。

    token的核心是自含义,也就是说一旦成功登录,服务器返回给用户的token信息就包含了用户身份的信息(比如user_id),服务器不需要存储相关信息,当用户拿着token访问URL时,通过解密token就可以知道用户是谁。另外,token中还可以包含登录的时间戳,服务端在解密时同样可以判断该token是否过期。

未完待续...

参考资料

跨域资源共享 CORS 详解

聊一聊 cookie

HTTP 协议入门

因为一个跨域请求,我差点丢了饭碗

什么是跨域

面试题-计算机网络-HTTP部分

上一篇:【IDE】WebStorm 调整Tab缩进为2空格 -- 为遵循ESLint语法规范


下一篇:javascrip中的confirm小技巧