HTTP与HTTPS

  • HTTP与HTTPS的区别
  • 长连接和短连接
  • http版本
  • http请求方式
  • http是否有状态,什么是无状态?
  • http常用头部
  • get和post的区别
  • http报文(请求报文和响应报文)头部

HTTP:一种超文本传输协议,http在计算机世界里专门在两点之间传输文字,图片,音频,视频等超文本数据的约定和规范。应用层协议
HTTPS:= HTTP+SSL/TLS(安全传输层协议)

HTTP与HTTPS的区别
http:是未经加密的协议,明文传输,它的容易被攻击者监听,数据容易被窃取、发送方和接收方容易被伪造。因此 HTTP 协议不适合传输一些敏感信息,比如信用卡号、密码等。
https:是安全的协议,它通过密钥交换算法,签名算法,对称加密算法,摘要算法,能够解决这些问题
http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
http的默认端口是80,https的默认端口是443

什么是无状态协议?HTTP是无状态协议吗?怎么解决?
无状态协议:浏览器会事物处理没有记忆能力。举个例子来说就是比如客户请求获得网页之后关闭浏览器,然后再次启动浏览器,登录该网站,但是服务器并不知道客户关闭了一次浏览器
HTTP 就是一种无状态的协议,他对用户的操作没有记忆能力。

简述HTTP1.0,1.1,2.0的区别

—HTTP1.0:

  • 仅提供最基本的认证,用户名和密码不进行加密,因此容易被窃听
  • 使用短连接。即每次连接都需要经过TCP的3次握手和4次挥手,效率较低
  • 只是用header 中的 if-modified-since,expires作为缓存失效的标准
  • 不支持断点续传,每次都会传送全部的页面和数据
  • 认为每台计算机只能绑定一个IP,所以请求消息中的URL并没有传递主机名(hostname)

—HTTP1.1:

  • 使用了摘要算法来进行身份验证
  • 默认使用长连接。长连接就是只需一次建立就可以传输多次数据,完成传输后,只需要一次切断连接即可。长连接的连接时长可以通过请求头 Keep-alive来设置
  • 新增加了 E-tag,If-Unmodified-Since, If-Match, If-None-Match 等缓存控制标头来控制缓存失效
  • 支持断点续传。通过请求头中的Range来实现
  • 使用了虚拟网络,在一台物理计算机上可以存在多个虚拟主机,并且它们共享一格IP地址

—HTTP2.0:主要的改变如下

  • 头部压缩。由于 HTTP 1.1 经常会出现 User-Agent、Cookie、Accept、Server、Range 等字段可能会占用几百甚至几千字节,而 Body 却经常只有几十字节,所以导致头部偏重。HTTP 2.0 使用 HPACK 算法进行压缩
  • 二进制格式。HTTP2,0采用了更加接近TCP/IP的二进制形式,抛弃了ASC||码,提升了解析效率
  • 强化安全。HTTP2.0运行于HTTPS之上
  • 多路复用。即每个请求都可以用作连接共享,一个请求对应一个id,这样一个连接上可以有多个请求

长连接和短连接:

  • 在HTTP/1.0中,默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
  • 但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive。
  • 在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
  • HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

get 和post的区别
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据

  • get:一般用于请求,请求服务器返回资源;post一般用于表单的提交,相当于把信息提交给服务器,等待服务器做出响应
  • get方法不安全,在发送请求的过程中,请求参数会放在url的后面,因而容易导致被攻击者窃取,对信息进行破坏和篡改;post把参数放置在请求体body中,对用户不可见
  • get请求的url有长度限制。post请求把参数和值放置在消息体中,对数据长度没有要求
  • get在浏览器反复的回退/前进操作是无害的,post则会再次提交表单请求
  • get请求会被浏览器主动cache,post不会,除非手动设置
  • get 请求在发送过程中会产生一个 TCP 数据包;post 在发送过程中会产生两个 TCP 数据包。对于 get 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 post,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)
    HTTP常见的请求头

HTTP的消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的那些组件。HTTP消息头用来准确描述正在获取的资源、服务器或者客户端的行为,定义了HTTP事务中的具体操作参数

