HTTP协议总结归纳

发布于:2021-10-24 05:55:10

概述

??HTTP(Hyper Text Transfer Protocal)协议指超文本传输协议,它是建立在TCP的基础上,利用万维网来进行传输超文本的一个应用层协议。


七层结构

??OSI是一个开放性的通信系统互连参考模型。OSI模型有7层结构,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。


??其中TCP、UDP这些常见的协议位于传输层;HTTP、FTP等协议位于应用层。


TCP和UDP
    TCP是面向连接的,UDP是无连接的;TCP是可靠传输,UDP不可靠;TCP是面向字节流的,UDP是面向报文的;TCP的连接是点到点的,UDP支持一对一、一对多通信。

HTTP和HTTPS

http和https协议均位于应用层,其中HTTPS协议是经由TLS、SSL加密的。他们的不同点如下:
1. HTTPS是经由加密后的协议,HTTP则是明文传输的;
2. HTTPS使用443端口,HTTP使用80端口;
3. HTTPS需要证书认证,成本较高,相较困难,但安全性比HTTP高。


HTTP协议的特点
    简单快速灵活: HTTP协议允许传输任意类型的数据对象无连接:请求响应后立即断开连接,1.1版本之后开始支持持久链接。无状态:协议对于事务处理没有记忆能力,意味着如果后续处理需要前面的信息时,需要重传。

[协议的状态是指下一次传输可以“记住”这次传输信息的能力。]


HTTP的请求响应模型

HTTP协议永远都是客户端发起请求,服务器端进行响应,即请求-响应模式。



HTTP请求响应步骤
    客户端连接到web服务器,建立一个TCP套接字连接;发起HTTP请求,通过TCP套接字,客户端发送一个请求报文;服务器接收请求并返回响应报文;释放TCP连接;客户端解析响应;

请求报文

请求报文由请求行、请求头、空行、请求体组成。
- 请求行包括请求方法、url、协议版本;
- 请求头用以说明服务器要使用的附加信息;
- 空行用以区分请求头和请求体;
- 请求体是可选的,例如get请求就没有请求体。



请求方法
GETPOSTHEADPUTDELETE……
GET与POST的区别

最主要的区别:GET请求的参数是放置在URL中的,而POST请求的参数则是放置在请求体中。


由此可以得出以下区别:
1. GET请求在浏览器的后退是无害的,POST则会再次发起请求;
2. GET产生的URL地址可以被收藏,POST不可以;
3. GET请求的参数会出现在历史记录中,POST不会;
4. POST的安全性比GET要高;
5. URL是有长度限制的,因此GET请求的参数是有长度限制的,而POST没有限制;
6. GET请求只能进行URL编码,而POST支持多种编码方式;
7. 对参数的数据类型,GET只接受ASCII字符,POST没有限制;
8. GET请求会被浏览器主动缓存,POST不会,除非手动设置。


响应报文

响应报文同请求报文一致,拥有四个部分:响应行、响应头、空行和响应体。


其中响应行具备:协议版本、状态码、状态码描述这三个内容。



状态码
1XX: 表示请求已经成功接收,等待后续的处理;2XX: 成功;3XX: 重定向相关;4XX: 客户端错误;5XX: 服务端错误。
具体的状态码
200:ok,请求成功;301:所请求的页面已经转移到了新的url上;302:所请求的页面已经临时转移到了新的url上;304:未修改,缓存相关,表示客户端缓存未过期,可以被继续使用;403:拒绝提供服务;404:访问资源不存在;500:服务器发生不可预期的错误;503:临时过载或宕机,一段时间后可能恢复正常。
缓存
缓存的分类
强缓存:强制使用客户端的缓存,只有当客户端缓存过期,才向服务器请求新数据。协商缓存:每次使用缓存时,都向服务器询问是否使用客户端缓存。
缓存相关的头字段
1. Expires

缓存到期时间,这个时间是一个绝对时间,具体到某年某月某天某时某分。


缺点:通过修改客户端的时间会导致缓存失效。


2. Cache-Control

1.1版本协议针对Expires的缺点增设的过期时间的扩展,这是一个相对过期时间,它具备多种值,最常见的是max-age设置方式。


Cache-Control: max-age=259200;

259200是一个以秒为单位的数字,代表经过259200秒后过期。


3. Last-Modified

由服务器告知客户端,资源最后一次被修改的时间。


4. If-Modified-Since

客户端请求时携带的资源最后一次被修改的时间,服务器会比较Last-Modified和If-Modified-Since的值,若一致,则响应304,否则响应200,返回数据。


注意:


Last-Modified是以秒为单位的,如果资源更新速度小于秒,则不能适用;对于服务器动态生成的文件(如图片),这个文件的缓存的Last-Modified永远都是生成时的时间,永远不一致,尽管文件没变化,但也无法做到缓存的效果。
5. Etag

资源内容标志,一般是文件的MD5编码或者是一段HASH值。


服务器存储着文件的Etag字段,可以和每次客户端发送的If-no-match字段进行比较,若一致,响应304,否则响应200,返回数据。


Cookie和Session

Cookie是存储Key-Value对(键-值对)的一个文件,务必记住,它是由服务器将Cookie添加到response里一并返回给客户端,然后客户端会自动把response里的cookie接收下来,并且保存到本地,下次发起请求的时候,就会把Cookie附加到request里,服务器再根据request里的cookie遍历搜索是否有与之符合的信息。


在Web开发中,服务器可以为每个用户浏览器创建一个会话对象(Session对象),在需要保存用户数据时,服务器程序可以把用户数据写入session中。


区别:
1. session存储在服务器端,cookie存储在客户端;
2. session中可以放置对象(如文件等),cookie则保存的是字符串(键值对形式);
3. session的实现需要借助cookie,session-id存储在cookie中返回,如果客户端完全禁止cookie,session也将失效。


持久连接

HTTP 1.1 版本开始支持持久连接,即完成响应之后不立即断开连接,当出现对服务器的后续请求时,避免了建立或者重新建立连接。


管线化

HTTP管线化是将多个HTTP请求整批提交的技术,基于持久连接进行实现。


它的请求相应模型是:


请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3


参考资料

// COOKIE和SESSION有什么区别? - 知乎 https://www.zhihu.com/question/19786827
// 关于HTTP协议,一篇就够了 - ranyonsue - 博客园 https://www.cnblogs.com/ranyonsue/p/5984001.html

相关推荐

最新更新

猜你喜欢