HTTP基础知识

一: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/3/library/socket.html?highlight=socket#socket-objects

httpsdocs.python.org80(不写默认为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中,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等


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值