通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成。
HTTP的头域包括通用头,请求头,响应头和实体头四个部分。
每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域 值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
通用头: Date,Cache-Contorl,Connection
Date:可以出现在请求头和响应头中,表示的是格林威治时间
Cache-Contorl:可以出现在请求头和响应头中。主要大类有可缓存性,阀值性,重新验证并重新加载,和其他特性。
在请求头中,
在这里插入图片描述
在响应头中
在这里插入图片描述
Connection:决定当前事务(一次3次握手4次挥手)完后成后是否会关闭网络连接。一种是持久性连接即一次事务完成后不关闭网络连接。另一种是非持久性连接,即一次事务完成后关闭网络连接。
其他通用头如下:
在这里插入图片描述
请求头:host,Referer,if-modified-match,Accept,Accept-Charset,Accept-Language
host指明了服务器的域名(会与虚拟主机来说),以及(可选的)服务器监听的TCP端口号。如果没有给定端口号,会自动使用默认的端口号
Referer 当浏览器向web服务器发送请求时,一般会带上Referer,告诉服务器网页从哪个链接过来的,服务器因此可以获得一些信息用于处理
if-modified-match用于确认代理合或客户机拥有本地资源的可用性。获取资源的更新日期,可以通过确认首部字段Last-Moidifid来确认。简而言之,如果在Last-Moidifid之后更新了服务器资源,则服务器则会响应200,否则服务器则返回304.
if-None-Match:
Accept:接受请求http标头会告知客户端其能够理解的MIME类型
Accept-Charset:规定了服务器处理表单数据所接收的字符集。常用的字符集有:UTF-8,Unicode字符编码,ISO-8859-1-拉丁字母表的字符编码
Accept-Language:用来告知服务器用户代理能够处理的自然语言集(中文或英文),以及自然语言集的相对优先级,可一次指定多个自然语言集。
其他请求头:
在这里插入图片描述
响应头:Access-Contorl-Allow-Origin,Keep-Alive,Server,Set-Cookie,Transfer-Encoding.X-Frame-Option
Access-Control-Allow-Origin:指定一个来源,它告诉浏览器允许该来源进行资源访问。

Keep-Alive 表示的是 Connection 非持续连接的存活时间,可以进行指定。

Server。服务器标头包含有关原始服务器用来处理请求的软件的信息。应该避免使用过于冗长和详细的 Server 值,因为它们可能会泄露内部实施细节,这可能会使攻击者容易地发现并利用已知的安全漏洞。
Set-Cookie 用于服务器向客户端发送 sessionID。
Transfer-Encoding 规定了传输报文主体时采用的编码方式。
HTTP /1.1 的传输编码方式仅对分块传输编码有效。

X-Frame-Options。HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段。
首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。
响应头的汇总
在这里插入图片描述
实体头:描述消息正文内容的http标头,实体头用于http请求合响应中。头部Content-Length、 Content-Language、 Content-Encoding 是实体头。

Content-Length 实体报头指示实体主体的大小,以字节为单位,发送到接收方。
Content-Language 实体报头描述了客户端或者服务端能够接受的语言。
Content-Encoding 这又是一个比较麻烦的属性,这个实体报头用来压缩媒体类型。Content-Encoding 指示对实体应用了何种编码。常见的内容编码有这几种: gzip、compress、deflate、identity ,这个属性可以应用在请求报文和响应报文中
其他实体头
在这里插入图片描述
http报文头部
http有两类报文:请求报文 响应报文
请求报文:
请求行包括: 请求方法,URL(包括参数信息),协议版本这些信息(GET /admin_ui/rdx/core/images/close.png HTTP/1.1)

在这里插入图片描述

请求头部(Header)是一个个的key-value值,比如

Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
空行(CR+LF):请求报文用空行表示header和请求数据的分隔

请求数据:GET方法没有携带数据, POST方法会携带一个body
响应报文:
HTTP的响应报文包括:状态行,响应头,空行,数据(响应体)
在这里插入图片描述
状态行包括:HTTP版本号,状态码和状态值组成。

响应头类似请求头,是一系列key-value值

Cache-Control: private
Content-Encoding: gzip
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
空白行:同上,响应报文也用空白行来分隔header和数据

响应体:响应的data,本例中是一段HTML
————————————————
版权声明:本文为CSDN博主「shirley_zx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zx_emily/article/details/83024065

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值