HTTP状态码与请求方式全解析【个人八股】
既然前面我们了解了计算机网络是什么?计算机网络的层次结构,计算机网络层次结构之间的工作方式。也了解了什么是DNS解析服务【没看过的小伙伴可以去看看哈!】
那么这一篇文章我们就去尝试着深入刨析一下HTTP
首先是介绍了HTTP常用的状态码以及含义,针对不同的含义,面试官可能会通过对比的去问的方式来考察面试者的掌握程度!
接着是考察了HTTP有哪些请求的方式?
请你说说每种请求方式的特点以及作用
请你说说你对于get方法的理解!幂等性,长度限制,与post的区别
首先我们先从简单的聊起,先谈谈你都知道哪些HTTP的状态码吧?
说说 HTTP 常用的状态码及其含义?
HTTP 状态码用于表示服务器对请求的处理结果,可以分为 5 种:【主要就是下面这5种】
1xx 服务器收到请求,需要进一步操作,例如 100 Continue。
2xx 请求成功处理,例如 200 OK。
3xx 重定向:需要进一步操作以完成请求;例如 304 Not Modified 表示资源未修改,客户端可以使用缓存。
4xx 客户端错误:请求有问题,例如404 Not Found 表示资源不存在。
5xx 服务器错误,例如500 Internal Server Error 表示服务器内部错误。
我们见到比较多的就是404,200这种,作为后端开发人员,肯定是不希望看到5xx服务器报错的信息的!因为这通常代表着今晚又要加班了!
现在罗列一下常见的HTTP状态码,需要自取!
emmmm,说一下301和302的区别是什么?
301:代表的是资源已经被永久移动了,在返回的时候会返回新的资源地址!
302:代表的是资源临时性移动,服务器从另外的地址响应资源,但是客户端还应该使用这个地址。
这里可能这么讲会有点蒙圈,看下面的讲解:
浏览器的行为:
书签与历史记录:浏览器遇到 301 时,可能会自动更新你收藏的书签,并把新URL存入历史记录。而对 302,浏览器会保留旧的URL。
后续请求:对于 301,浏览器可以(而且通常会)永久缓存这个重定向规则。下次你再访问旧URL,浏览器会直接跳去新URL,不再询问服务器。但遇到 302,浏览器每次还是会先请求旧URL,除非服务器有特殊的短暂缓存指令。
如果还是不理解:
301 像搬家换了常住地址,你会通知邮局把所有信件永久转送到新地址。
302 像你临时外出,请邻居代收一下今天的快递,但告诉快递员你的固定地址没变,以后照常送。
既然你知道了HTTP有哪些状态码,那么你知道HTTP有哪些请求方式吗?
HTTP 有哪些请求方式?
HTTP 协议定义了多种请求方式,用以指示请求的目的。常见的请求方式有 GET、POST、DELETE、PUT。
GET:请求检索指定的资源。这里应该保证数据的幂等性!因为get多次请求同一个位置的资源,那么理论上每次请求的资源应该都是一样的!并且请求之后资源的状态也是不会发生改变的
POST:向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件)。数据被包含在请求体中。可能会创建新的资源或修改现有资源。
DELETE:删除指定的资源。
PUT:用于替换指定的资源。如果指定的资源不存在,创建一个新资源。
后面这四种以了解为主!开发当中主要用的就是前四种方式!
HEAD:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。可以用于检查资源是否存在,验证资源的更新时间等。
OPTIONS:用于获取服务器支持的 HTTP 请求方法。通常用于跨域请求中的预检请求(CORS)。
TRACE:回显服务器收到的请求,主要用于测试或诊断。但由于安全风险(可能暴露敏感信息),很多服务器会禁用 TRACE 请求。
CONNECT:建立一个到目标资源的隧道(通常用于 SSL/TLS 代理),用于在客户端和服务器之间进行加密的隧道传输。
那你讲了这么多,我有个问题就是,get方法可以实现写操作吗?
可以是可以这么做,但是不太建议!
使用GET 执行写操作可能导致严重的安全问题,如跨站请求伪造(CSRF)。
实际开发中,也应该杜绝使用 GET 方法执行写操作。在技术派实战项目中,我们会在接口上明确规定应该使用哪种请求方式。
那行,你刚刚提到了幂等性,那你说说什么是幂等性?
什么是幂等?幂等方法了解哪些?
幂等其实是一个数学上的概念,在这里主要是用来描述业务开发场景当中的一些特性,比如一个操作无论执行多少次,结果都不会随着操作次数的增加而发生变化!
换句话说,幂等操作可以重复执行而不会改变系统状态。
因此如果当前的操作是幂等的,操作一次和操作多次的结果都是一样的!
那你说了这么多有关于get方法的,那请你说一下post吧?
说⼀下 GET 和 POST 的区别?
GET 请求主要用于获取数据,参数附加在 URL 中,存在长度限制,且容易被浏览器缓存,有安全风险;而 POST 请求用于提交数据,参数放在请求体中,适合提交大量或敏感的数据。
另外,GET 请求是幂等的,多次请求不会改变服务器状态;而 POST 请求不是幂等的,可能对服务器数据有影响。
你刚刚提到了get长度的限制,那么你能说说get长度的限制是多少吗?
HTTP 中的 GET 方法是通过 URL 传递数据的,但是 URL 本身其实并没有对数据的长度进行限制,真正限制 GET 长度的是浏览器。
本身我的URL不会去限制get的长度,但是浏览器会去进行一个限制的操作!
例如 IE 浏览器对 URL 的最大限制是 2000 多个字符,大概 2kb 左右,像 Chrome、Firefox 等浏览器支持的 URL 字符数更多,其中 FireFox 中 URL 的最大长度限制是 65536 个字符,Chrome 则是 8182 个字符。
这个长度限制也不是针对数据部分,而是针对整个 URL。
