HTTP:超文本传输协议

一.基本概念

  1. 什么是HTTP协议?
    超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器,通过因特网传送万维网文档的数据传送协议。
  2. 作用:服务器传输超文本到本地浏览器的传送协议。最初是用来向客户端传输HTML页面的内容。默认端口是80;
    在浏览器(网页)与服务器之间传送文档或者图像等等。

二. 报文格式

  1. 请求报文
    在这里插入图片描述
    请求行:包含用于请求的方法,请求URI和HTTP版本。
    这里得提一下什么是URL,以及URL和URI的区别
    (1)URL是Internet上用来描述信息资源的字符串,主要用于各种万维网客户程序和服务器
    程序上。
    (2)URL一般由三部分组成:协议,存有资源的主机IP地址,主机资源的具体地址。
    (3)而URI则是统一资源标识符,用来唯一的标识一个资源。URL则是统一资源定位器,
    它是一种具体的URI,即是说URL可以用来标识一个资源,而且还指明了如何定位
    这个资源。
    (4)URI是一种抽象的高层次概念,而URL则是具体的资源标识的方式。可以说URL是
    URI的子集,URI属于URL更高层次的抽象。

  2. 请求方法:
    (1)GET:获得资源
    (2)POST:传输实体主体
    (3)PUT:传输文件
    (4)HEAD:获得报文首部
    (5)DELETE:删除文件
    (6)OPTIONS:询问支持的方法(客户端问服务器)
    (7)TRACE:追踪路径
    (8)OCONNECT:要求用隧道协议连接代理
    (9)LINK:建立与资源之间的联系
    (10)UNLINE:断开连接关系

这里因为GET和POST容易搞混,所以我简单在这里区分下:

  • get侧重于从服务器获取数据
  • post侧重于向服务器发送数据
  • get通过URL将数据发送给服务器(数量小)
  • post是通过将数据封装在实体发送给服务器(大量数据)
  • get不安全,post安全
  • get发送一个TCP包(头部和实体一起发送),post发送两个TCP包(头部和实体分开发送)
  1. 响应报文和请求报文差不多,只不过请求方法换成了状态码
    HTTP状态码:
    (1)1XX Informational信息性状态码 接受的请求正在处理
    (2)2XX Success成功状态码 请求正常处理完毕
    (3)3XX Redirection重定向状态码 需要进行附加操作以完成请求
    (4)4XX Client Error客户端错误状态码 服务器无法处理请求
    (5)5XX Server Errorf服务器错误状态码 服务器处理请求出错

三.工作原理

  1. HTTP协议是基于请求/响应模型。因为HTTP协议是一个应用层协议。
    而且HTTP是一种不保存状态,即无状态stateless协议;HTTP协议自身不对请求和响应之间的通信状态进行保存;换言之,在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。为了保存用户状态,于是引入了Cookie技术。这里只是简单的归纳HTTP的作用和工作流程。由需要的探究的朋友,可以去查看下Cookie技术。
    在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上。
    所以在进行HTTP请求报文发送时,还需要TCP的三次握手
    在这里插入图片描述

  2. 工作流程:客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL(统一资源定位器)、协议版本、请求头部和请求数据。服务器以一个状态行为响应,响应的内容包括协议的版本、成功或者错误的代码、服务器信息、响应头部和响应数据。
    (1)客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与web服务器的HTTP端口(默认80)建立一个TCP套接字连接。
    (2)发送HTTP请求
    通过TCP套接字,客户端向web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据四个部分构成。
    (3)服务器接受请求并返回HTTP响应
    web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据四个部分构成
    (4)释放连接的TCP连接
    若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;如果connecttion模式为keepalive,则连接会保持一段时间,在该时间内可以继续接受请求
    (5)客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,差看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口显示。

eg:在网页打开www.baidu.com会经过的流程:
(1)浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
(2)解析出IP地址后,根据该IP地址和默认端口80,与服务器建立TCP连接
(3)浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器
(4)服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器
(5)释放TCP连接
(6)浏览器将该html文本显示内容

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值