HTML
GET和POST的区别
GET
在浏览器回退时是无害的,而POST
会再次提交请求。GET
产生的URL
地址可以被Bookmark
,而POST
不可以。GET
请求会被浏览器主动cache
,而POST
不会,除非手动设置。GET
请求只能进行url
编码,而POST
支持多种编码方式。GET
请求参数会被完整保留在浏览器历史记录里,而POST
中的参数不会被保留。GET
请求在URL
中传送的参数是有长度限制的,而POST
没有。- 对参数的数据类型,
GET
只接受ASCII
字符,而POST
没有限制。 GET
比POST
更不安全,因为参数直接暴露在URL
上,所以不能用来传递敏感信息。
Accept和Content-Type
Accept
请求头用来告知客户端可以处理的内容类型,这种内容类型用MIME
类型来表示。 服务器使用 Content-Type
应答头通知客户端它的选择。
Accept
属于请求头,Content-Type
属于实体头Http
报头分为通用报头,请求报头,响应报头和实体报头- 请求方的
http
报头结构:通用报头|请求报头|实体报头 - 响应方的
http
报头结构:通用报头|响应报头|实体报头
Accept
代表发送端(客户端)希望接受的数据类型- 比如:
Accept:text/xml
- 代表客户端希望接受的数据类型是
xml
类型 Content-Type
代表发送端(客户端|服务器)发送的实体数据的数据类型- 比如:
Content-Type:text/html
- 代表发送端发送的数据格式是
html
- 比如:
二者合起来:
Accept:text/xml
Content-Type:text/html
即代表希望接受的数据类型是xml
格式,本次请求发送的数据的数据格式是html
跨域问题
同源策略:域名
、协议
、端口
解决跨域的方法:jsonp、CORS、nginx代理跨域、nodejs中间件代理跨域
HTTP和HTTPS的区别
HTTP 的URL 以http:// 开头,而HTTPS 的URL 以https:// 开头
HTTP 是明文传输,HTTPS 通过 SSL\TLS 进行了加密
HTTP 的端口号是 80,HTTPS 是 443
HTTPS 需要到 CA 申请证书,一般免费证书很少,需要交费
HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
ajax/axios/fetch区别
- 传统
ajax
隶属于原始js
,核心使用XMLHttpRequest
对象,多个请求之间如果有先后关系的话,会出现回调地狱。JQuery ajax
是对原生XHR
的封装。 缺点如下:- 本身是针对
MVC
的编程,不符合现在前端MVVM
的浪潮 - 基于原生的XHR开发,XHR本身的架构不清晰
- JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理
- 不符合关注分离(Separation of Concerns)的原则
- 配置和调用方式非常混乱,而且基于事件的异步模型不友好
- 本身是针对
axios
本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,具有以下特征:- 从浏览器中创建
XMLHttpRequest
- 支持
Promise API
- 客户端支持防止
CSRF
- 提供了一些并发请求的接口(重要,方便了很多的操作)
- 从 node.js 创建 http 请求
- 拦截请求和响应
- 转换请求和响应数据
- 取消请求
- 自动转换JSON数据
- 从浏览器中创建
fetch
是XMLHttpRequest
的一种替代方案,而不是ajax
的进一步封装,没有使用XMLHttpRequest
对象,是基于Promise
设计,调用简单,挂在BOM
上的,属于全局的方法,很友好的解决了回调地狱问题,优点如下:- 语法简洁,更加语义化
- 基于标准
Promise
实现,支持async/await
- 更加底层,提供的
API
丰富(request
,response
) - 脱离了
XHR
,是ES
规范里新的实现方式
但
fetch
是一个低层次的API
,可以把它考虑成原生的XHR
,所以使用起来并不是那么舒服,需要进行封装,且没有办法原生监测请求的进度,而XHR
可以
HTTP状态码及其含义
1xx
:信息状态码100 Continue
继续,一般在发送post
请求时,已发送了http header
之后服务端将返回此信息,表示确认,之后发送具体参数信息
2XX
:成功状态码200 OK
正常返回信息201 Created
请求成功并且服务器创建了新的资源202 Accepted
服务器已接受请求,但尚未处理
3XX
:重定向301 Moved Permanently
请求的网页已永久移动到新位置302 Found
临时性重定向303 See Other
临时性重定向,且总是使用GET
请求新的URI
304 Not Modified
自从上次请求后,请求的网页未修改过
4XX
:客户端错误400 Bad Request
服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求401 Unauthorized
请求未授权403 Forbidden
禁止访问404 Not Found
找不到如何与URI
相匹配的资源
5XX
: 服务器错误500 Internal Server Error
最常见的服务器端错误501 Not Implemented
表示request header 里的 method 或 Content-* 时不被服务器支持,无法被处理502 Bad Gateway
网关错误 表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的503 Service Unavailable
服务器端暂时无法处理请求(可能是过载或维护)504 Gateway Timeout
网关超时,服务器未能快速的做出反应
行内元素有哪些?块级元素有哪些? 空(void)元素有那些?行内元素和块级元素有什么区别?
- 行内元素有:
a
b
span
img
input
select
strong
- 块级元素有:
div
ul
ol
li
dl
dt
dd
h1
h2
h3
h4
h5
h6
p
- 空元素:
<br>
<hr>
<img>
<input>
<link>
<meta>
- 行内元素不可以设置宽高,不独占一行
- 块级元素可以设置宽高,独占一行
去除a标签跳转效果
<a href ="javascript:return false;">这个链接不能点击 </a>
<a href ="javascript:volid(0);">
meta viewport相关
<!DOCTYPE html> <!--H5标准声明,使用 HTML5 doctype,不区分大小写-->
<head lang="en"> <!--标准的 lang 属性写法-->
<meta charset="utf-8"> <!--声明文档使用的字符编码-->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <!--优先使用 IE 最新版本和 Chrome-->
<meta name="description" content="不超过150个字符"/> <!--页面描述-->
<meta name="keywords" content=""/> <!-- 页面关键词-->
<meta name="author" content="name, email@gmail.com"/> <!--网页作者-->
<meta name="robots" content="index,follow"/> <!--搜索引擎抓取-->
<meta name="viewport" content="initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no"> <!--为移动设备添加 viewport-->
<meta name="apple-mobile-web-app-title" content="标题"> <!--iOS 设备 begin-->
<meta name="apple-mobile-web-app-capable" content="yes"/> <!--添加到主屏后的标题(iOS 6 新增)
是否启用 WebApp 全屏模式,删除苹果默认的工具栏和菜单栏-->
<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">
<!--添加智能 App 广告条 Smart App Banner(iOS 6+ Safari)-->
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
<meta name="format-detection" content="telphone=no, email=no"/> <!--设置苹果工具栏颜色-->
<meta name="renderer" content="webkit"> <!-- 启用360浏览器的极速模式(webkit)-->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!--避免IE使用兼容模式-->
<meta http-equiv="Cache-Control" content="no-siteapp" /> <!--不让百度转码-->
<meta name="HandheldFriendly" content="true"> <!--针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓-->
<meta name="MobileOptimized" content="320"> <!--微软的老式浏览器-->
<meta name="screen-orientation" content="portrait"> <!--uc强制竖屏-->
<meta name="x5-orientation" content="portrait"> <!--QQ强制竖屏-->
<meta name="full-screen" content="yes"> <!--UC强制全屏-->
<meta name="x5-fullscreen" content="true"> <!--QQ强制全屏-->
<meta name="browsermode" content="application"> <!--UC应用模式-->
<meta name="x5-page-mode" content="app"> <!-- QQ应用模式-->
<meta name="msapplication-tap-highlight" content="no"> <!--windows phone 点击无高亮
设置页面不缓存-->
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
img中的alt和元素的title属性作用
img
的alt
属性如果无法显示图像,浏览器将显示alt
指定的内容- 元素
title
属性在鼠标移到元素上时显示title
的内容
href和src区别
href
标识超文本引用,用在link
和a
等元素上,href
是引用和页面关联,是在当前元素和引用资源之间建立联系,若在文档中添加href
,浏览器会识别该文档为CSS
文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用link
方式加载CSS
,而不是使用@import
方式。src
表示引用资源,替换当前元素,用在img
,script
,iframe
上,src
是页面内容不可缺少的一部分。当浏览器解析到src
,会暂停其他资源的下载和处理(图片不会暂停其他资源下载和处理),直到将该资源加载、编译、执行完毕,图片和框架等也如此,类似于将所指向资源应用到当前内容。这也是为什么建议把js
脚本放在底部而不是头部的原因。
浏览器的渲染过程
- 解析
HTML
生成DOM
树。 - 解析
CSS
生成CSSOM
规则树。 - 解析
JS
,操作DOM
树和CSSOM
规则树。 - 将
DOM
树与CSSOM
规则树合并在一起生成渲染树。 - 遍历渲染树开始布局,计算每个节点的位置大小信息。
- 浏览器将所有图层的数据发送给
GPU
,GPU
将图层合成并显示在屏幕上。
label标签有什么作用
label
标签通常是写在表单内,它关联一个控件,使用label
可以实现点击文字选取对应的控件
<input type="checkbox" id="test">
<label for="test" >test</label>
DOM和BOM有什么区别
DOM
Document Object Model
,文档对象模型DOM
是为了操作文档出现的API
,document
是其的一个对象DOM
和文档有关,这里的文档指的是网页,也就是html
文档。DOM
和浏览器无关,他关注的是网页本身的内容。
BOM
Browser Object Model
,浏览器对象模型BOM
是为了操作浏览器出现的API
,window
是其的一个对象window
对象既为javascript
访问浏览器提供API
,同时在ECMAScript
中充当Global
对象