对http相关知识整理(来自MDN)

一.Proxies既可以表现得透明,又可以不透明(看请求是否通过它们),主要表现在这几个功能上:

a.缓存(可以是公开的或是私有的,像浏览器的缓存)

b.过滤(像反病毒扫描,家长监护)

c.负载均衡,让多个服务器服务不同的请求

d.对不同资源的权限控制

e.登陆,允许存储历史信息

 

二.HTTP可以控制的常见特性

  1.缓存 
文档怎么缓存能够通过HTTP来控制。服务端能告诉代理和客户端什么需要被缓存, 缓存多久,而客户端能够命令中间缓存代理来忽略存储的文档。

2.开放同源限制
为了防止网络窥听和其它的隐私泄漏,浏览器强制对Web网站做了分割限制。只 有来自于相同来源的网页才能够获取网站的全部信息。这样的限制有时反而成了负 担,HTTP可以通过修改头部来开放这样的限制,因此web文档可以是由不同域下 的信息拼接成的(在某些情况下,这样做还有安全因素考虑在里面)。

3.认证
一些页面能够被保护起来,仅让特定的用户进行访问。基本的认证功能可以直接通 HTTP提供,使用Authenticate相似的头部就可以,或者用HTTP cookies来设定 指定的会话。

4.代理
服务端和客户端通常都处在内部网上,彼此的真实地址都是不可见隐藏的。HTTP 请求就要通过代理穿过网络障碍。不是所有的代理都是HTTP代理的,像一些用 SOCKS协议的代理就运作在更底层(一些其它的协议,像ftp也能够被它们处理)

5.会话 
Cookies用一个服务端的状态连接起了每一个请求。这就创建了会话,虽然基本的 HTTP是无状态协议。这很有用,不仅是因为能用到购物车这样的电商业务上,更 是因为,它使得任何网站都能够配置页面展现的东西了。

 

http缓存

1、种类

私有与共享缓存。

共享缓存存储的响应能够被多个用户使用。

私有缓存只能用於单独用户。本文将主要介绍浏览器与代理缓存,除此之外还有网关缓 存、CDN、反向代理缓存 和负载均衡器等部署在服务器上,为站点和 web 应用提供 更好的稳定性、性能和扩展性。

缓存控制 Cache-control

     1完全不支持缓存

      缓存中不得存储任何关于客户端请求和服务端响应的内容。每次由客户端发起的请求  都会下载完整的响应内容。

     2)不缓存内容

      3)私有缓存和公共缓存

       4)缓存过期(max-age标志来判断)

       5)缓存验证(must-revalidate),在使用一些老的资源前强制验证状态判断其是否 过期。详情看下文关于缓存校验的内容。

        6Pragma 

   3.缓存有效性

    1)当发起一个针对旧缓存资源的请求时,会在请求头里带上If-None-Match用来判 断缓存是否还有效。如果有效,服务端返回304(Not Modified)和空的body 节省一部分带宽。

      2)如果max-ageexpires属性都没有,找找头里的Last-Modified信息。如果有,  缓存的寿命就等于头里面Date的值减去Last-Modified的值除以10  

      3缓存时长计算公式缓存时长 响应时间 缓存寿命 当前时间

HTTP cookies

   1.Cookie主要用在以下三个方面:

     (1)会话状态管理(如用户登录状态、购物车)

     (2)个性化设置(如用户自定义设置)

     (3)浏览器行为跟踪(如跟踪分析用户行为)

  2.Cookie的作用域

    DomainPath指令定义了Cookie的作用域,即需要发送CookieURL集合。

  Domain指令规定了需要发送Cookie的主机名。如果没有指定,默认为当前的文档地址 上的主机名(但是不包含子域名)。如果指定了Domain,则一般包含子域名。

如果设置了Domain=mozilla.org,则Cookie包含在子域名中(如developer.mozilla.org)。

Path指令表明需要发送CookieURL路径。字符%x2F ("/")用做文件夹分隔符,子文 件夹也会被匹配到。

如设置Path=/docs,则下面这些地址都将匹配到:

"/docs",

"/docs/Web/",

"/docs/Web/HTTP"

  3.avaScript通过Document.cookies访问Cookie

    通过Document.cookie属性可以来创建新的Cookie,也能够通过该属性来访问未被指定   HttpOnly标志的Cookie

document.cookie = "yummy_cookie=choco";

document.cookie = "tasty_cookie=strawberry";

console.log(document.cookie); // logs "yummy_cookie=choco; tasty_cookie=strawberry"

4.僵尸Cookie和删不掉的Cookie

Cookie的一个极端使用例子是僵尸Cookie(或称之为删不掉的Cookie”),这类Cookie 较难以删除,甚至删除之后会自动重建。它们一般是使使用Web storage APIFlash 地共享对象或者其他技术手段来达到目的的

 

五、访问控制

 (当一个资源从与该资源本身所在的服务器的域或端口不同的域或不同的端口请求一个资源时,资源会发起一个跨域 HTTP 请求。

 1.同源策略(服务器、域名、端口)

 2.简单请求GETHEADPOST

 3.Fetch 规范定义了 CORS 安全的首部字段集合

Accept

Accept-Language

Content-Language

Content-Type (需要注意额外的限制)

DPR

Downlink

Save-Data

Viewport-Width

Width

4. Content-Type 的值属于下列之一:

application/x-www-form-urlencoded

multipart/form-data

text/plain

六、请求方式

1.GET

GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.

HEAD

HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体.

POST

POST方法用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改

PUT

PUT方法用请求有效载荷替换目标资源的所有当前表示。

DELETE

DELETE方法删除指定的资源。

CONNECT

CONNECT方法建立一个到由目标资源标识的服务器的隧道。

OPTIONS

OPTIONS方法用于描述目标资源的通信选项。

TRACE

TRACE方法沿着到目标资源的路径执行一个消息环回测试。

PATCH

PATCH方法用于对资源应用部分修改。

 

七、状态码

 状态码主要分为五大类:消息,成功,重定向,客户端错误,服务器端错误。

 304表示no-modify403 Forbidden,404Not Found,405Method Not Allowed,503Service Unavailable


 

 

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章