1.URL和URI的区别
URI在某一规则下能把一个资源独一无二的标识出来 比如张三身份证找张三
URL通过描述人的位置来确定一个人 住址协议://地球/中国/北京市/海淀区/某大学/某宿舍楼/7202/张三
所以不论是定位方式还是身份证号码方式,都可以确定张三这个人,都是URI的一种实现
所以URL是URI的子集
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
2.报文主体和报文实体
报文要么是一个请求报文,要么就是一个响应报文。一次传输中,在应用层来看,就是一个传输的单位(客户端请求服务器,是发送一个“请求报文”,服务器响应客户端,则发送“响应报文”),即:报文是HTTP通信中的基本单位,通过HTTP通信传输。
报文分为报文头部、空行和报文主体。但是报文主体是可选的,如一个GET请求报文中,就没有报文主体
3.状态码
409 、请求与服务器端目标资源的当前状态相冲突
冲突最有可能发生在对 [PUT
]请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应
410、 客户端请求的资源已经不存在。
410不同于404,如果资源以前有,现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置。
413、请求实体太大
客户端发送的实体主体部分比服务器能够或者希望处理的要大
用post方法发送一个大文件(100MB以上)给www.google.com
417、状态码表示客户端错误,意味着服务器无法满足 [
Expect
] 请求消息头中的期望条件。
501、 未实现
客户端发起的请求超出服务器的能力范围
使用Fiddler Composer 给www.qq.com, 发送一个OPTIONS 方法的Request. 服务器就能返回501了。
503、 服务不可用
因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket) 连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。
505 不支持的HTTP版本
表示Web服务器不支持此HTTP协议的版本。
众所周知我们现在使用的HTTP协议版本是HTTP/1.1, 如果我们发送一个HTTP/2.0 的request 给博客园, 博客园肯定不能支持HTTP/2.0,所以会返回505
Http的缺点
1.通信使用明文(不加密),内容可能会被窃听
由于 HTTP 本身不具备加密的功能,所以也无法做到对通信整体(使用 HTTP 协议通信的请求和响应的内容)进行加密。即,HTTP 报文使用明文(指未经过加密的报文)方式发送。
因为TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,在此通信线路上的某些网络设备、光缆、计算机等都不可能是个人的私有物,所以不排除某个环节中会遭到恶意窥视行为。即使已经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是相同的。只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文信息本身还是会被看到的。
加密方式:
1.通信的加密
HTTP 协议中没有加密机制,但可以通过和 SSL(安全套接层)或TLS(安全层传输协议)的组合使用,加密 HTTP 的通信内容。用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP通信了。与 SSL 组合使用的 HTTP 被称为 HTTPS(超文本传输安全协议)或 HTTP over SSL。
2.内容加密
由于 HTTP 协议中没有加密机制,那么就对 HTTP 协议传输的内容本身加密。即把HTTP 报文里所含的内容进行加密处理。在这种情况下,客户端需要对 HTTP 报文进行加密处理后再发送请求。
2.不验证通信方的身份,因此有可能遭遇伪装
HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中 URI 真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。
任何人都可以发起请求
在 HTTP 协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的 IP 地址和端口号没有被 Web 服务器设定限制访问的前提下)。
1.查明对手的证书
虽然使用 HTTP 协议无法确定通信方,但如果使用 SSL 则可以。SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。
通过使用证书,以证明通信方就是意料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。另外,客户端持有证书即可完成个人身份的确认,也可用于对Web 网站的认证环节。
3.无法证明报文的完整性,所以有可能已遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。
1. 收到的内容可能有误
由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。换句话说,没有任何办法确认,发出的请求 / 响应和接收到的请求 / 响应是前后相同的。
![image.png](https://upload-images.jianshu.io/upload_images/20302114-47bff5b7a692744d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
除此之外, HTTP 本身还有很多缺点。而且,还有像某些特定的 Web 服务器和特定的 Web 浏览器在实际应用中存在的不足(也可以说成是脆弱性或安全漏洞),另外,用 Java 和 PHP 等编程语言开发的 Web 应用也可能存在安全漏洞。
HTTPS 身披SSL外壳的HTTP
http+加密+认证+完整性保护=https
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用SSL和 TLS协议代替而已。