HTTP协议简单概述
学习目标
HTTP 协议概述
HTTP 请求响应
HTTP 请求方法
HTTP 响应方法
HTTP 消息报文之请求报文
HTTP 消息报文之响应报文
HTTP 消息报文之通用报文
URL
我们更熟悉 URL(U
niform R
esource L
ocator,统一资源定位符)。URL 正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如,下图的 http://hackr.jp/ 就是 URL。
使用 http: 或 https: 等协议方案名获取访问资源时要指定协议类型。 不区分字母大小写,最后附一个冒号(:)
1.HTTP协议的概述
1.1 http协议用于客户端和服务器之间的通信
在两台计算机使用HTTP协议通信时,在一条通信线路上必定有一端是客户端,另一端是服务端
服务端和客户端的身份可能会转换,但是从一条信路上说是确定的。
1.2 通过请求和响应的交换达成通信
1.2.1 请求方法
HTTP协议规定,请求从客户端发出,最后服务器端响应请求并返回。
实例:
请求
分析
GET
表示请求访问服务器的类型,称为方法(method)/index.htm
指明了请求的资源对象,也叫做请求的URL(request-URL)。HTTP/1.1
,是HTTP的版本号,用来提示客户端使用HTTP协议功能。
综合:请求了HTTP服务器上的/index.htm页面
请求报文的构成 |
---|
请求方法 |
请求URL |
协议版本 |
可选的请求首部字段 |
内容实体构成 |
1.2.2 响应
分析:
HTTP/1.1
表示服务器对应的HTTP版本200 ok
表示处理结果的状态码(status code)和原因短语(reason-phrase)Date: Tue, 10 Jul 2012 06:50:15 GMT
显示创建响应的日期时间,是首部字段(header field)内的一个属性。- 接着一个空行,之后是资源实体主体(entity body)
综合:响应成功返回页面:text/html
响应报文的构成 |
---|
协议版本 |
状态码(请求或失败的数字代码) |
解释状态码的原因短语 |
可选的响应首部字段 |
实体主题 |
1.3HTTP是不保存状态的协议
HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是不做持久化处理。
HTTP协议每当有新的请求发送时,就会对应新响应产生。
协议本身不保留之前一切的请求或响应报文的信息。这是为了尽快的处理特大事务,确保协议可伸缩性。
1.4 请求URI定位资源
HTTP协议使用URI定位资源,所以在互联网上任意位置的资源都能访问到。
1.4.1 指定URI的方式
完整请求URI
GET http://hackr.jp/index.htm HTTP/1.1
在首部字段Host中写明网络的域名或IP地址
GET /index.htm HTTP/1.1
Host: hackr.jp
如果不是访问特定资源而是对服务器本身发起请求
,可以用一个*
代替URI
下面这个例子是查询HTTP服务器支持的HTTP方法种类
OPTIONS * HTTP/1.1
1.5 HTTP方法
下面是HTTP/1.1中可以使用的方法。
GET:获取资源
说明:GET方法用来请求访问已被URI识别的资源。指定资源经过服务器解析后返回响应内容。若为文本远洋返回,如果是程序执行输出。
例子:
请求:
GET /index.html HTTP/1.1 Host: www.hackr.jp
响应:返回 index.html 的页面资源
请求:
GET /index.html HTTP/1.1
Host: www.hackr.jp
If-Modified-Since: Thu, 12 Jul 2012 07:30:00 GMT
响应:仅返回2012年7月12日7点30分以后更新过的index.html页面资源。 如果未有内容更新,则以状态码304 Not Modified作为响应返回
POST:传输实体主体
说明:
POST方法用来传输实体主体。
例子:
请求:
POST /submit.cgi HTTP/1.1 Host: www.hackr.jp Content-Length: 1560(1560字节的数据)
响应:返回submit.cgi接收数据的处理结果
PUT:传输文件
说明:
PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
因为HTTP/1.1没有验证机制,所以要配合其他验证机制进行验证
例子:
请求:
PUT /example.html HTTP/1.1 Host: www.hackr.jp Content-Type: text/html Content-Length: 1560(1560字节的数据)
响应:响应返回状态码204 No Content(比如 :该html已存在于服务器上)
HEAD:获得报文首部
说明:
HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的时间日期
例子:
请求
HEAD /index.html HTTP/1.1 Host: www.hackr.jp
响应:返回index.html有关的响应首部
DELETE:删除文件
说明:
DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定资源。
HTTP/1.1的DELETE同样没有验证机制
例子:
请求
DELETE /example.html HTTP/1.1 Host: www.hackr.jp
响应:响应返回状态码204 No Content(比如 :该html已从该服务器上删除)
OPTIONS:询问支持的方法
说明:
OPTION方法用来查询针对URI指定资源支持的方法。
例子:
请求
OPTIONS * HTTP/1.1 Host: www.hackr.jp
响应
HTTP/1.1 200 OK Allow: GET, POST, HEAD, OPTIONS (返回服务器支持的方法)
TRACE:追踪路径
说明:
TRACE方法是让web服务器端将之前的请求通信环会给客户端的方法。
发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个 服务器端就将该数字减 1,当数值刚好减到 0 时,就停止继续传输,最 后接收到请求的服务器端则返回状态码 200 OK 的响应。 客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修 改 / 篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理 中转,TRACE 方法就是用来确认连接过程中发生的一系列操作。(容易引发跨站追踪攻击)
例子:
请求
TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2
响应
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 1024TRACE / HTTP/1.1
Host: hackr.jp
Max-Forwards: 2(返回响应包含请求内容)
CONNECT: 要求用隧道协议链接代理
说明:
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。
CONNECT方法的格式如下图所示。
CONNECT 代理服务器名:端口号 HTTP版本
例子:
请求:
CONNECT proxy.hackr.jp:8080 HTTP/1.1 Host: proxy.hackr.jp
响应:
HTTP/1.1 200 OK(之后进入网络隧道)
1.6 使用方法下达命令
向请求URI指定的资源发送请求报文时,采用称为方法的命令。
方法 | 说明 | 支持的HTTP版本协议 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 最总路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.1 |
UNLINE | 断开连接关系 | 1.1 |
LINK和UNLINK已被HTTP/1.1废弃
1.7持久连接节省通信量
HTTP协议的初始版本中,没进行一次HTTP通信就要断开一次TCP连接.
当年的传输内容都是很小的文本传输,所以不会有问题,随着HTTP的发展web页面中可能包含大量的图片,乃至视频。因此,每次请求都会应为多次断开TCP连接增加通信开销。
1.7.1 持久连接
为了解决TCP连接问题,HTTP/1.1
和一部分HTTP/1.0
想出了持久连接。HTTP Persistent Connections
,也称为 HTTP keep-alive
或 HTTP connection reuse
)
在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内 并未标准化。客户端和服务器端都要支持才可以。
特点:
只要任意一端没有明确断开连接,则保持TCP连接状态。需要请求断开。
优点:
- 减少重复建立连接的额外开销,减轻服务器端的负载
- 减少开销那部分时间,web页面响应速度提高。
1.7.2 管线化
持久连接使得管线化(pipeliing)
成为可能。
管线化技术的特点是不用等待响应就可以直接发送下一个请求,这样就可以同时发送多个请求而不需要一个接一个的等待响应了。
管线化技术比持久连接还要快,请求数量越多时间差越明显。
1.8 使用Cookie的状态管理
HTTP是无状态协议,由于不保存之前的状态和响应所以减少了资源消耗。可如果碰到需要身份验证的web页面岂不是要每一次都要重新验证,所以人们应用了Cokie技术。
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端状态。
Cookie会根据响应报文内一个叫Set-Cookie的首部字段通知客户端保存Cookie。下次发送请求会携带Cookie值发送出去。
服务器发现cookie值后,会检查那个客户端发来的请求然会对比服务器的记录找到之前的状态。
例子:
- 请求报文(没有Cookie信息的状态)
- 响应报文(服务器端生成Cookie信息)
- 请求报文(自动发送保存着的Cookie信息)
以上就是一次Cookie请求的过程。
HTTP协议简单概述相关推荐
- 六种主要服务器管理协议简单概述-行云管家
目前网络上服务器管理协议类别比较多,大家都不是很清楚很了解.今天我们就先来了解一下六种主要服务器管理协议,希望可以帮到大家. 一.RDP RDP远程协议是一个多通道协议,让用户通过本地电脑连接远程服务 ...
- 物联网设备和应用程序涉及协议的概述
物联网设备和应用程序涉及协议的概述. 帮助澄清IoT层技术栈和头对头比较. 物联网涵盖了广泛的行业和用例,从单一受限制的设备扩展到大量跨平台部署嵌入式技术和实时连接的云系统. 将它们捆绑在一起是许多传 ...
- java,UDP协议简单实现
//UDP协议简单实现-----Serverpackage UDP;import java.net.DatagramPacket; import java.net.DatagramSocket; im ...
- HTML-HTML协议简单解析
HTML-HTML协议简单解析 在浏览器访问一个地址: 127.0.0.1:7890/html/html.htm //代表访问当地服务器路径下的/html的html.htm文件 客户端发送的请求命令是 ...
- HTTP 协议简单理解与总结
前言: 前几天被问到一些http比较理论的东西,一时间被尬到了.于是在网上搜罗一遍,整理成一篇比较好的比较全但又不会太臃肿的文章. 一. HTTP协议的应用简单概况 HTTP协议的主要特点可概括如下: ...
- 8086CPU相关汇编语言的简单概述
8086CPU相关汇编语言的简单概述 1.寄存器 通用寄存器 8806CPU给出物理地址的方法 段寄存器 修改CS,IP的指令 2.寄存器(内存访问) 栈机制 3.[BX]和loop指令 [BX] l ...
- XSS漏洞简单概述--UGa
XSS漏洞简单概述–UGa 个人笔记向,请多指点 *简介 XSS作为OWASP TOP 10之一,XSS被称为跨站脚本攻击(Cross-site scripting) ,本来应该缩写为CSS,但是由于 ...
- Http协议-Http协议的概述与特点
HTTP协议的概述:超文本传输协议,作用就是规定浏览器与服务器之间发送接收数据的规范 HTTP协议特点: 基于TCP协议(传输控制协议):面向链接,安全 基于请求-响应模型:一次请求的对应一次响应 H ...
- H323Client-1 H323协议族概述
H323Client-1 H323协议族概述 Webcome to project:MTAVIPClient; Expecting you to join! MTAVIPClient supports ...
- NVME协议-NVME概述
NVME协议-NVME概述 NVME简述 Non-Volatile Memory Express,非易失性存储器标准,是跑在PCIE接口上的标准协议, 是一种Host与SSD之间通信的协议. NVME ...
最新文章
- 看我是怎样让客户更快找到我的!
- HDU1083(二分图-匈牙利算法)
- Transformer 会接管人工智能?
- java spring上传_SpringMVC上传文件的三种方式
- AB1601烧程序时注意事项
- CentOS6中怎样将jdk1.7升级到1.8
- 论文创新,可以看看这几篇去雨文章是怎么做的
- 导Excel数据到Oracle的脚本,Oracle使用TOAD实现导入导出Excel数据
- maven实现多模块热部署
- mongoshake实现mongodb数据同步
- Java架构师面试问些什么?微服务之springcloud面试题(共22题,含详细解答)
- 装系统可能会出现的问题--无法装在该磁盘,因为格式的原因
- 拇指接龙游戏从WIN32向Xcode 4.5移植过程问题记录
- 大数据平台有什么功能
- PopupWindow 常用方法学习笔记
- 微服务架构实战篇(一):使用start.spring.io 构建SpringBoot2.0项目
- 基于uart的RS232和RS485总线
- 华为数通网络自动化开发学习笔记
- 如何使用高德地图API
- GitHub博客搭建
热门文章
- 培训linux好吗,参加linux专业培训好还是自学linux好
- 2021年武汉理工大学计算机考研复试详解 计算机学硕
- Java中this和super的区别
- 360浏览器怎么开java_360安全浏览器怎么打开javascript
- 真机linux系统封装rhel7.6虚拟机
- 逻辑函数的化简方法——数电第二章学习
- BT.709 vs BT.2020
- http接口开发几种工具简单介绍
- matlab多项式运算开方,matlab多项式运算【技术材料】
- js word 预览_个人电子简历模板在线编辑,大学生简历模板免费下载word 文档