首页 > 其他分享 >HTTP

HTTP

时间:2022-11-03 23:12:23浏览次数:39  
标签:加密 缓存 HTTP 请求 服务器 客户端

HTTP

URL和URI的区别:URL是URI的子集,在URI的基础上增加了定位能力,URI还有URN,无法定位资源.
PUT不带验证机制,一般不使用,且只能完全替换资源,而PATCH允许部分修改,OPTIONS查询支持的方法,查询指定的URL能够支持的方法。CONNECT要求与代理服务器通信时建立隧道,使用SSL和TLS协议把通信内容加密后经过网络隧道传输,TRACE追踪路径,会把通信路径返回。

  • 状态码:1XX为信息性状态码。接收的请求正在被处理,2XX为请求正常处理,3XX为重定向,附加操作以完成请求,4XX客户端错误,5XX服务器错误。
    记住几个经典的:304 Not Modified:如果请求报文首部的一些条件不满足时返回。400请求报文中存在语法错误,401请求认证失败,500请求时发生错误,503服务器超负载或者停机维修.

连接管理:

  1. 短连接与长连接: 在请求访问时会有多张图片的传输,此时使用长连接,此时使用Connection : Keep-Alive.
  2. 流水线:默认情况下,是按顺序发送请求,在同一长连接中,可以连续发送多个请求,不等待响应返回。

Cookie:新的方式可以用storage和IndexedDB放本地,使用Cookie时会放在请求首部字段发送给服务器,存在两种Cookie,持久性(过期后才删除)和会话期(关闭浏览器自动删除),Domain标识符指定哪些主机可以接受Cookie,标记为HttpOnly的Cookie不能被Js调用,一定程度上避免XSS攻击,标记为Secure的Cookie只能通过HTTPS加密的请求使用。

Session:可以存在服务器端,优点是效率更高且可以存各种类型的数据,登录时提交用户名和密码,验证正确后把用户信息存储在Redis中,在Redis中的Key为SessionID,响应报文中的Set-Cookie首部字段包含这个SessionID,并存进浏览器中,之后请求时使用这个SessionID在Redis中取出信息即可。

缓存:服务器和客户端都可进行缓存,cache-control为no-store时不进行任何缓存,no-cache时需要先确认缓存有效性,private规定资源作为私有缓存(在浏览器中),public为公有缓存(存在代理服务器中).

缓存验证:把缓存资源中的ETag存在If-None-Match首部,判断缓存资源和最新ETag是否一致,如果一致缓存资源有效,返回304 Not Modified

内容协商:根据内容协商返回最合适的内容:

  1. 服务器驱动型:服务器根据HTTP首部字段返回特定的资源,实现复杂,信息冗长
  2. 代理驱动型:客户端发送包含Accept-Language字段请求后,源服务器返回的响应包含Vary:Accept-Language内容,缓存服务器对这个响应进行缓存后,在下一次访问同一个URL资源时,Accept-Language与缓存中对应值相同时才返回缓存。

内容编码:将实体主体进行压缩,减少传输的数据量,浏览器发送的Accept-Encoding包含支持的算法,服务器使用Content-Encoding告诉浏览器使用了哪种算法。

范围请求:网络出现中断时,服务器只发送了一部分数据,客户端可以只请求未发送部分,方法有:

  1. Range:在请求报文中加入Range: bytes=0-1023设置请求范围。
  2. Accept-Ranges:使用Accept-Ranges: bytes告知客户端是否可以处理范围请求.
  3. 响应状态码一般使用206,如果返回200代表不支持范围请求。

分块传输编码:可以将数据分割成多个块,让浏览器逐步显示。

多部分对象集合:一个报文主体可有多种类型的实体同时发送,用boundary分开,Content-Type: multipart/form-data; boundary=AaB03x

虚拟主机:采用虚拟主机让一台服务器拥有多个域名,可看成多个服务器.

通信数据转发:

  1. 代理的作用:缓存,负载均衡,网络访问控制,访问日志记录。
  2. 网关:把HTTP转为其它协议通信,请求非HTTP服务器的服务。
  3. 隧道:采用SSL建立一条安全的通信线路。

HTTPS

让HTTP和SSL通信,再由SSL和TCP通信,从而实现加密,认证,网站性保护.

