HTTP协议特性

认识HTTP客户端

只要能够发出http请求的程序就能称为HTTP客户端.比如如果你安装了node.js,你可以在cmd使用curl指令发出http请求.

CORS跨域请求的限制与解决

解决异源问题有两种解决方案:jsonp实现跨域请求和CORS跨域请求.
CORS就是在服务端中设置返回的数据包的头(Head):

response.writeHead(200,{'Access-Control-Allow-Origin':'*'});

如果不设置这个允许跨域的头,浏览器会把服务器返回的内容自动拦截掉.

jsonp原理就是浏览器是允许link标签,image标签script标签这些在标签上加载路径内容时是允许跨域的.

CORS跨域限制以及请求验证

CORS全称是"跨域资源共享"(Cross-originresourcesharing).
在跨域的时候默认允许跨域的方法有:GET,HEAD,POST
而其他的方法要想跨域需要进行预请求验证.
在跨域的时候默认允许跨域的请求头中Content-Type包括:
text/plain;
multipart/form-data;
application/x-www-form-urlencoded.
除了上述的三个外其他Content-Type都需要预请求验证.
在跨域的时候默认允许跨域的请求头’Accept’,‘Accept-Language’,‘Content-Language’.
如果XMLHttpRequestUpload对象没有注册任何事件监听器,那么这个对象也要经过预请求验证.

预请求就是浏览器会先发送Requst Method为OPTIONS的请求包询问服务器是否能跨域,再发送真正的请求包.

//这行代码虽然保证了任何域名都能访问,但是如果发送的请求不满足默认允许的跨域限制,比如heads为X-Test-Cors,则需要手动设置放行
response.writeHead(200,{
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Headers':'X-Test-Cors'
});

设置允许跨域请求的最长时间1000s,即如果通过了预请求验证,则1000s之内不需要再进行预请求验证:
在这里插入图片描述

缓存头cache-control的含义与使用

cache-control的特性:可缓存性,包括:
public:http经过的任何地方都可以进行缓存
private:发起请求的浏览器才可以进行请求
no-cache:不可以进行缓存

cache-control的特性:缓存期限,

  • max-age=< seconds >,设置缓存内容允许缓存的时间(单位:秒)
  • s-maxage=< seconds >,只在代理服务器生效,且当在代理服务器中时,s-maxage的优先级最高.
  • max-stale=< seconds >,即便缓存过期了,只要在max-stale的时间内,我们浏览器发起方依旧可以使用过期的缓存.这个只在发起方有效.

cache-control的特性:重新验证,

  • must-revalidate:在我们设置了max-age的缓存当中,如果缓存已经过期了,必须重新发送请求获取新的缓存.
  • proxy-revalidate:在我们设置了max-age的代理缓存当中,如果缓存已经过期了,必须重新发送请求获取新的缓存.而不能直接使用本地的缓存.

使用例子:
在这里插入图片描述
注意事项:如果设置了使用浏览器缓存,则客户端将不会通过url访问服务器.这意味着服务器更新内容后,客户端由于不访问url则内容不更新.解决方法是给url添加一个内容hash码,比如在当前例子中给script.js的内容进行hash运算,如果hash码不变就使用旧的缓存,hash码变化就使用新的缓存

缓存验证Last-Modified和Etag的使用

缓存操作流程图:
在这里插入图片描述
Last-Modified(上次修改时间)配合If-Modified-Since使用,对比上次修改时间以验证资源是否需要更新.

Ttag(数据签名),如果资源数据有修改那么就会生成新的数据签名.配合If-Match或者If-none-Match使用,对比资源的签名判断是否使用缓存.

cookie和session

Cookie是在服务端返回数据的时候,通过Set-Cookie这个header设置到浏览器里,保存在浏览器的内容就是Cookie,浏览器在进行下次同域的请求中就会带上这些Cookie.
Cookie的属性:

  • max-age和expires设置过期时间
  • Secure只在https的时候发送
  • HttpOnly无法通过document.cookie访问
    在这里插入图片描述
    设置cookie过期时间:
    在这里插入图片描述

不同域名之间它们的cookie是不能共享的.但是如果这两个域名是某个域名的二级域名(子域名),则给父域名的cookie设置domain,其子域名就能共享父域名cookie.
在这里插入图片描述
访问a.test.com可以收到cookie:abc=456;

我们一般会把session的id保存到cookie中

HTTP长连接

长连接概念:http请求发送的时候要先去创建tcp的连接,然后在tcp的连接上面把http请求的内容发送并接收返回内容.不关闭连接.
在这里插入图片描述
浏览器允许的最大tcp并发连接数为6.
如果Connection:close,则请求发出后tcp连接会关闭.

数据协商

在客户端给服务端发送一个请求时,客户端声明这个请求拿到的数据格式应该为怎么样子.
客户端在请求中通过声明Accept来规定数据类型,Accept-Encoding设置数据编码方式.Accept-Language设置返回的语言,User-Agent表示浏览器相关信息
服务端返回的Content-Type设置返回的数据格式.Content-Encoding声明数据压缩方式,Content-Language声明返回的语言.

Redirect

重定向,
在这里插入图片描述
重定向后url连接也会刷新.302的头才会触发跳转而200不会,因为302的语义为临时跳转.301为永久跳转.

CSP

CSP全称(Content-Security-Policy)意为内容安全策略.
作用是

  • 限制资源获取
  • 报告资源获取越权

default-src:限制全局
connect-src
Content-Security-Policy:default-src http:https

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值