HTTP——https、http缓存、get与post、web安全、跨域
HTTP诞生
1989年为知识共享而诞生的Web,提出了3项WWW构建技术:
- 标准通用标记语言设为HTML(HyperText Markup Language,超文本标记语言)
- 文档传输协议HTTP(HyperText Transfer Protocol,超文本传输协议)
- 文档定位URL(Uniform Resource Locator,统一资源定位符)
HTTP特点
- 无状态协议(不对请求和响应之间的通信状态进行保存,无法实现状态管理),所以后面引入Cookie和LocalStorage等技术。
- 请求方法有:GET(获取资源)、POST(传输实体主体)、PUT(传输文件)、HEAD(获得报文首部)、DELETE(删除文件)、OPTIONS(询问支持的方法)、TRACE(追踪路径)、CONNECT(要求用隧道协议连接代理)
- HTTP/1.1中,所有连接默认都是持久连接(keep-alive),即建立一次TCP连接后可以进行多次HTTP请求和响应
- 管线化,即可并行发送多个请求。
- Cookie:
1)客户端发送请求报文;
2)服务器生成包含Cookie信息的响应报文(Set-Cookie字段包含sid);
3)客户端发送带Cookie信息的请求报文(Cookie字段的sid);
http1.0/1.1/2.0的区别
- HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:
1)持久链接,即一次TCP链接可支持多次HTTP请求;
2)管线化,即客户端不用等到之前的http请求结果返回,就可发送下一次请求;
3)缓存处理,http1.0采用expires字段,有时钟同步问题,http1.1采用Cache-Control;
4)断点续传,优化带宽,增加range字段,返回码是206(Partial Content);
5)Host头域,支持一台物理主机可存在多个虚拟主机,一个IP地址,多个域名;
- HTTP/2.0相较于 HTTP/1.1 协议的区别主要体现在:
1)采用WebSocket,支持服务端推送;
2)多路复用,连接共享,允许同时通过单一的HTTP2连接发起多重的请求-响应消息;
3)在tcp与http层间增加了二进制分帧层,HTTP/2通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流;
4)首部压缩,HTTP/1.1并不支持 HTTP 首部压缩,为此 SPDY 和 HTTP/2 应运而生,SPDY使用的是通用的DEFLATE算法,HTTP/2则使用了专门为首部压缩而设计的 HPACK 算法;
简书详解
csdn博客
知乎讲解
HTTP报文
- HTTP报文本身是由多行数据构成的字符串文本。
- 请求报文与相应报文的结构
请求行:请求的方法、请求URI、HTTP版本
状态行:表明响应结果的状态码、原因短语、HTTP版本
- 压缩传输的内容编码(gzip、compress、deflate、identity)、分割发送的分块传输编码
- MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展)
HTTP状态码
1) 200 OK ;请求正常处理
2) 204 No Content ;请求处理成功,但没有资源可返回
3) 206 Partial Content ; 客户端进行了范围请求,服务器成功处理
4) 301 Moved Permanently ; 永久性重定向,即请求的资源已经被分配了新的URI
5) 302 Found ; 临时重定向,即请求的资源临时被分配了新的URI
6) 303 See Other ; 表示请求对应的资源存在着另一个URI,应使用GET方法定向获取
7) 304 Not Modified ; 服务器资源未改变,可直接使用客户端未过期的缓存(与重定向无关)
8) 307 Temporary Redirect ; 临时重定向(会强制浏览器不能将POST改为GET方法)
9) 400 Bad Request ; 表示请求报文中存在语法错误
10) 401 Unauthorized ; 表明请求需要通过HTTP认证,若之前已请求过一次,则表示用户认证失败
11) 403 Forbidden ; 服务器拒绝该资源的访问
12) 404 Not Found ; 服务器无法找到请求的资源
13) 500 Internal Server Error ; 服务器发生内部错误
14) 503 Service Unavailable ; 服务器超负荷,无法处理请求
有些时候,状态码和状况会不一致
说明:301和302状态码都是重定向,但区别是301是永久重定向,302为临时重定向。若客户端将URL保存为书签,那么301就会去更新书签,而302不会去更新书签。
重定向:服务器告诉客户端,需要重新发送请求到新的URL。服务器返回302状态码时,设置响应头的Location字段。
HTTPS(HTTP over SSL,包括加密、认证、完整性保护)
- HTTP的缺点
1)通信使用明文(不加密),内容可能会被窃听;—>加密
2)不验证通信方的身份,可能遭遇伪装;—>验证身份
例子:伪装的web服务器;伪装的客户端;无访问权限的通信方;无法判定无意义请求,可能遭受DoS攻击;
3) 无法证明报文的完整性,内容可能遭遇篡改;
加密
- 通信的加密、内容的加密
- 加密方式:对称密钥加密(共享密钥加密)、非对称密钥加密(公开密钥加密)
对称加密:加密和解密使用相同的密钥;问题:密钥如何安全到达对方;
非对称加密:一对密钥(公开密钥+私有密钥);
方式:服务器拥有一对密钥,当需要加密传输时,服务器将公开密钥分发给客户端,客户端利用公开密钥加密发送密文给服务器,服务器利用私有密钥解密;
报文+公开密钥=密文;密文+公开密钥!=报文(技术上异常困难,离散对数求值);
非对称加密相比对称加密速度慢;
- HTTPS采用混合加密机制(非对称加密+对称加密)
利用非对称加密 传输 对称加密时所需的 密钥,然后采用对称加密 传输主体;
- 如何判断服务器发来的公开密钥的真实性?
借用第三方数字认证机构(CA,Certificate Authority)
1)服务器将自己的公开密钥登录至CA,申请公钥证书
2)CA颁发公钥证书(公开密钥+CA数字签名)
3)服务器向客户端发送公钥证书
4)客户端利用浏览器内置的CA公钥验证 该公钥证书的 有效性
5)客户端使用公开密钥对报文加密后发送
- MAC(Message Authentication Code)报文摘要检测报文的完整性
- 用以确认客户端的客户端证书
用户得自行安装客户端证书,一般用于网上银行
- 补充:抓包工具:wireshark,tcpdump
HTTP缓存
- HTTP缓存分为强制缓存和对比缓存,两类缓存规则可以同时存在,强制缓存优先级高于对比缓存。
- 强制缓存(Expires/Cache-Control)
HTTP 1.0中Expires的值为服务端返回的资源到期时间,所以要求时钟同步
HTTP1.1中使用Cache-Control
- 对比缓存(Etag / If-None-Match 或者Last-Modified / If-Modified-Since )
对比缓存生效时,状态码为304,只返回header
- Etag / If-None-Match(优先级高)
第一次请求时,服务器通过Etag告诉客户端资源的唯一标识符
再次请求时,客户端通过If-None-Match告诉服务器该资源缓存数据库中的资源标识符,服务器将其进行校验比对,若资源发生变化(资源标识符变化),则返回修改过的资源,200;若资源未被修改过,则返回304。
- Last-Modified / If-Modified-Since
第一次请求时,服务器在响应请求时,通过Last-Modified告诉浏览器资源的最后修改时间。
再次请求时,客户端通过If-Modified-Since发送资源的最后修改时间,服务器接收到后进行校验对比,若资源在该时间之后被修改过,则返回修改过的资源,200;若资源未被修改过,则返回304。
cnblog讲解
个人理解:客户端缓存数据库中的资源带有Expires的时间、Cache-Control的时间间隔、If-None-Match的资源标识符 或者 If-Modified-Since的标识时间。浏览器在请求相应资源时,分别判断资源的各个标识符,采用缓存资源或者发送相应的http头部信息给服务器端进行校验。
http如何断点续传
HTTP1.1 开始支持获取文件的部分内容,通过字段Range 和 Content-Range来实现。
Range用于请求头中,指定第一个字节和最后一个字节的位置。
服务器会在 Content-Range 头部返回当前发送数据的范围和文件总大小。
但有可能在断点续传的过程中,资源发生了修改,就需要判断,资源有无变化。这个通过Etag资源标识符来做,每个资源Etag的值通过MD5来计算。
此外,还可以通过MD5校验报文的完整性。服务器预先提供一个MD5校验和,用户下载完所有文件以后,用MD5算法计算下载文件的MD5校验和,然后通过检查这两个校验和是否一致,就能判断下载的文件是否出错。
get与post区别
- get可被缓存
- get请求保留在浏览器历史纪录中
- get请求可被收藏为书签
- get请求不应在处理敏感数据时使用,get请求在url中发送,post请求在http消息主体中发送。
- get请求长度有限制(url的限制),post请求对数据长度没有要求
- get只能是url编码
- get参数会显示在url中
- 后退和刷新,post会被重新提交
- get是幂等的,意味着对同一URL的多个请求应该返回同样的结果。
- 对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE
web安全
- 主动攻击:
1) SQL注入攻击
方式:把SQL命令插入到表单中提交或URL中的查询字符串中,以欺骗服务器执行恶意的SQL命令;
解决方法:对用户的输入进行校验、不使用管理员权限的数据库连接、机密信息加密存放;
2) OS命令注入攻击(利用web应用的漏洞);
- 被动攻击:
1)跨站脚本攻击XSS
方式:在正规网站的URL查询字段中加入script标签,使客户端在浏览正规网站的同时,运行JS代码;
解决办法:对用户的输入进行校验、写到页面的内容先进行编码、用适当的方法对 HTML,JS 进行转义、将Set-Cookie设置为HttpOnly,则通过JS脚本无法读取到cookie信息;
2)跨站点请求伪造(CSRF)
方式:用户点击了正规网站和黑客网站,黑客网站向往正规网站服务器发送了请求,这个请求会携带用户本地浏览器的cookie,所以得以成功跨站点请求伪造。
解决办法:1)设置验证HTTP Referer字段,以确保请求的来源网站的合法性。2)设置token。
CSDN博客
3)HTTP首部注入(攻击者在响应首部字段内插入换行,添加任意响应首部或主体)、
4)邮件首部注入攻击
其他攻击:DoS攻击(拒绝服务攻击,向服务器发送大量请求,造成服务器资源过载)
DDoS(分布式拒绝服务攻击,常利用感染病毒的计算机作为攻击者的攻击跳板)
CSDN博客
跨域
跨域解决方案:
- CORS(Cross-Origin Resource Sharing,跨域源资源共享),IE8通过XDomainRequest对象支持CORS,其他浏览器通过XHR对象原生支持CORS。
CORS跨域源资源共享需要客户端和服务器共同支持,原理是通过自定义的HTTP头部让客户端与服务器沟通,而目前各大浏览器都实现了对CORS的原生支持。即,当跨域请求时,浏览器会自动在HTTP头部加上自定义字段,比如Origin头部。也就是说要实现CORS,需要在服务器端进行设置。服务器端返回Access-Control-Allow-Origin字段。CORS请求分为简单请求、非简单请求(多一次http请求),默认CORS跨源请求都不带cookie,如果需要带cookie,则需要设置Access-Control-Allow-Cendentials:true。
优点:支持所有HTTP请求。 缺点:不能兼容老浏览器。
阮一峰CORS
- JSONP(JSON with padding)
原理:利用script标签没有跨域限制的特点,客户端将script脚本的src设置为服务器的请求地址。服务器会返回一段js代码,并在本地执行,形如:callback({"name":"Nicholas"});
,一个带参数的函数,这个参数就是需要请求的json数据。这个函数名是服务器端根据客户端发过去的数据动态设置的(原理是字符串拼接)。而这个函数会事先在本地声明如何处理json数据。
优点:简单易用,支持浏览器与服务器双向通信,无浏览器兼容性问题;
缺点:不安全,由于JSONP是从其他域中加载代码执行;难以确定请求是否失败;只支持GET请求;传输格式是字符串,不是json格式;
网络上的解释
- 其他方法:如html5中postMessage方法,window.name,document.domain
HTTP——https、http缓存、get与post、web安全、跨域的更多相关文章
- 跨域调用webapi web端跨域调用webapi
web端跨域调用webapi 在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webap ...
- C#彻底解决Web Browser 跨域读取Iframes内容
C#彻底解决Web Browser 跨域读取Iframes内容 用C# winform的控件web browser 读取网页内容,分析一下数据,做一些采集工作. 如果是同一个域名下面还是好办的,基本上 ...
- Web Api跨域访问配置及调用示例
1.Web Api跨域访问配置. 在Web.config中的system.webServer内添加以下代码: <httpProtocol> <customHeaders> &l ...
- Web CORS 跨域方式使用方式
CORS 参考 http://enable-cors.org/index.html https://help.aliyun.com/document_detail/oss/practice/cors_ ...
- Java Web解决跨域请求
要知道跨域请求就要先了解同源策略,那么什么是同源?什么是不同源?简单来说就是,如果两个资源,包括HTML页面.JavaScript脚本.css样式,对应的协议.域名和端口完全相同,那么这两个资源就是同 ...
- Web API 跨域访问(CORS)
1.在web.config里把“ <remove name="OPTIONSVerbHandler" /> ”删掉. 2. 到nuget上装一个包: ht ...
- asp.net web api 跨域问题
缘起 以前在asp.net mvc时代,很少出现跨域问题 自从使用了asp.net web api + angular (1/2)之后,开始有跨域问题了. 简单普及下跨域: 我的理解是只要是前台页面与 ...
- ASP.NET Core Web API 跨域(CORS) Cookie问题
身为一个Web API,处理来自跨域不同源的请求,是一件十分合理的事情. 先上已有的文章,快速复制粘贴,启用CORS: Microsoft:启用 ASP.NET Core 中的跨域请求 (CORS) ...
- [转] ABP框架Web API跨域问题的解决方案
原文地址:https://www.cnblogs.com/farb/p/ABPWebAPICrossDomain.html 1.在Web Api 项目下安装 Microsoft.AspNet.Web ...
- ASP.NET Web API 跨域访问(CORS)
一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...
随机推荐
- Do jobs|permanent|secure job|Move|Look after|provide sb with sth|Move|Enjoy a good time|Learn about|Be fond of|Have a clearer idea|String quarter|Be subject to|A has little with B|Pigment
Do jobs|work jobs Long-terms|permanent Gain jobs/secure job Move|go to |stay in |live in|settle down ...
- Outlook邮件的右键菜单中添加自定义按钮
customUI代码如下: <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> ...
- 《C程序设计语言》练习 1-8,1-9
#include <stdio.h> /*编写一个统计空格,制表符与换行符个数的程序*/ main() { int a,b,c,d;//a表示空格个数,b表示制表符个数,c表示换行符个数 ...
- [LC] 108. Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...
- Fourier级数
目录 Fourier级数 函数的Fourier级数的展开 Fourier级数习题: Fourier级数 函数的Fourier级数的展开 Euler--Fourier公式 我们探讨这样一个问题: 假设\ ...
- Linux正则表达式及扩展的正则表达式
基本正则表达式: 扩展的正则表达式:
- 科技报告|AD报告|DTIC|PB报告|STAR|ERA|NTIS|DTIC|DOE|EPA|NASA |JPL|
信息检索-科技报告是灰色文献获取渠道有限. 技术论文中因保密需要,会删除关键性技术. AD报告也产生较早,1951年开始出版.现由美国国防技术情报中心(DTIC:Defence Technical I ...
- mysql 优化配置和方面
MySQL性能优化的参数简介 公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20 ...
- hashMap插入初始值
加了this. 就很容易看出来是使用了内部类和{}代码块 当然也可以把this去掉, 更简洁, 只是不能一眼看出来怎么初始化的 类似的可以做ArrayList ....的初始化
- [LC] 81. Search in Rotated Sorted Array II
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...