前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络编程-http&https

网络编程-http&https

作者头像
Check King
发布2021-08-09 10:48:52
3580
发布2021-08-09 10:48:52
举报

HTTP篇

  • http 请求方法

方法

含义

幂等性

说明

GET

读取或下载资源

请求参数放在url里;GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息;GET请求在URL中传送的参数是有长度限制的

POST

写入或上传资源数据

请求参数放在body里,表示创建新资源的意思

是(多次更新资源最终状态一致)

作用于POST类似,有个微妙区别是,PUT表示修改的含义

PUT

类似于POST

HEAD

获取资源元数据

GET的轻量版,只返回响应头,可用于判断资源是否存在

CONNECT

建立特殊的链接隧道

CONNECT

建立特殊的链接隧道

TRACE

请求追踪,响应的传输路径

  • http返回码

状态码

含义

详细解释

1xx

提示信息,表示一个中间状态,后续需要进一步处理

常见的有"101 Switching Protocols", 表示客户端使用Upgrade头字段,要求在HTTP协议的基础上,改成其他协议继续通信,如websocket。如果服务器同意,则给客户端返回101, 后面的传输协议就不会再使用http了。

2xx

成功,报文已经被接收并正确处理了

200: 一切正常204: 成功但body里没数据206: 范围请求时返回部分数据, 通常还会包含Content-Range

3xx

重定向, 资源位置发生变化,需要客户端重新发起请求

301: 永久重定向302: 临时重定向304: 缓存重定向,用于If-Modified-Since等条件请求,表示资源未修改,可以从缓存里获取.

4xx

客户端错误,客户端发送的请求报文有问题,服务端处理不了

400: 通用的问题请求错误,具体信息没说明403: Forbidden, 服务器禁止访问,该请求没有权限404: Not Found, 资源不存在405: Method Not Allowed, 该方法不允许使用...

5xx

服务端错误

500: Internal Server Error, 通用的服务器错误,具体信息不明确501: Not Implemented,客户端请求功能还不支持502: Bad Gateway, 表示服务器作为网关或代理,返回的错误。表示后端服务有异常503: Service Unavailable, 服务器繁忙,暂时无法响应服务

  • http链接管理
  1. 短连接

http 最初的版本(1.1之前), 是简单的请求-应答的方式,http是建立在tcp/ip的基础上,所以每次请求都要建立连接,请求拿到数据之后,就要断开连接。如果请求获取一个字符的数据,但是还需要建立连接,断开连接这些报文,带宽利用率不高,而且往返的时间增加了很多。

2. 长连接

http 1.1之后,默认支持长连接。客户端请求不需要特别说明,连接默认是启用长连接的,服务端如果支持长连接,会在响应包里放一个"Connection: keep-alive" 字段,告诉客户端,客户端就会用这个tcp一直收发数据。长连接会占用服务器资源,浏览器默认允许最大的单个域名连接数为6-8个左右。

服务器端通常不会主动关闭连接,但可以加一些策略,比如nginx, 通过keepalive_timeout 指令,设置长连接的超时时间。通过keepalive_requests 设置最大请求次数断开连接。

  • 队头阻塞

在一个tcp连接下,Http请求都是一发一收的,按顺序。如果队首的请求比较慢,就会阻塞后面的请求。

可以通过客户端并发连接来解决这个问题,对同一个域名创建多个冰饭的链接(上限为6-8)。但是域名下连接数有限制,可以通过域名分片来解决,也就是将多个域名指向一个服务器。

  • http 安全
  1. cookie

http是无状态的,但是有些状态信息需要在客户端缓存下来,比如登录信息。这里就需要cookie来缓存状态信息了。

用户通过浏览器第一次访问服务器的时候,服务器不知道用户身份,就会给用户创建身份数据,格式是"key=value", 然后放进Set-Cookie字段里,随着相应报文一同发给浏览器。浏览器收到Set-Cookie字段后,保存起来,下次请求的时候就会把值放在请求的Cookie字段里。

2. 安全性

xss攻击(跨站脚本): js脚本可以用document.cookie来读写cookie数据,比如中间人在某个网站的页面上嵌入了js脚本,窃取其他网站的cookie数据。

-- 解决办法: 设置HttpOnly属性,告诉浏览器,此Cookie只允许Http协议传输,其他方式如js不能读写。

xsrf攻击(跨站请求伪造): 攻击者诱导受害者进入第三方网站,在第三方网站中,构造被攻击网站的链接,利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

-- 解决办法: SameSite属性, SameSite=Strict严格限定Cookie不能随着跳转链接跨站发送, SameSite=Lax则宽松一些,允许GET/HEAD等安全方法,但是进制POST跨站发送。

HTTPS篇

  • 什么是HTTPS

http协议是明文传输的,如果明文数据被中间人劫持,会有很大的安全隐患,比如数据泄露,数据被篡改等。https是在tcp与http之间加了一层协议-SSL/TLS, 对http的数据进行加密传输,以达到数据机密性、完整性、身份认证和不可否认的目的。

  • HTTPS的完整过程
  1. 浏览器向服务器发送Client Hello请求,给服务器传送随机数,TLS版本号,支持的密码套件列表等信息
  2. 服务端给浏览器返回Server Hello, 附带随机数,确认使用哪种密码套件进行加解密
  3. 服务端再给浏览器发送包含公钥的证书
  4. 浏览器收到服务器端发送来的证书,验证证书的有效性,如果有效继续下面的操作
  5. 浏览器用算法随机生成一个会话密钥(对称密钥),用证书里的公钥进行加密(非对称加密),发送给服务端
  6. 服务端拿到加密的密钥,用私钥解密,拿到会话密钥
  7. 双方拥有了对称密钥,后面就用对称密钥发送和接收数据
  • 为什么要用非对称加密来传输对称密钥?

因为如果浏览器和服务器提前约定好对称密钥,这个密钥万一泄漏了,传输的数据都会被窃取。

  • 为什么不直接用非对称加密来加密数据?

非对称加密的性能不好,所以Https采用非对称加密和对称加密混合的方式,用非对称加密加密好对称密钥,保证对称密钥的机密性,后面会话过程用对称密钥加密数据,这样性能不会很差。

  • 为什么需要证书?

证书的目的是为了证明公钥确实是网站发送的,如果没有证书和证书的签名来确保公钥的正确性,中间人可能会伪造一个公钥给浏览器,并作为服务器和浏览器的中转,窃取了信息。证书类似于身份证,由权威机构(CA)颁发,并且有签名信息,不能伪造。这样浏览器拿到证书之后,对证书进行验证,拿到里面的公钥,后面才能生成会话密钥。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTP篇
  • HTTPS篇
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档