总结了一些前端请求相关知识。css
HTTP官方文档参见MDNhtml
大体的HTTP请求过程:前端
一、 输入Url,第一次登录的时候会本地留一个cookie
二、 查看缓存,包括浏览器->系统缓存->路由缓存,存在缓存则显示
三、 DNS域名解析,解析域名得到IP地址,然后根据IP地址向服务器发起tcp连接,创建三次握手。
四、 握手成功后浏览器向服务器发送http请求,请求数据包。
五、 服务器处理请求返回数据
六、 浏览器收到http响应而后处理数据,渲染页面,包括dom树,css,js等。vue
HTTPS 和 HTTPnode
HTTP+加密+认证+完整性保护 = HTTPS,HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具备身份验证、信息加密和完整性校验的功能,能够避免此类问题发生。
TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,因此使用HTTPS基本上不须要对HTTP页面进行太多的改造。react
1xx 信息响应webpack
- 100 Continue,这个临时响应代表,迄今为止的全部内容都是可行的,客户端应该继续请求,若是已经完成,则忽略它。
- 101 Switching Protocol,该代码是响应客户端的 Upgrade 标头发送的,而且指示服务器也正在切换的协议。
- 102 Processing (WebDAV),此代码表示服务器已收到并正在处理该请求,但没有响应可用。
- 103 Early Hints ,此状态代码主要用于与Link 连接头一块儿使用,以容许用户代理在服务器仍在准备响应时开始预加载资源。
2XX 成功响应(请求正常处理完毕)ios
- 200 OK,表示从客户端发来的请求在服务器端被正确处理
- 201 Created,该请求已成功,并所以建立了一个新的资源。这一般是在POST请求,或是某些PUT请求以后返回的响应。
- 202 Accepted,请求已经接收到,但还没有执行。和异步请求和批处理有关。
- 203 Non-Authoritative Information,此响应代码表示返回的元信息与原始服务器提供的信息并不彻底相同,而是从本地或第三方副本中收集的。除该特定状况外,200 响应优先于此状态。
- 204 No content,表示请求成功,但响应报文不含实体的主体部分(可能经过头部信息返回)
- 205 Reset Content,请求成功但没有返回任何内容,要求请求者重置文档视图,一般用于重置表单。
- 206 Partial Content,从客户端发送Range标头仅请求资源的一部分时,将使用此响应代码。
- 207 Multi-Status (WebDAV)
- 208 Multi-Status (WebDAV)
- 226 IM Used (HTTP Delta encoding)
3XX 重定向(须要进行附加操做以完成请求)nginx
- 300 Multiple Choice 有多种可能响应可选。
- 301 Moved Permanently,永久性重定向,表示资源已被分配了新的 URL
- 302 Found,临时性重定向,应当继续访问此地址
- 303 See Other,表示资源存在着另外一个 URL,应使用 GET 方法定向获取资源
- 304 Not Modified,表示服务器容许访问资源,但资源和以前没有改变
- 305 Use Proxy,被请求的资源必须经过指定的代理才能被访问,只有原始服务器才能创建305响应
- 307 Temporary Redirect,临时重定向,和302含义相同,区别是用户不能改变请求方法。
- 308 Permanent Redirect,和301含义相同,区别也是用户不能改变请求方法。
4XX 客户端错误(服务器没法处理请求)web
- 400 Bad Request,请求报文存在语法错误
- 401 Unauthorized,未认证,客户端必须对本身进行身份验证才能得到请求的响应
- 403 Forbidden,表示对请求资源的访问被服务器拒绝(知道客户端身份,且其无权访问)
- 404 Not Found,表示在服务器上没有找到请求的资源,一般是请求路径错误。
- 405 Method Not Allowed 禁用的请求方法,通常遇到这种状况是服务器配置问题。
- 406 Not Acceptable 没有找到符合条件的内容,可是路径是对的,好比request的Accept和response的Content-Type不匹配
- 407 Proxy Authentication Required 相似于401,但须要由代理进行身份验证
- 408 Request Timeout ... 429,431,451 诸多不常见错误,参见MDN
5XX 服务器错误(服务器处理请求出错)
- 500 internal sever error,表示服务器端在执行请求时发生了错误
- 501 Not Implemented,此请求方法不被服务器支持且没法被处理。
- 502 bad getway,网关错误,好比没起nginx,nginx挂了一类的
- 503 Service Unavailable,代表服务器暂时处于超负载或正在停机维护,没法处理请求
- 504 Gateway Timeout,请求超时
- 505 HTTP Version Not Supported 服务器不支持请求中所使用的HTTP协议版本
- 50六、50七、50八、5十、511 更不常见,同上
GET 方法,请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.
HEAD 方法,请求一个与GET请求的响应相同的响应,但没有响应体.
POST 方法,用于将实体提交到指定的资源,一般致使在服务器上的状态变化或反作用.
PUT 方法,用请求有效载荷替换目标资源的全部当前表示。
DELETE 方法,删除指定的资源。
CONNECT 方法,创建一个到由目标资源标识的服务器的隧道。
OPTIONS 方法,用于描述目标资源的通讯选项。
TRACE 方法,沿着到目标资源的路径执行一个消息环回测试。
PATCH 方法,用于对资源应用部分修改。
浏览器默认超时不一样浏览器不一样,和版本有影响,好比chrome 是4 分钟,safari 12分钟等。 http请求默认不会有超时,不少服务器会设置超时,如PHP服务默认的请求响应最长处理时间为30s,若是超过30s,将会返回504,nginx 也能够配置。axios npm 文档 支持配置参数设置timeout 并作拦截处理,抛错等。whatwg-fetch是不支持超时设置的,能够经过promise 改造等可是看来很差用,我的也没用过。
Telnet:tcp 23
ssh:tcp 22
ftp:tcp 21
http:tcp 80
https:tcp 443
dns:tcp 53,udp 53
同源须要:(<img><link><script>
三种标签不受限制)
协议相同
域名相同(子域名、主域名) 端口号相同
同源策略限制内容有:
Cookie、LocalStorage、IndexedDB 等存储性内容没法读取
DOM 没法得到
AJAX 请求不能发送
设置document.domain
经过url hash段传值
window.name
window.postMessage
...
利用
<script>
标签没有跨域限制的漏洞,网页能够获得从其余来源动态产生的 JSON 数据。JSONP请求必定须要对方的服务器作支持才能够。优势是兼容老式浏览器,可是只支持get并且不太安全,通常不用。
CORS (跨域资源共享 Cross-origin resource sharing)须要浏览器和后端同时支持。IE 8 和 9 须要经过 XDomainRequest 来实现。
浏览器端会自动向请求头添加origin字段,代表当前请求来源。
服务器端须要设置响应头的Access-Control-Allow-Methods,Access-Control-Allow-Headers,Access-Control-Allow-Origin等字段,指定容许的方法,头部,源等信息。
请求分为简单请求和非简单请求,非简单请求会先进行一次OPTION方法进行预检,看是否容许当前跨域请求。
配置proxy 写法为:
devServer: {
proxy: 'http://localhost:4000' // 会将任何未知请求 (没有匹配到静态文件的请求) 代理到http://localhost:4000
}
一般会用对象模式增长更多可配置项目
proxy: {
'/api': { //匹配路由
target: 'http://www.example.org', // 目标主机
changeOrigin: true//默认保留主机头来源,设为true 会覆盖,跨域的时候须要如此设置
ws: true,//代理websockets
secure: false,// 若是须要支持https且证书无效的服务器
pathRewrite: {
'^/api/old-path': '/api/new-path', // 重写路径,好比不但愿传递/api
'^/api/remove/path': '/path' // 或者移除某基本路径
},
},
'/foo': {//对另外一个路由的配置
target: '<other_url>'
}
}
复制代码
CORS 简单请求和非简单请求:
请求方法是如下三种方法之一:
HTTP的请求头信息不超出如下几种字段:
Content-Type:只限于三个值
请求中的任意XMLHttpRequestUpload 对象均没有注册任何事件监听器;XMLHttpRequestUpload 对象可使用 XMLHttpRequest.upload 属性访问。
请求中没有使用 ReadableStream 对象。
后端的响应头信息:
非简单请求是对服务器有特殊要求的请求,好比:
非简单请求的CORS请求,会在正式通讯以前,增长一次HTTP查询请求,称为"预检"请求(preflight)(OPTIONS)。
nginx 经常使用功能:
反向代理,负载均衡,跨域配置,访问限制,资源处理等。[基本配置解说] (www.nginx.cn/76.html )
可经过homebrew 安装 brew install nginx
,默认位于 /usr/local/etc/nginx,配置见nginx.conf,此配置最后 include servers/* ,在etc/nginx/servers文件夹下添加xxx.conf 文件内容会默认加到nginx.conf,能够直观的针对不一样网站作不一样配置。
经常使用命令:
sudo nginx -t //nginx 启动测试,检查配置是否正常,可否正常启动
sudo nginx //启动nginx
sudo nginx -s reload //从新启动
nginx -s stop //关闭
代理是在服务器和客户端之间假设的一层服务器,代理将接收客户端的请求并将它转发给服务器,而后将服务端的响应转发给客户端。
拦截local请求代理回server name 指定网址,浏览器使用 test.server.com 至关于 http://localhost:9997,这样请求就是以 test.server.com 域名请求接口,达到同源访问效果。
server {
listen 80;
server_name test.server.com;
location / {
proxy_pass http://localhost:9997;
}
}
# 若是https
server {
listen 443 ssl;
# https证书本地路径
ssl_certificate xxxx;
ssl_certificate_key xxxx;
# 连接超时设置
keepalive_timeout 70;
server_name test.server.com;
location / {
proxy_pass http://localhost:9997;
}
}
复制代码
网站安全问题有不少可能,总结的防护措施:
我的上来讲:注意密码复杂度,不一样网站尽可能不要重复,密码中尽可能不要包括我的信息。谨慎点击各种可疑连接,不要链接可疑wifi等。防止劫持、撞库、钓鱼这类操做。
即 Cross Site Script,中译是跨站脚本攻击;其本来缩写是 CSS,但为了和层叠样式表(Cascading Style Sheet)有所区分,于是在安全领域叫作 XSS。
XSS 攻击是指攻击者在网站上注入恶意的客户端代码,经过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。
攻击者对客户端网页注入的恶意脚本通常包括 JavaScript,有时也会包含 HTML 和 Flash。有不少种方式进行 XSS 攻击,但它们的共同点为:将一些隐私数据像 cookie、session 发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操做。
CSRF,即 Cross Site Request Forgery,中译是跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。
好比借用户的cookie骗取服务器信任,给服务器发送请求,这种不能解析cookie内容也不能窃取改变返回数据。常见状况好比盗用用户信息给本身转帐;假装管理员用户增长管理员权限人员,以自由得到管理员权限;重置帐号修改成本身信息等等。
防范:
这也是比较知名的网络攻击,DDoS 攻击经过大量合法的请求,利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统没法提供正常的服务。 防范须要提升网站性能与预警机制,及时作分流隔断等操做,就简介一下。