频道栏目
首页 > 资讯 > 网络协议 > 正文

HTTP基础知识:HTTP简介、HTTPS的使用及HTTP报文讲解

18-05-29        来源:[db:作者]  
收藏   我要投稿

一:HTTP简介

HTTP(Hyper Text Transfer Protocol):超文本传输协议

是基于TCP的一种应用层协议,用于客户端(一般为浏览器)和服务器端之间的通信

超文本:是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本

1,HTTP版本介绍:

HTTP/1.0:公布于1996年5月;记载于RFC1945

HTTP/1.1:公布于1997年1月;最初标准是RFC2068,最新修订版为RFC2616(1999年) ,是目前主流的版本

HTTP/2.0:未来的标准,正在制定中

2,URI与URL:

URI:Uniform Resource Identifier 统一资源标识符

URI 就是由某个协议方案表示的资源的定位标识符,即在某一规则下能把一个资源独一无二地标识出来(如用ID或路径等)

协议方案是指访问资源所使用的协议类型名称(如http,ftp)

URL:Uniform Resource Locator 统一资源定位符

URL表示资源的地点(路径)

URL 是 URI 的子集

https docs.python.org 80(不写默认为80) /3/library/socket.html highlight=socket #socket-objects
协议方案名 服务器地址 服务器端口号 带层次的文件路径 查询字符串 片段标识符

3,HTTP与Cookie:

HTTP是一种不保存状态,即无状态协议;该协议自身不对请求和响应之间的通信状态进行保存,即不具备保存之前发送过的请求或响应的功能

为了实现保存状态的功能,引入了Cookie技术

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie;当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入Cookie值发送出去

4,HTTP持久连接:

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接

持久连接:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载;同时也提高了web页面的显示速度

在HTTP/1.1中,所有的连接默认都是持久连接,Connection: keep-alive

管线化:持久连接使得多数请求以管线化方式发送成为可能;以前发送请求后需等待并收到响应,才能发送下一个请求;管线化技术出现后,不用等待响应亦可直接发送下一个请求,即能够做到同时并行发送多个请求

5,HTTP瓶颈:

例子:当需要推送实时更新内容,此时需要客户端不断向服务器发送确认更新情况的请求,而服务器不管是否有更新,都要把数据全部再发送一次

Ajax的解决方法:只更新局部页面;服务器不需要把数据全部再发送一次,减少了发送的数据量

Comet的解决方法:先将响应置于挂起状态,当服务器有内容更新时,再返回该响应;客户端无需频繁向服务器发送确认更新情况的请求了

SPDY:Google 2010年发布的,其开发目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间(50%)

6,HTTP请求方法:

方法名区分大小写,注意要用大写字母

GET 获取资源,用来请求访问已被URL识别的资源;数据以明文的方式放入URL中
HEAD 获得报文首部;HEAD方法和GET方法一样,只是不返回报文主体部分
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件);数据被包含在请求主体中
OPTIONS 询问支持的方法
TRACE 追踪路径

二:HTTPS

HTTPS:HTTP + SSL 超文本传输安全协议

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

SSL:secure socket layer 安全套接层

通信过程:先用SSL建立安全通信线路,然后就可以在这条线路上进行HTTP通信了

和HTTP通信比较,SSL通信部分消耗网络资源,对通信进行加密等处理还会消耗CPU及内存等资源

HTTPS比HTTP要慢2到100倍

因此,非敏感信息使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信

三:HTTP报文

1,报文结构与格式

HTTP报文本身是由多行数据构成的字符串文本

HTTP报文大致可分为报文首部和报文主体两块

请求报文的格式:

响应报文的格式:

2,状态码

状态码告知从服务器端返回的请求结果;可能会出现状态码和状况不一致的情况

2XX 成功

200 OK:请求已成功处理

204 No Content:请求已成功处理,但在返回的响应报文中不含实体的主体部分

206 Partial Content:表示客户端进行了范围请求

3XX 重定向

301 Moved Permanently:永久性重定向,即表示请求的资源已被分配了新的URL

302 Found:临时性重定向

303 See Other:表示由于请求对应的资源存在着另一个URL,应使用GET 方法定向获取请求的资源

304 Not Modified:资源已找到,但未符合条件请求

当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送

4XX 客户端错误

400 Bad Request:表示请求报文中存在语法错误

401 Unauthorized:表示发送的请求需要有通过HTTP认证的认证信息

403 Forbidden:表明对请求资源的访问被服务器拒绝了

404 Not Found:表明服务器上无法找到请求的资源

5XX 服务器错误

500 Internal Server Error:表明服务器端在执行请求时发生了错误

503 Service Unavailable:表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

3,首部字段

HTTP首部字段:是构成HTTP报文的要素之一;起着传递重要信息的作用

4种HTTP首部字段类型:

3.1,通用首部字段

Cache-Control:其指令能操作缓存的工作机制

指令的参数是可选的,多个指令之间通过‘,’分隔

Pragma:是HTTP/1.1之前版本的历史遗留字段;只用在客户端发送的请求中,要求所有的中间服务器不返回缓存的资源

Pragma:no-cache

Connection:控制不再转发给代理的首部字段;管理持久连接

Connection:不再转发的首部字段名 #代理服务器会把该首部字段删除后再转发

管理持久连接:Connection:Keep-Alive;Connection:Close

Date:表明创建HTTP报文的日期和时间

Date: Thu, 24 May 2018 03:06:26 GMT (东八区在此时间上加上8小时)

Trailer:事先说明在报文主体后记录了哪些首部字段;可应用在HTTP/1.1版本分块传输编码时

Transfer-Encoding:规定了传输报文主体时采用的编码方式

Transfer-Encoding:chunked

Upgrade:用于检测HTTP协议及其他协议是否可使用更高的版本进行通信

Via:为了追踪客户端与服务器之间的请求和响应报文的传输路径

报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发

3.2,请求首部字段

Accept:通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级

使用type/subtype形式,可一次指定多种媒体类型,用逗号分隔

使用q值来表示权重值,q的范围(0-1),1为最大值;不指定值时默认权重为q=1;用分号进行分隔

Accept-Charset:用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。

可一次性指定多种字符集,可用q值来表示相对优先级

Accept-Encoding:用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序

可一次性指定多种内容编码

gzip、compress、deflate、identity

采用权重q值来表示相对优先级;也可使用星号作为通配符,指定任意的编码格式

Accept-Language:用来告知服务器用户代理能够处理的自然语言集,以及自然语言集的相对优先级

可一次性指定多种自然语言集,采用权重q值来表示相对优先级

Authorization:用来告知服务器,用户代理的认证信息

Expect:告知服务器,期望出现的某种特定行为

Host:告知服务器,请求的资源所处的互联网主机名和端口号。

Host首部字段在HTTP/1.1规范内是唯一一个必须包含在请求内的首部字段

If-Match:形如If-xxx这种样式的请求首部字段,都可称为条件请求;服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求

If-Match 字段值和 资源ETag值一致时,服务器才会执行请求

If-None-Match:字段值和 资源ETag值不一致时,服务器才会执行请求

If-Modified-Since:用于确认代理或客户端拥有的本地资源的有效性

如果在此字段指定的日期时间后,资源发生了更新,服务器会接受请求

Range:只需获取部分资源的范围请求

无法处理该范围请求时,则会返回状态码200 OK的响应及全部资源

Referer:会告知服务器请求的原始资源的URL

User-Agent:会将创建请求的浏览器和用户代理名称等信息传达给服务器

3.3,响应首部字段

Accept-Ranges:告知客户端服务器是否能处理范围请求

Accept-Ranges:bytes; Accept-Ranges:none

Age:告知客户端,源服务器在多久前创建了响应;字段值的单位为妙

代理创建响应时必须加上首部字段Age

ETag:能告知客户端实体标识;是一种可将资源以字符串形式做唯一性标识的方式

当资源更新时,ETag值也会更新

Location:可以将响应接收方引导至某个与请求URL位置不同的资源

配合3xx响应,提供重定向的URL

3.4,实体首部字段

Allow:通知客户端能够支持Request-URL指定资源的所有HTTP方法

Content-Encoding:告知客户端服务器对实体的主体部分选用的内容编码方式。

内容编码是指在不丢失实体信息的前提下所进行的压缩

Content-Language:实体主体使用的自然语言

Content-Length:表明实体主体部分的大小;单位是字节

对实体主体进行内容编码传输时,不能再使用Content-Length首部字段

Content-MD5:是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达

Content-Type:说明了实体主体内对象的媒体类型

Expires:将资源失效的日期告知客户端

Last-Modified:指明资源最终修改的时间

非HTTP/1.1首部字段:Cookie、Set-Cookie、Content-Disposition等

相关TAG标签
上一篇:编写一个C++程序,它显示您的姓名和地址
下一篇:CentOS7安装TensorFlow时遇到的问题记录
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站