Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[INTERVIEW]HTTP #34

Open
kangkai124 opened this issue Jul 29, 2019 · 3 comments
Open

[INTERVIEW]HTTP #34

kangkai124 opened this issue Jul 29, 2019 · 3 comments
Labels
Question Further information is requested

Comments

@kangkai124
Copy link
Owner

HTTP相关的面试题

@kangkai124
Copy link
Owner Author

kangkai124 commented Jul 29, 2019

1. application/json 和 application/x-www-form-urlencoded 的区别?

答案

form格式是一种“键值对”的数据格式,比如:a=1&b=2&c=3
json 可以包含更复杂的如数组对象等

如果传递的数据比较简单,那么两种方式基本上没什么大区别,但是如果数据比较复杂,比如包含数组、对象等时,就只有json才能胜任了。

@kangkai124
Copy link
Owner Author

kangkai124 commented Jul 29, 2019

2. 三次握手和四次挥手,为什么需要三次和四次?

三次握手之所以是三次是保证client和server均让对方知道自己的接收和发送能力没问题而保证的最小次数。

第一次client => server 只能server判断出client具备发送能力
第二次 server => client client就可以判断出server具备发送和接受能力。此时client还需让server知道自己接收能力没问题于是就有了第三次
第三次 client => server 双方均保证了自己的接收和发送能力没有问题

其中,为了保证后续的握手是为了应答上一个握手,每次握手都会带一个标识 seq,后续的ACK都会对这个seq进行加一来进行确认。

四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭,所以即使没有最后一个包,也需要先回复断开连接的请求,然后再发送关闭请求

@kangkai124 kangkai124 added the Question Further information is requested label Jul 29, 2019
@kangkai124
Copy link
Owner Author

3. 从浏览器输入URL按回车到页面显示都发生了什么

答案

  1. 浏览器根据URL进行DNS查询

    • 首先从DNS缓存中查询

    • 若未在缓存中找到,则不停的向上一级级请求DNS服务器

  2. 取得IP地址,建立TCP连接

  3. 构造HTTP请求报

    • 添加一些HTTP首部

    • 根据同源政策添加cookie

  4. 在TCP连接上发送HTTP报文,等待响应

  5. 服务器处理HTTP请求报文,返回响应HTTP响应报文

  6. 浏览器处理服务器返回的HTTP响应报文,若为HTML则渲染页面,不包括脚本的简单渲染流程如下

    1. 解析DOM、CSSOM
    2. 根据DOM、CSSOM计算render tree
    3. 根据render tree进行layout
    4. paint,至此,用户可以看到页面了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant