HTTP协议

HTTP

译为超文本传输协议,是互联网上应用最为广泛的一种网络协议

客户端和服务端通过交换各自的信息进行交互
由像浏览器这样的客户端发出的信息叫做请求(requests)
被服务端回应的信息叫做响应(responses)

是应用层协议
不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如HTML表单这样的信息。可以根据网页需求,仅获取部分Web文档内容更新网页

组件系统

请求通过一个实体被发出,实体也就是用户代理。大多数情况下,这个用户代理都是指浏览器

每一个发送到服务器的请求,都会被服务器处理并返回一个消息,也就是响应

uesr-agent 就是任何能够为用户发起行为的工具。这个角色通常都是由浏览器来扮演

浏览器首先发送一个请求来获取页面的HTML文档,再解析文档中的资源信息发送其他请求,获取可执行脚本或CSS样式来进行页面布局渲染,以及一些其他页面资源(如图片和视频等)。然后,浏览器将这些资源整合到一起,展现出一个完整的文档,也就是网页

在HTTP协议通信过程的另一端,是由Web服务器来服务并提供客户端所请求的文档

Web不一定是一台机器,但一个机器上可以装载的众多Web服务

基本特性

HTTP是简单的
简单易读

HTTP是可扩展的
扩展容易

HTTP是无状态的,有会话的

HTTP和连接

可以被HTTP控制的常见特性

缓存
开放同源限制
认证
代理和隧道
会话

HTTP 报文

HTTP报文,又称为HTTP消息,是服务器和客户端之间交换数据的方式

有两种类型的消息:请求,由客户端发送用来触发一个服务器上的动作;响应,来自服务器的应答

请求报文由以下元素组成:一个HTTP的method、要获取的资源的路径、HTTP协议版本号、为服务端表达其他信息的可选头部headers以及对于一些像POST这样的方法

响应报文由以下元素组成:HTTP协议版本号、一个状态码、一个状态信息、HTTPheaders以及包含获取的资源body

HTTP 消息结构

HTTP请求消息和响应消息具有相似的结构,由以下部分组成:start line,HTTP headers,emptyline,body

起始行

起始行包含三个元素:
请求方法:描述要执行的动作
请求地址:通常是一个URL,或者是协议、端口和域名的绝对路径
HTTP版本:定义了剩余报文的结构,作为对期望的响应版本的指示符

请求方法
GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH

请求头

请求头允许客户端向服务器端传递附加信息
请求头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成
根据不同上下文,可将请求头分为:通用头(同时适用于请求和响应信息,但与最终信息主体中传输的数据无关的消息头)、请求头(包含更多有关要获取的资源或客户端本身信息的消息头)、实体头(包含有关实体主体的更多信息,比如主体长度或其MIME类型)

状态行

HTTP响应消息的起始行被称作状态行,包含以下信息:协议版本、状态码(表明请求是成功或是失败)、状态文本(一个简短的,纯粹的信息,通过状态码的文本描述,帮助人们理解该HTTP消息)

信息响应(100,101,102)
成功响应(200,201,202,203,204,205,206)
重定向(300,301,302,303,304)
客户端响应(400,401,402,403,404,405)
服务端响应(500,501,502,503,504,505)

响应头

响应头允许服务器端向客户端传递附加信息
请求头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成
根据不同上下文,可将请求头分为:通用头(同时适用于请求和响应信息,但与最终信息主体中传输的数据无关的消息头)、响应头(包含更多有关要获取的资源或客户端本身信息的消息头)、实体头(包含有关实体主体的更多信息,比如主体长度或其MIME类型)

响应主体
大致可分为两类:
单一资源主体:由已知长度的单个文件组成
单一资源主体:由未知长度的单个文件组成
多资源主体:由多部分响应主体组成,每部分包含不同的信息段。但这是比较少见的

MIME类型

被译为多用途Internet邮件扩展类型,是一种标准化的方式来表示文档的性质和格式

浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此服务器设置正确以将正确的MIME类型附加到响应对象的头部是非常重要的

text:表明文件是普通文本
image:表明是某种图像
audio:表明是某种音频文件
video:表明是某种视频文件
application:表明是某种二进制数据

HTTP/1.0的缺点

性能上的缺点:
消息头不像消息主体一样会被压缩
两个报文之间的header通常非常相似,但它们仍然在连接中重复传输
无法复用。当在同一个服务器打开几个连接时,TCP热连接比冷连接更加有效

HTTP/2.0引入了一个额外的步骤,它将HTTP/1.0消息分成帧并嵌入到流中

缓存机制

缓存
是一种保存资源副本并在下次请求时直接使用该副本的技术

缓存的优势

缓解服务器端的资源消耗和运行压力,提升服务器端的整体性能
减少服务器端资源加载的延迟,进而减少显示某个资源所用的时间
减少对宽带造成的压力,避免网络阻塞问题的出现
Web站点变得更具有响应性

缓存应用

常见的HTTP缓存只能存储GET响应,对于其他类型的响应则无能为力
普通的缓存案例:
检索请求的成功响应:响应状态码为200,则表示成功。包含例如HTML文档,图片,或者文件的响应
不变的重定向:响应状态码为301
错误响应:响应状态码为404的一个页面
不完全的响应:响应状态码为206,值返回局部的信息
处理GET请求外,如果匹配到作为一个已被定义的cache键名的响应

缓存类型

私有缓存
只能用于单独用户。浏览器缓存拥有用户通过HTTP下载的所有文档
Cache-Control: private

共享缓存
可以被多个用户使用。热门的资源就会被重复使用,减少网络拥堵与延迟
Cache-Control: public

Cache-control头

用来区分对缓存机制的支持情况,请求头和响应头都支持这个属性
禁止进行缓存:Cache-control: no-store
Cache-control: no-cache,no-store,must-revalidate
强制确认缓存:Cache-control: no-cache
缓存过期机制:Cache-control: max-age=31536000
缓存验证确认:Cache-control:must-revalidate

Pragma头

定义的一个header属性,请求中包含Pragma的效果跟在头信息中定义“Cache-control: no-cache”相同。但是HTTP的响应头不支持这个属性
Pragma: no-cache

Expires头

包含日期/时间,即在此时候之后,响应过期
无效的日期,比如“0”代表着过去的日期,即该资源已经过期
如果在Cache-control响应头设置了“max-age”或者“s-max-age”指令,那么Expires头会被忽略
Expires: Wed,21 Oct 2015 07:28:00 GMT

Cookie

Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上

Cookie保存在客户端某个特定的目录下的一个扩展名为“.txt”文本文件中,并且不同站点的Cookie数据保存不同的文件中

Cookie数据一般都是加密后保存的

Cookie的作用域

Domain和Path标识定义了Cookie的作用域,即Cookie应该发送给哪些URL
Domain标识了哪些主机可以接受Cookie
Path标识指定了主机下的哪些路径可以接受Cookie(该URL路径必须存在于请求URL中)

Cookie的有效期

Max-Age和Expires标识定义了Cookie的有效期,即Cookie的生命周期
会话期Cookie
持久性Cookie

Cookie的应用

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主体等)
浏览器行为跟踪(如跟踪分析用户行为等)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值