HTTP请求行、请求头、请求体详解 / 详解 HTTP 头部信息
根据实际用途划分:
通用首部字段:请求报文和响应报文两方都会使用到的首部。
- 作用:通用头部是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。但与最终消息主体中传输的数据无关的消息头。
首部字段 说明 Cache-Control 控制缓存行为 Connection 逐跳首部、连接的管理 Date 创建报文的日期时间 Pragma 报文指令 Transfer-Encoding 指定报文传输主体的编码方式 Upgrade 升级为其他协议 Via 代理服务器的相关信息 Warning 错误通知 请求首部字段:从客户端向服务器发送请求报文时使用的首部。
- 作用:是请求报文特有的,为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
首部字段 说明 示例 Accept 用户代理可以处理的媒体类型 Accept: text/html Accept-Charset 优先的字符集 Accept-Encoding 优先的内容编码。浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 Accept-Encoding: gzip, deflate Authorization Web认证信息 Except 期待服务器的特定行为 if-Match 比较实体标记(ETag) if-Modified-Since 比较资源的更新时间 Range 实体的字节范围请求 Refer 实体的字节范围请求 TE 传输编码的优先级 User-Agent HTTP客户端程序的信息 请求报文示例:
GET /home.html HTTP/1.1 Host: developer.mozilla.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Referer: https://developer.mozilla.org/testpage.html Connection: keep-alive Upgrade-Insecure-Requests: 1 If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a" Cache-Control: max-age=0
响应头首部字段:从服务器端向客户端返回响应报文时使用的首部。
- 作用:便于客户端提供信息。客服端在与哪种类型的服务器进行交互,如Server头部。补充了响应时的附加内容,也会要求客户端附加额外的内容信息。
首部字段 说明 Accept-Ranges 是否接受字节范围请求 Age 推算资源创建经过的时间 ETag 资源的匹配信息 Location 令客户端重定向至指定UPI Proxy-Authenticate 代理服务器对客户端的认证信息 WWW-Authenticate 服务器对客户端的认证信息 Server HTTP服务器的安装信息。客服端在与哪种类型的服务器进行交互。 Vary 代理服务器的管理信息 实体首部字段:针对请求报文和响应报文的实体部分使用到的首部。
- 作用:可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。补充了资源内容更新时间等与实体有关的信息。
首部字段 说明 Allow 资源可支持的HTTP方法 Content-Encoding 实体主体适用的编码方式 Content-Language 实体主体的自然语言 Content-Length 实体主体的大小 Content-Location 替代对应资源的URI Content-MD5 实体主体的报文摘要 Content-Range 实体主体的位置范围 Content-Type 实体主体的媒体类型 EXpires 实体主体过期的日期时间 Last-Modified 资源的最后修改日期时间
-
数组和链表的区别
数组 链表 数据结构:类型数据元素的集合 节点的无序链接元素的集合 使用索引直接找到元素 从头开始找,所以链接列表的时候需要线性时间,速度也慢得多 数组具有固定大小 链接列表是动态和灵活的,可以扩展和缩小其大小 数组中插入和删除等操作会占用大量时间 链表插入、删除很快 在编译期间分配内存 在执行或运行时分配内存 元素连续存储在数组中 元素随机存储在链接列表中 对内存的要求较少 由于存储了额外的下一个和前一个引用元素,因此链接列表中需要更多内存 -
怎么判断是尾指针
普通链表:p->next == NULL
循环链表:p->next == HEAD
-
怎么判断链表是闭环
快慢指针判断:让指针1每次向下移动一个节点,让指针2每次向下移动两个节点,然后比较两个指针指向的节点是否相同。如果相同,则判断出链表有环,如果不同,则继续下一次循环。
-
vue的js函数为什么被称为第一公民
函数式编程的特性:
-
函数可以存储在变量中
-
函数作为参数(高阶函数)
-
函数作为返回值(高阶函数)
-
-
vue的data的return有什么作用
-
不使用return包裹的数据会在项目的全局可见,会造成变量污染
-
使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件
-
**后者的data是一个方法,**也就是:
data:function(){ return{ } }
-
-
vue和react的区别
-
监听数据变化的实现原理不同
- Vue 通过 getter/setter 以及一些函数的劫持,能精确知道数据变化,不需要特别的优化就能达到很好的性能
- React 不精确监听数据变化:React 默认是通过比较引用的方式进行的,如果不优化(PureComponent/shouldComponentUpdate)可能导致大量不必要的VDOM的重新渲染
-
数据流的不同
-
Vue 组件 <--> DOM 之间的双向绑定
-
React一直提倡的是单向数据流,他称之为 onChange/setState()模式
-
-
HoC 和 mixins
- Vue 中我们组合不同功能的方式是通过 mixin.Vue中组件是一个被包装的函数,并不简单的就是我们定义组件的时候传入的对象或者函数
- 在React中我们通过 HoC (高阶组件)。高阶组件本质就是高阶函数,React 的组件是一个纯粹的函数,所以高阶函数对React来说非常简单
-
组件通信的区别
-
Vue中有三种方式可以实现组件通信:
- 父组件通过 props 向子组件传递数据或者回调,虽然可以传递回调,但是我们一般只传数据,而通过 事件的机制来处理子组件向父组件的通信
- 子组件通过事件向父组件发送消息
- 通过 V2.2.0 中新增的 provide/inject 来实现父组件向子组件注入数据,可以跨越多个层级。
-
React也有三种:
- 父组件通过 props 可以向子组件传递数据或者回调
- 可以通过 context 进行跨层级的通信,这其实和 provide/inject 起到的作用差不多
-
综上:React 本身并不支持自定义事件,在 React 中我们都是使用回调函数的;Vue中子组件向父组件传递消息有两种方式:事件和回调函数,而且Vue更倾向于使用事件
-
-
模板渲染方式的不同
-
Vue是通过一种拓展的HTML语法进行渲染 / Vue是在和组件JS代码分离的单独的模板中,通过指令来实现的,比如条件语句就需要 v-if 来实现
-
React 是通过JSX渲染模板 / React是在组件JS代码中,通过原生JS实现模板中的常见语法,比如插值、条件、循环等,都是通过JS语法实现的
-
-
-
为什么移动端要使用react
-
React最大的好处就是省去了细粒度操作的繁琐,又有大工程项目的可维护性
-
React可以服务端渲染
-
虚拟DOM
-
组件化
-
兼容性确实比vue好
-
但暴力依赖diff算法
-
-
elementUI相关问题
本文首发于我的GitHub博客,其它博客同步更新。