网络基础 Http详解

简介:
所谓协议就是一个双方都会进行遵守的约定。计算机之所以能够实现全世界互通正是由于这个原因的存在。

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP基于TCP/IP通信协议来传递数据。HTTP基于客户端/服务端(C/S)架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

特点:

(1)HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(2)HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
(3)HTTP是无状态:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

资源定位符:

(1)URL:网址统一资源定位符,绝对路径;
(2)URI:统一资源标识符,相对定位(简单理解就是告诉去哪里找你的资源地址比如你的JS文件CSS文件等)

HTTP请求信息:
1、请求行:

1.1 请求方法:GET/POST/DELETE/PUT除此之外还会有 OUT/OPTIONS/TRACE;
1.2 请求资源路径 服务器资源,通常和报文头的host属性组成完整的URL地址信息;
1.3 协议的版本号信息

2、请求头:

通常的信息格式都是以Key-Value的形式进行存贮的;
指的就是HTTP的报文头信息,通常服务端据此来进行获取客户端的信息,与缓存相关的信息均保存在Header中

3、请求正文(请求体):

Host:指的是请求的服务地址信息;
Connection:Keep-alive 浏览器保持连接默认时间 2S;
Content-length:请求体的长度;
Catch_Control:max-age 接收缓存
Accept:表示客户端接受的文本类型;
User-Agent:表示用户的信息:浏览器协议(云景5.0)/操作系统内核 applekit…自身浏览器信息;
Refer:表示这个请求的来源,可以利用这个来做防盗链或者进行统计相关; Accept_Encoding:表示可以接受的页面压缩格式;
Accept_Language:表示可以接受语言; Cookie:cookie信息;

同时它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html?
param1=value1&param2=value2”的方式传递请求参数。

响应报文:
响应报文同样也是和请求报文相似,包含三部分组成。分别为:
1、响应行:

主要由 状态行 HTTP版本号 状态码 以及状态消息组成的;

2、响应头信息:

主要包含一些K_V信息;有Date Content-Type 以及一些编码类型的信息;

3、响应正文信息:

1 html中的模拟Http的响应头;
2 Server:Apache-Coyoe/1.1 服务器名称;
3 Content-Type:Text/html charset=utf-8 响应正文类型信息;
4 Content-length: 正文长度
5 Date :指的服务器端的返回时间
除此之外还会有一些其他的基本信息包含Cache-Control(Chrome)/Expires
fireFox/Proma;no-Cache(IE)告诉浏览器不进行缓存处理,不同的浏览器缓存机制不同默认的话都是写这三个;
Refresh 3:url=“http://www.baidu.com” 默认缓存三秒 跳转URL;
Expires : 告诉浏览器过期时间;

常见状态码:

200 :表示服务器成功响应;
301/2:永久/临时重定向;
304 - Not Modified-未修改:服务器告诉浏览器资源没有被改动过,浏览器直接从缓存之中进行获取数据;
404 :请求不到资源;
503 :服务器暂时不可用;
505: 服务器异常;

关于浏览器缓存:

对于一些静态资源的数据,浏览器可以进行相应的缓存,至于缓存的数据什么时间用,什么时间从服务器端进行数据的请求,这个有一定的规则。主要是由数据的过期机制和验证机制;

时间(过期机制):控制浏览器是否需要向服务器发的送请求
Cache-Control 和 Expires 参数介绍:
1 服务器主要通过这两个参数来通知浏览器资源的过期时间,如果在有效的时间内那么直接从缓存内进行读取,返回数据这个过程是不会发送HTTP请求的,我们看到的HTTP状态码是 200 from cache ,如果不在有效期内的话需要进一步进行验证。
Cache-Control:

no-Cache:告诉浏览器不从缓存中取数据,需要发送http请求
no-strore:强制不使用缓存,直接请求服务器
max-age:指的是缓存的有效时间 100秒
public:指的是任何途径的缓存都可以使用的资源 CDN Cache
private:只针对用户使用缓存资源

expires:

2019-01-23 在这个时期之前的数据使用浏览器缓存,不需要发送http请求;

两者同时存在的情况下,默认使用的是Cache-Control 忽略expires;

验证
发送http请求了,是否需要返回响应;
1 验证资源变更:

1.1 时间:Last-Modified
1.2 内容摘要算法:MD5加密

Response:
Last-Modified 和 Etag(这个也就是在Request中看到的那个 if-Modified-Since If-None-Match)

这个也就是第一次发送请求时返回200,服务器会在Response里面带有修改时间Last-Modified 和 内容摘要 :Etag;
完后下一次发送请求的时候,Request会带上上次相应中的 Last-Modified 和 内容摘要 :Etag,就是以 if-Modified-Since If-None-Match 的形式进行传递给服务端,完后服务器端会进行验证,验证之后如果发现资源没有变更返回304,变更的话返回200 OK 进行再次加载;
所以 :
**Cache-Control/Expires: 这两这个的作用是用来控制是否需要向服务器发送资源过期询问请求的。
Last-Modified/ETag:这两个的作用是用来控制客户端内容和服务器内容做对比的。
**

缓存的解决方式:
请求行:来定位你的这次请求和上次请求是否是相同的请求。
如果是相同的请求才会带来缓存问题。如果不是相同请求就没有缓存问题。所 以可以考虑使用版本时间戳。
在这里插入图片描述在这里插入图片描述
除此之外用户的一些基本操作也会影响以上的四个值:
在这里插入图片描述
例如:当用户在按 F5 进行刷新的时候,会忽略 Expires/Cache-Control 的设置, 会再次发送请求去服务器请求,而 Last-Modified/Etag 还是有效的,服务器会根 据情况判断返回 304 还是 200。完整的判断流程如下:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值