网络相关面试题及思考(HTTP类)

本文深入解析HTTP状态码,探讨Cookie与Session的工作原理,介绍HTTPS加密流程,以及从URL输入到页面显示的全过程,为理解Web通信提供全面视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP状态码,cookie字段,cookie一般存的是什么,session怎么存在的

HTTP状态码
1 信息状态码
2 成功状态码

  • 200 OK
  • 204 No Content
  • 206 Partial Content 范围请求

3 重定向状态码

  • 301 Moved Permanently 永久重定向
  • 302 Found 临时重定向
  • 303 See Other 与302类似,但希望以GET请求新URI
  • 307 Temporary Redirect 临时重定向 遵循标准 不从POST变成GET

4 客户端错误状态码

  • 400 Bad Request 语法错误
  • 401 Unauthorized 需要认证或认证失败,首次会有认证窗口
  • 403 Forbidden
  • 404 Not Found

5 服务器错误状态码

  • 500 Internal Server Error
  • 503 Service Unavailable
  • 504 Gateway Timeout

Cookie字段
HTTP是无状态协议,引入Cookie是为了达到状态管理的目的
Cookie会根据响应报文的Set-Cookie的Header信息,客户端保存对应Cookie,在下次请求中会在请求报文带上对应Cookie值发送出去。服务端对比Cookie与记录即可知道之前的状态信息。

Set-Cookie字段的属性
NAME=VALUE
expires=DATE
path=PATH
domain=域名
Secure
HttpOnly

Session
Session的理解应该是服务端创建的会话标识,可以将Session放在Cookie中,也可以将Session放在URL中,因此禁用Cookie也能够继续使用Session。当会话结束,服务器端可以选择Destory Session

HTTP的请求方式有哪些
  • GET 获取资源
  • POST 传输实体主体
  • PUT 传输文件 自身不带验证机制
  • HEAD 获取首部报文 和GET一样但是没有body 用于确认有效性和更新日期
  • DELETE 删除文件 和PUT类似
  • OPTIONS 询问支持的方法
  • TRACE 追踪路径 请求Header中天如Max-Forward,每经过一个服务器端减1,到0时停止,可查询修改/篡改
  • CONNECT 要求用隧道协议连接代理
强缓存和协商缓存

https://github.com/amandakelake/blog/issues/41

HTTPS怎么加密

HTTP+加密+认证+完整性保护=HTTPS。HTTPS通信双方使用对称密钥加密、解密通信内容,在建立SSL时交换此对称密钥使用的是非对称加密,认证机构将公钥与认证证书绑定,公开密钥是植入在浏览器中的。
通信过程(SSL握手过程):

  • 客户端发送指定SSL版本、加密组件(Cipher Suite)及ClientHello报文
  • Server响应ServerHello,SSL版本和加密组件
  • Server发送Server Hello Done,完成初步SSL握手
  • Client发送ClientClient Key Exchange报文,使用公钥加密,包含Pre-master secret随机密码串
  • Client继续发送Change Cipher Spec报文,使用Pre-master secret加密
  • Client发送Finished报文,包含连接至今的整体校验值
  • Server发送Change Cipher Spec报文
  • Server发送Finished报文
  • 开始发送应用层请求
  • 响应应用层请求
  • Client断开连接,发送close_notify报文,TCP FIN报文

详细Handshake过程阅读https://tools.ietf.org/html/rfc6101#page-21

      Client                                                Server

      ClientHello                   -------->
                                                       ServerHello
                                                      Certificate*
                                                ServerKeyExchange*
                                               CertificateRequest*
                                    <--------      ServerHelloDone
      Certificate*
      ClientKeyExchange
      CertificateVerify*
      [ChangeCipherSpec]
      Finished                      -------->
                                                [ChangeCipherSpec]
                                    <--------             Finished
      Application Data              <------->     Application Data
      
      * Indicates optional or situation-dependent messages that are not
        always sent.
从URL输入到页面显示会有哪些步骤
  • Client需要访问的域名通过DNS解析得到对应IP
  • Client请求对应IP访问服务,发起HTTP请求
  • HTTP请求通过TCP分割成报文
  • 通过IP协议寻找对方的地址
  • 对方的TCP接受报文(两个TCP间有三次握手过程)并重组报文
  • 对方的HTTP服务响应,同样通过TCP/IP回传
  • Client根据响应结果进行页面的展示和渲染
HTTPS有几次握手 / SSL握手过程
  • Client发送ClientHello
  • Server发送ServerHello、Certificate、ServerHelloDone
  • Client使用Server给的公钥进行加密,发送Pre-master secret随机密码串,用于加密
  • Client发送ChangeCipherSpec报文,使用Pre-master secret加密
  • Client发送Finished报文,包含校验值
  • Server发送ChangeCipherSpec报文,发送Finished报文
GET和POST分别进行几次数据交互

暂时没有验证的说法:
GET会产生1个TCP包;
POST会发送两个TCP包,第一个包包含头部信息,Server收到后会响应100,等待;第二个包包含POST的内容,接受完后Server才会进行响应200/400/500等。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值