Fork me on GitHub

Http协议

简介

HTTP协议属于应用层协议,处理客户端和服务端之间的通信,基于TCP协议实现,对TCP连接的折中使用,属于持久链接,即假长链接。

常见头部介绍

  • Content-Length: 发送/接收Body内容的字节数。
  • User-Agent: 这个字段可以帮助统计客户端用了什么浏览器、操作系统等。
  • Content-Type: 请求的时候,告知服务端数据的媒体类(MediaType/MIME Type)。返回的时候告知客户端,数据的媒体类型。
    • text/html: HTML格式。
    • text/css: css文本。
    • application/json: JSON数据格式。
    • image/jpeg: jpg图片格式。
    • text/plain: 纯文本格式。
  • Origin:描述请求来源地址。
  • Accept: 是Http协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)。
    image
    • */*代表所有类型(默认)
    • 多个类型用逗号隔开例如: text/html,application/json
  • Accept-Encoding: 建议服务端发送哪种编码(压缩算法)。
  • Accept-Language: 建议服务端传递哪种语言。
  • Referer:告诉服务端打开当前页面的上一张页面的URL(非浏览器环境有时候不发送Referer,或者虚拟Referer,通常是爬虫)
  • Connection:决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。
    • Http1.0 默认是 close;
    • Http1.1 后默认是 keep-alive。
      • Keep-Alive: 多次请求复用一个TCP连接。
        image
        单个请求:请求完成后,在timeout时间内没第二个请求进来则会关闭。
        多个请求:在一个请求响应之后,在 timeout 时间内有另一个请求进来,就会利用相同的 TCP 连接继续响应这个请求,直到没有更多请求进来,可以通过 max 字段设定最多响应的请求数。

HTTP的方法

  • GET:从服务器获取资源;
  • POST:在服务器创建资源(冥等性);
  • PUT:在服务器修改资源;
  • DELETE: 在服务器删除资源;
  • OPTION:跨域;
  • TRACE: 用于显示调试信息 多数网站不支持;
  • CONNECT: 代理;
  • PATCH: 对资源进行部分更新(极少用)。

状态码

  • 1xx: 提供信息
  • 2xx:成功
    • 203 – Non-Authoritative Information 非权威内容;
  • 3xx:重定向
    • 300 – Multiple Choices 用户请求了多个选项的资源(返回选项列表);
    • 305 – Use Proxy 需要代理;
    • 307 – Temporary Redirect 临时重定向;
    • 308 – Permanent Redirect 永久重定向。
  • 4xx:客户端错误
    • 400 – Bad Request 请求格式错误;
    • 401 – Unauthorized 没有授权;
    • 402 – Payment Required 请先付费;
    • 403 – Forbidden 禁止访问;
    • 404 – Not Found 没有找到;
    • 405 – Method Not Allowed 方法不被允许;
  • 5xx: 服务端错误
    • 500 – Internal Server Error(内部服务器错误);
    • 501 – Not Implemented(没有实现);
    • 502 – Bad Gateway(网关错误);
    • 503 – Service Unavailable(服务不可用);
    • 504 – Gateway Timeout(网关超时);
    • 505 – HTTP Version Not Supported(版本不支持)。

缓存

名词解释

  • 缓存
    存储将被用到的数据,提升访问速度。
  • 缓存条目
    通常是Key/Value结构。如HTTP缓存,通常以Key为URL;Value通常不仅仅只包括数据,还会包括一些描述字段,比如缓存的失效时间等。
    image
  • 缓存置换
    缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目。
  • HTTP缓存
    HTTP缓存最重要的配置项为Cache-Control HTTP 返回头。 不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存。
  • 代理服务器
    代理服务器接收一个请求,然后把请求转发给另一个服务器;从另一个服务器接收结果,然后再返回给请求方。根据工作方式的不同,分成正向代理和反向代理。
  • 正向代理
    把要请求的网址(资源)发送给代理服务器,由代理服务器向目标发送请求后获取资源再返回给请求方。
  • 反向代理
    当请求方向一个网址发送一个请求的时候,请求方意识不到,请求的其实是一个反向代理服务器,这个代理服务器将请求代理给了内部的网络。
  • 强制缓存
    强制缓存行为是强制执行的,在缓存到期前,一定会使用浏览器的缓存。
    image
    image

如果max-age和Expires都有,Expires会被忽略。

  • 协商缓存
    协商缓存的行为是基于变更协商的。在缓存条目对应的资源发生变化前,都使用浏览器缓存。因此协商缓存必须每次都请求服务端。
    • ETag:服务端想实现协商缓存时可返回ETag,资源不变,ETag的数值也不会改变,服务器和浏览器返回的ETag匹配成功返回304Not Modified ETag: 33a64df551425fcc55e4d42a148795d9f25f89d4
    • Last-Modifed(Depreciated):基于变更时间的协商缓存方案,服务器和浏览器返回的Last-Modified匹配成功返回304Not Modified If-Modifed-Since: Wed, 21 Oct 2015 07:28:00 GMT

代理

名词解释

  • 代理
    代理服务器接收一个请求,然后把请求转发给另一个服务器;从另一个服务器接收结果,然后再返回给请求方。根据工作方式的不同,分成正向代理和反向代理。
  • 正向代理
    把要请求的网址(资源)发送给代理服务器,由代理服务器向目标发送请求后获取资源再返回给请求方。
  • 反向代理
    当请求方 向一个网址发送一个请求的时候,请求方意识不到,请求的其实是一个反向代理服务器,这个代理服务器将请求代理给了内部的网络。

同源策略

定义

禁止一个源(origin)的脚本和文档和另一个源的脚本和文档交互(两个URL的protocol,port和host相同,那么同源)

跨域资源共享

  • 前端Jsonp处理
  • 预检
    后端处理请求,前方跨域进行预检时,通过该请求。

Gitee地址:https://gitee.com/zhuayng/foundation-study/blob/develop/SpringBootDemo/src/main/java/com/yxkj/springbootdemo/config/WebMvcConfig.java
参考: https://juejin.cn/post/6844903862956982279

  • 代理
    利用代理将不同源的资源代理到同源的资源; nginx可以实现。

加密和解密

名词解释

  • 加密
    将明文信息变成不可读的密文内容,只有拥有解密方法的对象才能够将密文还原成加密前的内容。
  • 对称加密
    加密/解密用同一个秘钥,且加密方和解密方都知道秘钥,如DES,3DES等。
  • 非对称加密
    加密用一个秘钥,解密用另外一个秘钥;非对称加密安全性高,但速度慢,如RSA算法。

支付宝:支付时商家用应用私钥加密,支付宝用应用公钥验签;回调时支付宝用支付宝私钥加密,商家用支付宝公钥验签。

  • 不可逆加密(摘要算法)
    不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。如MD5加密。

互联网信任体系

  • 浏览器将自己支持的一套加密规则发送给网站。
  • 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
  • 浏览器获得网站证书之后浏览器要做以下工作: 
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。 
c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
  • 网站接收浏览器发来的数据之后要做以下的操作: 
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。 
b) 使用密码加密一段握手消息,发送给浏览器。
  • 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

参考:https://www.runoob.com/w3cnote/https-ssl-intro.html

posted @ 2020-02-23 18:15  晨度  阅读(547)  评论(0编辑  收藏  举报