加密:

  1. 对称密钥加密:加密解密使用同一密钥,可是不够安全。
  2. 非对称加密:公钥所有人可见,发送方拿到公钥进行加密,接收方拿到后用私钥解密。
  3. HTTPS采用的加密:首先使用非对称加密传输对称加密的密钥,即先非对称加密,再对称加密。

认证:

申请CA后,CA会在判明申请者的身份后对已经申请的公钥做数字签名,把公钥放进证书绑定,然后服务器把证书发送给客户端,客户端拿到公钥后使用数字签名验证,验证通过就可以进行通信了。

完整性保护:HTTP也有MD5摘要功能,但内容篡改后无法意识到,而HTTPS结合了加密和认证,如果报文被篡改,也很难重新计算摘要,因为无法轻易获得明文。

HTTP/2.0的特点:

  1. 只有一个TCP连接
  2. 一个数据流有一个唯一标识符和可选优先级。
  3. 消息是与逻辑请求和响应对应的完整的一系列帧。
  4. 帧是最小通信单位,来自不同的数据流的帧可以交错发送,收集后使用标识符进行组装。

首部压缩:
HTTP/2.0要求客户端与服务端维护更新同一个之前见过的首部字段表,所以可以基于之前的表:

安全的方法:GET,HEAD,OPTIONS.不安全的方法有:POST,PUT,DELETE.

幂等性,同样的请求执行一次和执行多次结果相同,服务器状态相同。

标签:加密,缓存,HTTP,请求,服务器,客户端
From: https://www.cnblogs.com/mengyiqwq/p/16856199.html

相关文章

  • 解决本地浏览器运行项目时的跨域问题-Access to XMLHttpRequest at ‘file:///D:/WebP
     解决本地浏览器运行项目时的跨域问题-AccesstoXMLHttpRequestat'file:///D:/WebPracties/xxxxxx/data/funData.json问题描述解决办法一解决办法二解决方法三问题描......
  • Apache(httpd)
    一、什么是Apache?     Apache(或httpd)服务,是Internet上使用最多的Web服务器技术之一,通俗来讲就是一个用于搭建网站的服务。有两个版本:http:超文本传输协议,通过......
  • 【OkHttp框架】OkHttp框架原理与参数配置
    一、参考资料​​Okhttp的线程池|黑白了落夜的博客​​​​OKhttpClient简单使用总结「建议收藏」-腾讯云开发者社区-腾讯云​​......
  • golang封装http get函数请求并且携带header头信息
    有遇到这种需求,golang发送GET请求,携带header头信息,比如header里带着验证token封装函数如下://Get请求携带headerfuncGetWithHeader(urlstring,headersmap[string]st......
  • C# HttpClient 封装
    usingSystem.Text;namespaceHTTPClientPacking{publicclassHttpClientHelper{privatestaticHttpClientHelper?_httpClientHelper=null;......
  • 为什么HTTP代理会出现“返回403 forbidden”
    平时我们在使用HTTP代理的过程中,稍有不慎就会出现各种各样的错误代码,其中“403forbidden”就是常见的一种。它属于HTTP协议中的一个状态码(StatusCode),可以简单的理......
  • HTTP代理究竟是宜没好货还是一分价钱一分货
    我们在HTTP代理选择的时候,不少朋友都会犯难,到底是便宜没好货,一分价钱一分货?还是只买对的,其实代理不一定要买多便宜,也不一定要买多昂贵的。还是之前我们老生常谈......
  • 免费的HTTP代理有什么好处吗
    我们在接手爬虫业务时候,往往需要选择一款适合自己业务的HTTP代理,通常都会选择所谓性价比高的代理,可是真的是性价比越高就越适合我们的业务吗?其实不然。不少朋友,尤......
  • HttpClient 调用时的采坑记录及解决办法
    1、首先,https是颁发给域名的,如果采取ip加https访问的机制,会出现证书不安全的问题,直接使用HttpClient去连接会出现客户端无法信任服务器的问题。解决思想:如果我们去调用这......
  • nginx 强制https
    nginx强制https 通常有如下两种方法强制https推荐第二种,第二种更高效1、使用nginx的rewrite方法server{listen80;server_namexxx.c......