1.http1.0与http2.0的区别:
2.URI和URL的区别
http请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体组成。
响应报文:由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
http1.1的请求方法:
GET:请求访问已经被URI识别的资源,资源经服务器解析后返回响应内容。
POST:传输实体的主体
PUT:传输文件,在请求报文的主体中包含文件内容,然后保存在URI指定的位置
cookie技术:服务器端发送的响应报文中的Set-Cookie的首部字段信息,通知客户端保存cookie,客户端再次向服务器端发送请求报文时会加上cookie值。
HTTP报文结构:报文首部+CR(回车符)CL(换行符)+ 报文主体
请求报文的报文首部=请求行+请求首部字段+通用首部字段+实体首部字段+其他
响应报文的报文首部=状态行+响应首部字段+通用首部字段+实体首部字段+其他
获取部分内容的范围请求:
Range: bytes= 0-3000 ,5000-7000
通过内容协商机制返回最适合客户端的资源,分为服务器驱动协商(服务器根据请求的首部字段进行参考,在服务器端进行处理),客户端驱动协商(客户端从浏览器显示的可选项列表中进行手动选择),透明协商(结合体)
状态码:
2XX Success
200 OK ————我正常处理了你的请求。从客户端发来的请求在服务器端被正常处理了。
204 No Content ————请求处理成功,但不给你任何实体信息。在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。浏览器页面也不会更新。
206 Partial Content ————请求处理成功,给你你要的部分。GET 请求,响应中包含由 Content-Range 指定范围的实体内容。
3XX Redirection
301 Moved Permanently ————你要的东西现在在另一个地方,你去那试试。永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。 Location 首部 提示新的 URI 。
302 temporary redirect ——临时性重定向。
303 See Other ——URI 改变,用GET 获取吧。303 响应状态码返回时,几乎所有的浏览器都会把POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。(301、302也一样变GET,虽然不容许)
304————你不满足条件,不给你内容。该状态码表示客户端发送附带条件的请求 时,服务器端允许请求访问资源,但未满足条件的情况。
307 ————跟302一样,但是,307 会遵照浏览器标准,不会从 POST 变成 GET。
4XX Client Error
400 Bad Request——你发的信息我理解不了,改下重发。该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
401 Unauthorized——无权限访问。第一次失败会要求认证,第二次失败提示无权限或者浏览器不支持该权限功能。
403 Forbidden——对请求资源的访问被服务器拒绝了。——可能未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等
404 Not Found——在我这儿找不到你要的东西。该状态码表明服务器上无法找到请求的资也可以在服务器端拒绝请求且不想说明理由时使用。
5XX Server Error
500 Internal Server Error——该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。
503 Service Unavailable ——服务器超负载,维护之类的。
代理:via字段标记经过的主机信息。透明代理,缓存代理
网关:使通信线路上的服务器提供非http协议服务
隧道:确保客户端与服务器端进行安全的通信
HTTP通用首部字段指令:
Cache-Control:
public private表示缓存的权限
no-cache 客户端方面:强制向源服务器进行资源验证 ,防止从缓冲中获得过期的资源
服务器方面: 缓存服务器不能对该资源进行缓存,源服务器以后也不会对该缓存服务器进行资源有效性确认,在客户端接收到响应报文后,如果no-cache有参数值则客户端也不可以进行缓存。
no-store 不进行缓存
s-maxage
maxage 如果缓存资源的缓存时间比客户端发送的请求中的数值小,则客户端接受该缓存资源
服务器返回的maxage指令会作为该缓存资源的有效期
min-fresh 要求缓存服务器返回再过min-fresh时间仍有效的缓存
max-stale 指示缓存资源 即使过期也可以接受 如果有参数值 ,即使过期但是没有超过该参数值也可以接受
only-if-cached
Connection: 控制代理不再转发的首部字段 。
close 服务器端关闭连接
keep-alive http1.1之前的版本都是非持久连接,用该字段表示想要保持持久连接
Date:表示创建http报文的时间
Pragma:no-cache 表示客户端不接受服务器端缓存的资源
因为有些服务器使用的http版本不是1.1及之后,用于进行协调,这样保证所有服务器都不接受缓存资源
Cache-Control:no-cache
Pragma:no-cache
Trailer:表示报文主体后记录了哪些字段
Transfer-Encoding:规定了传输报文主体所用的编码方式
Upgrade:用于检测是否可以用更高版本的http协议或者其他协议
Via:报文经过代理或者网关时,会加上该服务器的相关信息。通常用于追踪报文的传输路径
Warning:用于告知用户和缓存相关问题的警告
HTTP请求首部字段:
Accept: 告知服务器,客户端可以接受处理的媒体类型及相关优先级。type/subtype q=表示权重值,用于比较优先级默认是1.0
Accept-Charset:告知服务器,客户端可以接受处理的字符集及相关优先级。type/subtype
Accept-Language:告知服务器,客户端可以接受处理的自然语言集及相关优先级
Accept-Encoding:告知服务器,客户端可以接受处理的内容编码及相关优先级
Authorization:告知服务器,用户代理的认证信息
Expect:100-continue
Form:告知服务器使用用户代理的用户的电子邮箱地址
Host:必须包含在请求内的首部字段,告知服务器请求资源所在的互联网主机名和端口号,虚拟主机运行在同一个ip地址上,用于区分不同的虚拟主机。
字段中带有IF的都是条件请求,只有判定为真时才会执行该请求。
If-Match:告诉服务器请求资源的E-Tag值,只有E-Tag值与服务器该资源的E-Tag值相同判定结果为真。
If-None-Match:与If-Match相反
If-Modified-Since:如果在该字段指定的日期之后资源发生了更新,那么服务器就会处理该请求。
If-Unmodified-Since:与If-Modified-Since相反
If-Range:只有该字段E-Tag值与服务器该资源的E-Tag值相同判定结果为真,服务器会处理范围请求,反之返回资源的整体。
Max-Forwards:指定可经过的服务器最大数量,经过一个服务器该字段的值就会减一,当为0时,服务器就会立即返回响应。
Proxy-Authorization:接收到从代理服务器发来的认证咨询时,客户端发送包含Proxy-Authorization字段的请求,告知服务器认证信息。
Range:获取资源的一部分
Referer:
TE: 告知服务器,客户端可以处理响应的传输编码方式及优先级,也可以指定伴随trialer字段分块的传输方式
Use-Agent:将创建请求的浏览器和用户代理信息传递给服务器
响应首部字段:
Accept-Ranges:可以处理范围请求时字段值为bytes,反之为none
Age:表示服务器在多久前创建了响应
ETag:将资源以字符串形式作唯一标识,资源更新时,该值也会更新,该值由服务器进行生成。有强ETag和弱ETag。
Location:将响应接收方引导至某个URI上,配合3XX:Redirection的响应,提供重定向的URI。
Proxy-Authenticate:代理服务器要求认证的信息,客户端收到返回Proxy-Authorization
Retry-After:告知客户端在多久之后再次发送请求
Server:告知客户端当前服务器上安装的HTTP应用程序信息
Vary:
WWW-Authenticate:
实体首部字段:
Allow:通知客户端能够支持Request-URI指定资源的所有HTTP方法
Content-Encoding:告知客户端,服务器对实体的主体部分编码的方式
Content-Language:告知客户端,实体主体使用的自然语言
Content-Length:告知客户端,实体主体的长度
Content-Type:告知客户端,实体主体的媒体类型
Content-Location:
Content-MD5:
Content-Range:告知客户端返回的响应是符合那部分范围的
Expires:告知资源失效的日期,缓存服务器。缓存服务器收到包含该字段的响应后,会在该日期之前一直保存响应的副本,副本失效之后,会重新向源服务器请求资源。
Last-Modified:
与Cookie有关的字段:
Set-Cookie:
Name 名字 必须项
expires:表示cookie的有效期
path:
domain:
Secure:仅在HTTPS安全通信情况下才发送
HttpOnly:加以限制,使cookie不能被javaScript访问
HTTP安全:
HTTP的缺点:
①通信使用明文可能被窃听
②不验证通信方的身份,通信方可能遭到伪装
③无法验证报文的完整性
HTTPS=HTTP+加密+认证+完整性保护
共享密钥加密:发送方和接收方的密钥是一样的,加密和解密使用相同的密钥
公开密钥加密:使用两个密钥,一把私有密钥,一把公开密钥,发送信息方使用公开密钥进行加密,而接收方使用私有密钥进行解密。只根据公开密钥和密文恢复到信息原文是很困难的。
HTTPS使用两种方法进行混合加密:先使用公开密钥通信,使得双方得到后续共享密钥加密中的密钥,在确保交换的密钥安全之后使用共享密钥方式。