HTTP协议的学习

1.说一下什么是Http协议?

对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”
(1)、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
(2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

2.0
HTTP/2采用二进制格式而非文本格式
HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
使用报头压缩,HTTP/2降低了开销
HTTP/2让服务器可以将响应主动“推送”到客户端缓存中

2.说一下Http协议中302状态

http协议中,返回状态码302表示重定向。
这种情况下,服务器返回的头部信息中会包含一个 Location 字段,内容是重定向到 的url。

(1).请求行:包含请求方法,URI,HTTP版本协议

(2).请求首部字段

(3).请求内容实体

响应报文包含三部分:

(1).状态行:包含HTTP版本,状态码,状态码原因短语

(2).响应首部字段

(3).响应内容实体

3、Http协议中有哪些请求方式?

GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
OPTIONS:查询响应URI支持的HTTP方法

4、一次HTTP请求的流程

域名解析、TCP三次握手、发起HTTP请求、响应HTTP请求、浏览器解析HTML代码并请求HTML中的资源(如JS、CSS、图片等)、浏览器对页面进行渲染呈现给用户。

5、get与post请求的区别?

区别1、get重点在从服务器上获取资源、post重点在向服务器发送数据
区别2、get传输数据是通过URL请求,以filed(字段)=value的形式,置于URL后,并用”?”连接,多个请求数据之间用”&”连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin
区别三:get传输量小,因为受URL长度限制,但效率较低
post可以传输大量数据,所以上传文件时只能用post方式
区别四:get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等
post较get安全

6、常见的Http协议状态

200:请求被正常处理

204:请求被受理但没有资源可以返回

206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

301:永久性重定向

302:临时重定向

303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上

304:发送附带条件的请求时,条件不满足时返回,与重定向无关

307:临时重定向,与302类似,只是强制要求使用POST方法

400:请求报文语法有误,服务器无法识别

401:请求需要认证

403:请求的对应资源禁止被访问
未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能是发生403的原因

404:服务器无法找到对应资源

500:服务器内部错误

503:服务器正忙

Cookie是否会被覆盖,localStorage是否会被覆盖

Cookie是可以覆盖的,如果重复写入同名的Cookie,那么将会覆盖之前的Cookie

如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。

localStorage存储在一个对象中. 有键值对

什么是localStorage,在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

localStorage的优势

1、localStorage拓展了cookie的4K限制

2、localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库,相比于cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的

localStorage的局限

1、浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性

2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换

3、localStorage在浏览器的隐私模式下面是不可读取的

4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡

5、localStorage不能被爬虫抓取到

localStorage与sessionStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的键值对会被清空

划重点:http传输各种类型的文件

http协议采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件上传的时候使用

“`
multipart/form-data
在Web表单文件上传时使用

multipart/byteranges
状态码206 响应报文包含了多个范围的内容时使用
““
在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type
使用范围请求,可以实现断点续传

使用代理服务器的理由有:
利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。
缓存代理:
代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本缓存在代理服务器上
与之对应的是透明代理。

利用网关可以由http请求转化为其他协议通信。。

HTTP首部字段

HTTP首部字段是构成HTTP报文的要素之一。无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用,。
使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言、认证信息等内容

通用首部字段中的Cache-Control的指令
从字面上很容易把no-cache误解成为不缓存。但事实上no-cache代表不缓存过期的资源。缓存会向源服务器进行有效期确认后处理资源。no-store才是真正地不进行缓存。

请求首部字段

请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。

Accept

通知服务器,用户代理能够处理的媒体类型以及媒体类型的相对优先级。可使用type/subtype 这种形式,一次指定多种媒体类型

响应首部字段

响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息以及对客户端的附加要求等信息。

实体首部字段

实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。

为Cookie服务的首部字段

Set-Cookie 开始状态管理所使用的Cookie信息 属于响应首部字段
Cookie 服务器接收到的Cookie信息 属于请求首部字段

HttpOnly 属性

Cookie的HttpOnly属性是Cookie的扩展功能,它使JavaScript脚本无法获得Cookie。其主要目的是为了防止跨站脚本攻击(Cross-site-scripting,XSS)对Cookie的信息窃取。

HTTP的缺点

1、通信使用明文,也就是不加密,内容可能会被窃听
2、不验证通信方的身份,因此可能遭遇伪装
3、无法证明报文的完整性,所以可能被篡改

针对缺点1:不加密

不加密的http可以用抓包工具抓取到内容,比如Wireshark。
既然没有加密成功,那么解决方案就是进行加密
1、通信的加密
http本身没有加密机制。但是可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。
这样建立好安全通信线路之后,就可以在这条线路上进行HTTP通信了,与SSL组合使用的HTTP被称为HTTPS(HTTP Secure 超文本传输安全协议)或者HTTP over SSL
2、内容的加密
客户端对HTTP报文进行加密处理后再发送请求。如果破解了加密,内容仍有被篡改的风险。

针对缺点2:不验证通信方的身份

虽然HTTP协议无法确定通信方,但如果使用SSL则可以,SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可以用于确定通信方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说是异常困难的事情。所以只要能够确认通信方持有的证书,即可判断通信的真实意图。

针对缺点3:无法证明报文完整性,可能已遭受篡改

接收内容有误
HTTP没有任何办法确认发出的请求/响应 和接收到的请求/相应是前后相同的。
比如从网站上下一个内容,无法确认客户端下载的文件和服务器上存放的文件是否前后一致。文件内容在传输途中可能被篡改为其它的内容。即使内容真的已经被改变,客户端也觉察不到.
像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击 防止篡改常用的方法是MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。‘都不能百分百保证。因为MD5本身被改写的话用户是没有办法意识到的。

HTTPS采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

什么是公开密钥加密

公开密钥加密使用一对非对称的密钥。一把叫作私有密钥,另一把叫作公开密钥。私有密钥不能让其他人知道,而公开密钥则可以随便发布,任何人都可以获得。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到加密后的信息再使用自己的私有密钥进行解密,利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
另外,要想根据密文和公开密钥,恢复到信息原文是异常困难的,因为解密过程是在对离散对数进行求值,这并非轻而易举就能办到,退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码的破解还是有希望的,但是真的很难。

什么是共享密钥加密

加密和解密用同一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。

在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。公开密钥加密处理起来比共享密钥加密方式更为复杂,因此若在通信时使用公开密钥加密方式,效率就很低。

为什么不一直使用HTTPS ???

因为与纯文本通信相比,加密通信会消耗更多的cpu及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上,能够处理的请求数量必定会随之减少。因此,如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。特别是每当那些访问量较多的Web网站在进行加密处理时,它们所承担着的负载不容小觑。在进行加密处理时,并非对所有内容都进行加密处理,而是仅在那些需要信息隐藏时才会加密,以节约资源。除此之外,想要节约购买证书的开销也是原因之一。要进行HTTPS通信,证书是必不可少的,而使用的证书必须向认证机构(CA)购买,证书价格可能会根据不同的认证机构略有不同,通常,一年的授权费用就要600人民币

声明:参考网上的一些资料和图解HTTP

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值