HTTP协议简单理解

一、HTTP协议简介

1.HTTP概述

  HTTP(Hyper Text Transfer Protocol,超文本传输协议),是一个属于应用层的面向对象的协议。用于从万维网(World Wide Web )服务器传输超文本到本地浏览器的传送协议,客户端通过使用网页浏览器或者其它的工具发起一个HTTP请求到服务器上指定端口,服务器在收到请求之后,返回响应内容(文本、图片等)。可以说Web是建立在HTTP协议上通信的。

2.HTTP发展历程

HTTP/0.9
  HTTP于1990年问世,但那时HTTP并没有作为正式的标准被建立。
HTTP/1.0
  HTTP正式作为标准被公布是在1996年5月,版本被命名为HTTP/1.0,并记载于RFC1945。HTTP 1.0引入了POST和HEAD命令,增强了交互功能,但规定浏览器与服务器只保持短暂的连接,连接成功后只能发送一次请求,然后连接就断开了,如果需要多次请求,需要多次连接。正式因为这种特性造成了一些性能上的缺陷。
HTTP/1.1
  1997年1月公布的HTTP/1.1是目前主流的HTTP协议版本,记载于RFC2616。HTTP 1.1支持持久连接,默认TCP连接不关闭,可以被多个请求复用,减少了建立和关闭连接的消耗和延迟,并且新增了更多的请求方式。
HTTP/2.0
  2015年5月,HTTP/2发布,记载于RFC7540,主要解决了HTTP1.1的效率不高的问题,新增特性有:二进制协议、多工、数据流、头信息压缩等等功能。

二.HTTP基础——TCP/IP

  通常使用的网络是在TCP/IP协议族的基础上运作的,而HTTP协议属于它内部的一个子集。TCP/IP协议族按层次可分为:应用层、传输层、网络层和数据链路层。HTTP协议位于TCP/IP协议栈的应用层。
  发送端在层与层之间进行数据传输时,从应用层往下走,每经过一层就会被加上上一层的首部信息;接收端在层与层之间进行数据传输时,从数据链路层往上走,每经过一层,便会把相应的首部去掉。
在这里插入图片描述

三.HTTP报文

  用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。

HTTP报文结构
在这里插入图片描述

通用首部字段

Cache-Control:控制缓存行为
Connection:链接的管理
Date:报文日期
Pragma:报文指令
Trailer:报文尾部的首部
Trasfer-Encoding:	指定报文主体的传输编码方式
Upgrade:升级为其他协议
Via:代理服务器信息
Warning:错误通知

实体首部字段

Allow	资源可支持的HTTP方法
Content-Encoding	实体的编码方式
Content-Language	实体的自然语言
Content-Length	实体的内容大小(字节为单位)
Content-Location	替代对应资源的URI
Content-MD5	实体的报文摘要
Content-Range	实体的位置范围
Content-Type	实体主体的媒体类型
Expires	实体过期时间
Last-Modified	资源的最后修改时间

请求报文

在这里插入图片描述
请求方法

1.GET:获取资源
GET方法向指定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

2.POST:传输实体主体
POST方法向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

3.PUT:传输文件
PUT方法用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

4.HEAD:获得报文首部
HEAD方法和GET方法一样,只是不返回报文主体部分。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

5.DELETE:删除文件
DELETE方法用来删除文件,与PUT方法相反。DELETE方法按请求URL删除指定的资源。

6.OPTIONS:询问支持的方法
OPTIONS方法用来查询并返回服务器针对特定资源所支持的HTTP请求方法。

7.TRACE:追踪路径
TRACE方法是让Web服务器端将之前的请求通信返回给客户端的方法,主要用于测试或诊断。

8.CONNECT:要求用隧道协议连接代理
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。

重点GET方法和POST方法的区别

  • GET方法是从服务器上获取数据,POST方法是向服务器传送数据。
  • POST方法比GET方法安全,因为数据在地址栏上不可见。
  • GET方法提交的数据最多只能有1024字节,而POST方法则没有此限制。

请求首部字段

Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
User-Agent:将发起请求的应用程序名称告知服务器       
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
Cookie:客户端用它向服务器传送数据

响应报文

在这里插入图片描述
状态码

  状态码的作用是当客户端向服务器发送请求时,描述返回的请求结果,根据结果,用户可以知道服务器是正常处理了请求,还是出现了错误。

状态码的类别及常用状态码

  • 100~199(信息性状态码)

     100 	Continue  			继续。客户端应继续其请求。
     101 	Switching Protocols	切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议。
    
  • 200~299(成功状态码)

     200	OK					请求成功。表示从客户端发来的请求在服务器被正常处理了。一般用于GET与POST请求。
     204	No Content			无内容。服务器成功处理,但在返回的响应报文中不含实体的主体部分。
     206	Partial Content		部分内容。服务器成功处理了部分GET请求。
    
  • 300~399(重定向状态码)

     301	Moved Permanetly	永久性重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
     302	Found				临时性重定向。该状态码表示请求的资源被分配了新的URI,希望用户本次能使用新的URI访问
     303	See Other			查看其它地址。该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
     304	Not Modified		未修改。表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304Not Modified,不包含任何响应的主体部分。
     307	Temporary Redirect	临时性重定向。与302类似,307会遵照浏览器标准,不会从POST变成GET。
    
  • 400~499(客户端错误状态码)

     400	Bad Request			客户端请求的语法错误,服务器无法理解。
     401	Unauthorized		请求要求用户的身份认证。
     403	Forbidden			表明对请求资源的访问被服务器拒绝了。
     404	Not Found			服务器无法根据客户端的请求找到资源。
    
  • 500~599(服务器错误状态码)

     500	Internal Server Error	服务器内部错误,无法完成请求
     503	Service Unavailable		由于超载或系统维护,服务器暂时的无法处理客户端的请求。
    

响应首部字段

Age:推算资源创建经过的时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或时间重试
Server:HTTP服务器的安装信息
Title:对HTML文档来说,就是HTML文档的源端给出的标题
Warning:比原因短语更详细一些的警告报文
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:代理服务器缓存的管理信息
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
WWW-Authenticate:服务器对客户端的认证信息

四.HTTP的缺点

  • 通信使用明文(不加密),内容可能会被窃听。
  • 不验证通信双方的身份,因此有可能遭遇伪装。
  • 无法证明报文的完整性,所以可能已篡改。

HTTPS

HTTPS = HTTP + 加密 + 认证 + 完整性保护

加密处理防止被窃听

  HTTP协议中没有加密机制,但可以通过SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。

查明对方的证书,确定通信方

  HTTP协议无法确定通信方,但如果使用SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,用于确定通信方。

证明报文的完整性,防止篡改

  最常用的是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。

五.参考

《图解HTTP》 [日]上野宣

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值