HTTP协议(1)

百度解释:

http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。
这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。

博客总结:

概述
  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请求就没有请求体。

 

请求方法
GET
POST
HEAD
PUT
DELETE
……
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;
1
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
————————————————
版权声明:本文为CSDN博主「qq_34495772」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34495772/java/article/details/80525966

posted @ 2020-04-07 13:57  青春不再见  阅读(186)  评论(0编辑  收藏  举报