HTTP协议常见面试题
1、什么是长连接、短连接?
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。再次访问时浏览器就会重新建立一个HTTP会话。
从HTTP/1.1起,默认使用长连接。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。(HTTP只是个行为准则,而TCP才是落地实现。)
2、 http 常见的状态码有哪些?
- 200 OK 客户端请求成功
- 204 No Content 请求成功处理,没有实体的主体返回
- 301 Moved Permanently 永久重定向,资源已永久分配新URI
- 302 Found 临时重定向,资源已临时分配新URI
- 400 Bad Request 请求报文语法错误或参数错误
- 401 Unauthorized 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务
- 404 Not Found 请求资源不存在
- 500 Internal Server Error 服务器故障或Web应用故障
- 503 Service Unavailable 服务器超负载或停机维护
3、 GET 和 POST 的区别?
- GET请求的数据通过URL传递,而POST是放在Request body中(以 ?分割 URL 和传输数据,参数之间以 &相连)
- GET请求在URL中传送的参数是有长度限制的,而POST没有
- GET没有POST安全性高,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
4、 Cookie 和 Session 的区别?
- Cookie数据存放在客户的浏览器上,Session数据放在服务器上。
- Session中保存的是对象,cookie中保存的是字符串。
- Cookie的安全性一般,他人可通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优。
- 单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。
- Session 可以放在 文件、数据库或内存中
- Session 不能区分路径,同一个用户在访问一个网站期间,所有的Session在任何一个地方都可以访问到。而Cookie中如果设置了路径参数,那么同一个网站中不同路径下的Cookie互相是访问不到的。
- Session 的运行依赖Session ID,而 Session ID 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。
5、请求转发(Forward)和重定向(Redirect)的区别
转发过程:
客户浏览器发送http请求----> web服务器接受此请求----> 调用内部的一个方法在容器内部完成请求处理和转发动作----> 将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:
客户浏览器发送http请求----> web服务器接受后发送302状态码响应及对应新的location给客户浏览器--> 客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----> 服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?