HTTP学习笔记(一)

1.状态码

重定向:3开头

最常见的重定向状态码就是301和302,另外还有几个不太常见的,例如303、307、308等。它们最终的效果都差不多,让浏览器跳转到新的URI,但语义上有一些细微的差别

301俗称“永久重定向”(Moved Permanently),意思是原URI已经“永久”性地不存在了,今后的所有请求都必须改用新的URI

浏览器看到301,就知道原来的URI“过时”了,就会做适当的优化。比如历史记录、更新书签,下次可能就会直接用新的URI访问,省去了再次跳转的成本。搜索引擎的爬虫看到301,也会更新索引库,不再使用老的URI

302俗称“临时重定向”(“Moved Temporarily”),意思是原URI处于“临时维护”状态,新的URI是起“顶包”作用的“临时工”。浏览器或者爬虫看到302,会认为原来的URI仍然有效,但暂时不可用,所以只会执行简单的跳转页面,不记录新的URI,也不会有其他的多余动作,下次访问还是用原URI

303 See Other:类似302,但要求重定向后的请求改为GET方法,访问一个结果页面,避免POST/PUT重复操作

304:资源未被修改

307 Temporary Redirect:类似302,但重定向后请求里的方法和实体不允许变动,含义比302更明确

308 Permanent Redirect:类似307,不允许重定向后的请求变动,但它是301“永久重定向”的含义

303、307、308 有的浏览器和服务器可能不支持,开发要谨慎,测试确认浏览器的效果后才能使用

重定向的应用场景
需要重定向的一个常见原因是“资源不可用”,需要用另一个新的 URI 来代替。不可用的原因很多,比如域名变更、服务器变更、网站改版、系统维护、这些都会导致原 URI 指向的资源无法访问,为了避免 404 ,就需要使用重定向跳转到新的 URI,继续服务。

另一个常见原因是“避免重复”,让多个网址都跳转到一个 URI,增加访问入口的同时还会增加额外的工作量。例如有的网站会申请多个名称类似的域名,然后把它们再重定向到主站上

考虑的就是“永久”和“临时”的问题了,也就是选择301还是302
302 的含义是“永久”的,如果域名、服务器、网站架构发生了大幅度的改变,比如启用了新域名、服务器切换到了新机房、网站目录层次重构,这些都算是“永久性” 改变。必须用 301 永久重定向,通知浏览器和搜索引擎更新到新地址,也是搜索引擎优化要考虑的因素之一。
302 的含义是“临时”的,原来的URI在将来的某个时间点还会恢复正常,常见的应用场景就是系统维护,把网站重定向到一个通知页面,告诉用户过一会儿再来访问。另一种用法就是“服务降级”,比如在双十一促销的时候,把订单查询、领积分等不重要的功能入口暂时关闭,保证核心服务能够正常运行
2.Restful Api

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 传统api设计讲url当作一个功能,而restful api设计则是将url当成唯一的资源。 

3.headers

常见请求头

  1. Accept 可接受的响应内容类型(Content-Types)。 Accept: text/plain
  2. Authorization 用于表示HTTP协议中需要认证资源的认证信息 Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE==
  3. Cache-Control 用来指定当前的请求/回复中的,是否使用缓存机制。 Cache-Control: no-cache
  4. Cookie 由之前服务器通过Set-Cookie(见下文)设置的一个HTTP协议Cookie Cookie: $Version=1; Skin=new;
  5. Referer 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。Referer其实是Referrer这个单词,但RFC制作标准时给拼错了,后来也就将错就错使用Referer了。 Referer: http://itbilu.com/nodejs
  6. User-Agent 浏览器的身份标识字符串 User-Agent: Mozilla/……
  7. Accept-Encoding 浏览器可接受的压缩算法。
  8. Host:域名
  9. Connection:keep-alive 保持连接时长,若值为:Keep-Alive,保持连接特性;也不会永久连接,其有一个保持时间。可以在不同服务器软件中设定这个时间。

常见响应头

  1. Status 通用网关接口的响应头字段,用来说明当前HTTP连接的响应状态。 Status: 200 OK
  2. Set-Cookie 设置HTTP cookie Set-Cookie: UserID=itbilu; Max-Age=3600; Version=1
  3. Server 服务器的名称 Server: nginx/1.6.3
  4. Expires 指定一个日期/时间,超过该时间则认为此回应已经过期 Expires: Thu, 01 Dec 1994 16:00:00 GMT

4.强缓存:

no-cache 可以在本地缓存,可以在代理服务器 缓存,但是这个缓存要服务器验证才可以使用,跳过强制缓存,可以使用协商缓存。
no-store 彻底得禁用缓冲,本地和代理服务器都不缓冲,每次都从服务器获取

public:客户端和代理服务器都可以缓存该资源;

private:只让客户端可以缓存该资源;代理服务器不缓存

5.协商缓存

服务端判断是否要缓存,内容一致不缓存返回304

6.刷新

URL输入:强制缓存有效,协商有效

F5刷新:强制失效,协商有效

ctrl+F5:强制协商均失效。

 

posted @ 2021-04-26 23:48  恣肆zisi  阅读(96)  评论(0)    收藏  举报