本文最后更新于 2025-03-24,文章超过7天没更新,应该是已完结了~

HTTP常见状态码

状态码分类表

各类常见的状态码

200 OK: 表示从客户端发送给服务器的请求被正常处理并返回

204 No Content: 请求执行成功,但是没有数据,浏览器不用刷新页面.也不用导向新的页面。

206 Patial Content: 表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求。

范围请求:人们下载文件时断网重连之后,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。 要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求(Range Request)。

301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL

302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问新的URL

303 See Other: 303和302差不多,唯一区别就是302 响应码是http1.0的标准,在当时还没有支持https的相应协议出现,所以现在的浏览器为了兼容http1.0,在302状态码下,碰到了 https的重定向请求,也会以http去转发;而303是http1.1的标准,浏览器就维持了一致的https的重定向请求了。

304 Not Modified:自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容(缓存)。

客户端是怎么知道这些内容没有更新的呢?其实这并不是客户端的事情,而是你服务器的事情,大家都知道服务器可以设置缓存机制,这个功能是为了提高网站的访问速度,当你发出一个GET请求的时候服务器会从缓存中调用你要访问的内容,这个时候服务器就可以判断这个页面是不是更新过了,如果未更新过那么他会给你返回一个304状态码。

400 Bad Request:表示请求报文中存在语法错误

401 Unauthorized:未经许可,需要通过HTTP认证

403 Foribidden:服务器拒绝该次访问(访问权限出现问题)

404 Not Found:表示服务器无法找到请求的资源,还可能使服务器拒绝请求但不想给拒绝原因时使用

405

500 Inter Server Error:表示服务器在执行请求时发生了错误,有可能时web应用存在bug

501

503 Server Unavailable:表示服务器暂时处于超负载或正在停机维护

HTTP请求/响应报文(了解)

第一部分:报文首部

请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。

第二部分:空行,请求头部后面的空行是必须的,即使第四部分的请求数据为空。

第三部分:请求数据,也叫主体,可以添加任意的其它数据。

HTTP请求例子:

HTTP响应例子:

HTTP请求方式

1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识对应的请求方法时,应返回状态码501(Not Implemented)。

2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。

POST和GET的区别

"GET" 方法提交的数据会直接填充在请求报文的URL上,如 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1 。 "?" 问号划分域名和get提交的参数,A=B中的A是参数名,B是参数值,多个参数之间用 "&" 进行分割,如果参数值是中文,则会转换成诸如%ab%12加密16进制码。一般来说,浏览器处理的URL最大限度长度为1024B(不同浏览器不一样),所以GET方法提交参数长度有限制

"POST" 方法提交的数据会附在正文上,一般请求正文的长度是没有限制的,但表单中所能处理的长度一般为100k(不同协议不同浏览器不一样),而且需要考虑下层报文的传输效率,不推荐过长。

所以GET方法可以用来传输一些可以公开的参数信息,解析也比较方便,如百度的搜索的关键词,而POST方法可以用来提交一个用户的敏感信息(如果不使用HTTPS加密,报文正文仍旧是明文,容易被人截获读取

与HTTPS的区别

一般http中存在如下问题:

  • 请求信息明文传输,容易被窃听截取。

  • 数据的完整性未校验,容易被篡改

  • 没有验证对方身份,存在冒充危险

为了解决上述HTTP存在的问题,就用到了HTTPS。

HTTPS 协议:一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。TLS(Transport Layer Security,传输层安全):其前身是 SSL。

输入网址发生后的事(下一篇会讲):

TCP三次握手成功后,浏览器将自己打包好的包裹不是交给TCP阿姨,而时委托给TLS安保大叔全权负责运输。

TLS安保大叔需要先和对方沟通安保措施,沟通的渠道就是三次握手后建立的渠道

1. TLS大叔说,我支持TLS版本1.2,以及我的认证算法,加密算法,数据校验算法,此外还有我的随机码A,收到回复。

2.TLS服务器回复,我也支持这些,这是我的随机码B,服务端数字证书serverCA(包含公钥)

由于双向认证需求,服务端需要对客户端进行认证,会同时发送一个 client certificate request,表示请求客户端的证书

3.TLS大叔检查服务端证书的有效期,再检查证书是否被吊销,如果一切正常则进行下一步。

4.TLS大叔用返回来的服务端的数字证书中的公钥加密一段随机的字符串,称为随机数C,发给TLS服务器。

由于服务端发起了 client certificate request,客户端使用公钥加密一个随机数 clientRandom在客户端的证书,一并同随机数C发出;

5.服务端成功将客户端加密的随机数clientRandom解密并校验客户端的证书,并根据随机数A/B/C产生动态密钥master-key,加密一个finish 消息发至客户端;

6.客户端根据 同样的随机数和算法 生成master-key,加密一个finish 消息发送至服务端。

服务端和客户端分别解密成功,至此握手完成,之后的数据包均采用master-key进行加密传输。

master-key可以推导出session key,HMAC key。session key用于加密/解密数据,HMAC key用于保护数据完整性以防被第三方篡改。