应用层—HTTP/HTTPS协议
本文最后更新于 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用于保护数据完整性以防被第三方篡改。
- 感谢你赐予我前进的力量