web前端面试之http

目录

 

http和https的区别

 Https工作原理:

ssl加密

url访问过程

TCP连接,客户端和服务端通信过程

HTTP请求信息由那3部分组成? 

http状态码

URL和URI有什么区别? 


http和https的区别

  1. https协议需要到ca申请证书,一般免费证书很少,需要交费。
  2. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
httphttps
80端口443端口
无需申请证书需要申请证书
超文本传输协议ssl加密协议
慢(因为会有一个ssl包需要传输)

 Https工作原理:

  1. 服务器给客户端传输证书 证书就是公钥里面包含证书的过期时间证书颁发机构等信息
  2. 客户端验证证书是否过期等 如果一切正常就生成一个随机值(私钥)然后证书对私钥进行加密,发送给服务器
  3. 服务器将消息进行对称加密(简单说就是 将消息和私钥进行混合,只有私钥才能解开消息 正好只有客户端有私钥(安全))发送给客户端
  4. 客户端用私钥进行信息解密

ssl加密

分为对称和非对称加密

  1. 对称加密。 客户端和服务端公用一个密钥对消息加解密。(客户端和服务端约定好一个加密钥匙。客户端在发消息浅用该密匙对消息加密,发送给服务器,服务器在用该密匙进行解密拿到消息)
  2. 非对称加密。客户端和服务端都有公钥和私钥。公钥加密的内容只有对应的私钥解密。私钥自己留着,公钥发给对方。这样发送消息之前,对方的公钥对消息进行加密,受到后在用自己的私钥进行解密。

url访问过程

  1. 在浏览器地址栏输入URL
  2. 浏览器查看缓存,请求资源在缓存中并且未过期,跳转到转码步骤 如果浏览器未缓存,发起新的请求已缓存,检验是否过期,未过期直接提供给客户端,否则进行验证检验是否过期 通常有两个http头进行控制,expires和cache-control。
  3. 浏览器解析URL获取协议,主机,端口,path
  4. 浏览器组装一个http请求 请求报文
  5. 浏览器获取主机ip地址:(dns解析过程)过程:浏览器缓存 -> 本地缓存-> hosts文件 -> 路由器缓存 -> ISP DNS缓存 -> DNS递归查询
  6. 打开一个socket与目标地址建立TCP连接,进行三次握手i. 客户端发送一个TCP的SYN=1,Sep=X的包到服务器端口ii. 服务器返回SYN=1,ACK=X+1,Sep=Y的响应包iii. 客户端发送ACK=Y+1,Sep=Z
  7. TCP连接建立发送http请求。
  8. 服务器接收请求并解析,将请求转发到服务程序
  9. 服务器检查http请求头是否包含缓存验证信息,如果验证缓存新鲜,返回304等对应状态码
  10. 处理程序读取完整请求并准备http响应,可能需要查询数据库等操作
  11. 服务器将响应报文通过TCP连接发送回浏览器
  12. 浏览器接收到http响应,然后根据情况选择关闭TCP连接或者保留重用。(关闭操作进行第四次挥手)主动方发送Fin=1,Ack=Z,Sep=X的报文被动方发送ACK=X+1,Sep=Z报文被动方发送Fin=1,ACK=X,Sep=Y报文主动方发送ACK=Y,Sep=X报文
  13. 浏览器检查响应状态码。状态吗不同 解决的方法不同 1XX 3XX 4XX 5XX区别对待2XX是正常返回
  14. 如果资源可缓存,进行缓存
  15. 对响应解码 例如gzip压缩
  16. 根据资源类型决定如何处理
  17. 假设资源为html文档
  18. 解析html文档 构建dom树 下载资源,构建css树,执行js脚本
  19. 构建dom树
  20. 解析过程遇到图片、样式表、js文件、启动下载
  21. 构建css树
  22. 根据dom树和css树整合构建渲染树
  23. js解析
  24. 显示页面

TCP连接,客户端和服务端通信过程

来源https://segmentfault.com/a/1190000013712747

从 TCP 连接的视角看 Socket 过程:

TCP 三次握手的 Socket 过程:

三次握手.png

  1. 服务器调用socket()bind()listen()完成初始化后,调用accept()阻塞等待;
  2. 客户端 Socket 对象调用connect()向服务器发送了一个 SYN 并阻塞;
  3. 服务器完成了第一次握手,即发送 SYN 和 ACK 应答;
  4. 客户端收到服务端发送的应答之后,从connect()返回,再发送一个 ACK 给服务器;
  5. 服务器 Socket 对象接收客户端第三次握手 ACK 确认,此时服务端从accept()返回,建立连接。

接下来就是两个端的连接对象互相收发数据。
TCP 四次挥手的 Socket 过程:
四次挥手.png

  1. 某个应用进程调用close()主动关闭,发送一个 FIN;
  2. 另一端接收到 FIN 后被动执行关闭,并发送 ACK 确认;
  3. 之后被动执行关闭的应用进程调用close()关闭 Socket,并也发送一个 FIN;
  4. 接收到这个 FIN 的一
  5. 端向另一端 ACK 确认。

HTTP请求信息由那3部分组成? 

1、请求方法URI协议/版本 (例如:GET/haorooms.jspHTTP/1.1)

2、请求头(Request Header)(例如:Accept:image/gif.image/jpeg.*/* Accept-Language:zh-cn Connection:Keep-Alive Host:localhost等等)

3、请求正文

http状态码

  1. 2xx 为开头的都表示请求成功响应.
状态码含义
200请求成功
204请求处理成功,但是没有资源可以返回
206对资源某一部分进行响应,由Content-Range 指定范围的实体内容。
  1. 3xx 为开头的都表示需要进行附加操作以完成请求
状态码含义
301永久性重定向,该状态码表示请求的资源已经重新分配 URI,以后应该使用资源现有的 URI
302临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
304该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。
307临时重定向。该状态码与 302 Found 有着相同的含义。
  1. 以 4xx 的响应结果表明客户端是发生错误的原因所在。
状态码含义
400该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
401该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
403该状态码表明对请求资源的访问被服务器拒绝了。
404该状态码表明服务器上无法找到请求的资源。
  1. 以 5xx 为开头的响应标头都表示服务器本身发生错误
状态码含义
500该状态码表明服务器端在执行请求时发生了错误。
503该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

URL和URI有什么区别? 

get和post请求的区别

getpost
参数长度有限制参数长度无限制
get会把请求的数据附加在url上post请求会把数据附加在请求体中
get是明文传输post不是明文传输
请求能缓存不能缓存
 GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencoded

application/x-www-form-urlencoded 或 multipart/form-data。

为二进制数据使用多重编码。

历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。
对数据长度的限制

是的。当发送数据时,GET 方法向 URL 添加数据;

URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

无限制。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性数据在 URL 中对所有人都是可见的。数据不会显示在 URL 中。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值