【HTTP】HTTP通信

1. HTTP 翻译为 超文本传输协议,还是超文本转移协议 ,图灵社区有讨论,https://www.ituring.com.cn/article/1817 感觉大家都是觉得之前的不妥,应该翻译为 超文本转移协议。

个人的理解:

 

 

2. REST 的API 格式,看一看 《RESTful Web Services》 了解一下

 

3. HTTP 和 Socket的区别,个人感觉是一个东西,Socket 是网络层建立通信用的,HTTP是应用层,规定传输协议用的,具体的区别,以后看看网上的资料。

 

4. 我认为 ARP是一个 局域网协议,ARP 又称为 IP解析协议,通过IP地址 解析出 机器的MAC地址,看了一些资料,没找到它跟局域网的直接关系。

我理解的现在的网络通信是这样吧。北京的A 要和 上海的B 通信,假如是在QQ上,此时可以获取到B的IP地址,通过路由器定位到IP地址的大概范围,具体到局域网,网段之后,通过 ARP协议,将IP地址解析为 固定不变的MAC值,推送给机器。

大范围的锁定用IP地址,更精确的定位 用MAC值,

关于这块的理解,可能还不太有错,当我当下是这么理解的。

 

5. HTTP 的 PUT 和 POST 方法,都能用来传输文件,

PUT 的请求每次都被执行,如果两次请求相同,第二次的请求结果会将第一次的结果覆盖掉

POST 的请求,如果两次请求相同,会新增一个资源文件,

但是具体的实现方式 要看 服务端怎么处理,可能是tomcat 或者 是代码应用层面的内容处理。

HTTP的方法具体有: GET、POST、PUT、DELETE、OPTIONS、TRACE、HEAD、CONNECT、

HEAD: 用来获取资源的首部信息,响应中的首部信息与Get方法一致。主要用来 更新缓存 测试资源可用性 测试资源是否被修改

 

 

6. HTTP 的状态码:(可以理解为 通信的一种准则)

(状态码是为了规范浏览器服务器的制定,希望浏览器和服务器的开发过程可以遵循,但是没有办法强制,比如302和303)

1XX :  Informational(信息性)    接收的请求正在处理

2XX :  Success (成功)              请求正常处理完毕

3XX :  Redirection(重定向)      需要进行附加操作以完成请求

4XX:  Client Error(客户端错误)  服务器无法处理请求

5XX:  Server Error(服务端错误) 服务器处理请求出错

(可以自定义,但是类别需要符合以上标准)

HTTP的状态码大概有60多种,常用的有14种:

2XX: 表明请求被正常处理了。

200  OK :请求被正常处理了,在Get方法中,响应内容在报文主体中,在HEAD方法中,响应内容在 头部。

204 No Content : 响应报文中没有报文实体,就是说没有资源返回。

206 Partical Content: 范围请求,只请求资源文件的一部分,用于 下载续传。

3XX:  表明浏览器仍需要执行某些特殊处理,已处理请求。

301  Move Permanently : 永久性重定向,响应头会包含Location,浏览器要继续访问新的URI以获取资源,会更新书签。

302 Found: 临时重定向,本次有效,以后可能不生效,不会更新书签。

303 See Other l临时重定向,修改访问方法,当服务器返回 新的URI之后,浏览器使用GET方法访问新的URI获取资源,(某些浏览器将302返回的uri,也只用GET的访问新的地址)

当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST请求改成GET请求,并删除报文的主体,通过GET方法请求新的URI。
但是301、302是禁止将POST改成GET方法的,但大家实际上都是这么干的。

304 Not Modified : 使用浏览器的缓存处理,客户端发送的GET请求报文中有 If-Match、If-Modified-Since、If-None-Match、If-Range、If-Un modified-Since的任意一个时,服务器可能返回304。

通常用在 浏览器发送了If-Modified-Since ,并携带E-tag(当前请求资源的hash值)请求这个时间段之后的该资源,服务器发现资源没有更新时,同意浏览器使用本地的缓存处理时,返回304。关于304还有一个其他 头部标识符,比如强制不使用缓存

304的响应头中有Cache-Control :(max-age/public和private/no-cache/no-store/)

max-age: 缓存过期时间,在多长时间内,可以使用本地的缓存

public :第三方代理可以缓存

private:只能浏览器或客户端缓存

no-cache:使用缓存时,需要通过E-tag请求服务器,以确定是否需要更新(不使用缓存中的过期资源)

no-store: 浏览器和第三方 web代理都不缓存资源,每次都请求服务器(不缓存)



If-Match : 如果匹配E-tag,则处理,否则,服务端不处理请求 (资源没有被修改,可以处理)
(倾向于使用浏览器缓存,但是缓存没有了,我想请求一下之前的资源,如果服务器资源更新了,那拒绝我吧)
如果不匹配,可以返回 412 状态码,之后可以使用本地缓存、

If-None-Match: 如果不匹配  E-tag,则处理,否则,服务端不处理(资源被修改了,可以处理)
(倾向于使用服务器最新资源文件,如果没有更新,那服务器拒绝我吧,我可以用浏览器缓存资源)

(在Get和Head方法中,使用首部字段If-None-Match可以获取最新的资源,这与If-Modified-Since相似)


Connection : 
标识只转发给代理服务器的首部,代理服务器将Connection标识的首部以及Connection首部信息处理删除,再转发给 服务器。
一般用于 控制不再转发给代理的首部字段 和 管理持久化连接。

持久连接:在HTTP/1.1之前,客户端和服务器之间都是非持久连接,
在1.1之后默认是持久性连接,Connection:Keep-alive,Keep-Alive用来保证客户端和服务器之间的持久性连接。
当服务器想要断开连接时,使用Connetion传递一个Close字段即可。

307 Temporary Redirect  临时重定向 ,当服务器返回307状态码,说明浏览器需要继续请求新的URI,此时希望浏览器使用POST方法访问新的URI。

(302是在HTTP/1.0的时候就有的,303和307是在HTTP/1.1的时候加入的,为了细化302的规范,需要浏览器在被重定向之后,想要发GET请求,那就使用303,如果浏览器被重定向之后,想要发送POST请求,那就使用307状态码)。

 

4XX: 客户端错误

400 Bad Request  : 请求报文中存在语法错误

401 Unauthorized : 标识请求的资源需要通过HTTP验证(BASIC、DIGEST),响应头中会包含一个 WWW-Authenticate首部用来质询用户信息,当浏览器第一次接收401响应时,会弹出认证用的对话窗口。(比如ActiveMQ经常见到)

403 Forbidden  :请求的资源地址被拒绝,服务器不允许访问该资源,拒绝没有原因,但可以在响应实体中加以说明,一般出现在没有权限的情况下。、

404 Not Found : 表示服务器上无法找到请求的资源,也可以在服务器端拒绝请求,并不说明原因。

412 Preconditioned Failed : 如果请求中有 If-Match字段,服务器通过E-tag值对比,发现不匹配,可以返回412拒绝该次请求。

5XX: 服务器错误

500 Internal Server Error  :在执请求过程遇到问题,可能是 web应用存在的bug或者某些临时的故障

503 Service Unavailable : 服务器暂时处于超负荷或者进行停机维护,现在无法处理请求。如果开发人员之后本次维护的时间,可以将需要的时间写入 RetryAfter 首部字段中。

 

7. 虚拟主机映射 和 云服务器的内网地址

如果只有一台物理设备,需要提供多个Web服务,可以通过 域名匹配的方式映射到IP地址上,当用户使用域名访问时,DNS先将域名解析为IP地址,定位到设备,之后,通过域名访问具体的web应用,比如像 同一个服务器对外提供多个web服务。

云服务一般都有 外网地址和内网地址,外网地址用于网络通信,内网地址用于局域网通信。应该不是同一个物理设备,或者说 每个外网IP对应一块网卡。

8. 代理、网关、隧道

代理: 客户端和服务器之间的转发者,可以用缓存、访问控制、记录访问日志等。两种实现机制:是否使用缓存、是否修改报文

网关:具有处理功能的中间人,存储映射表,他可以对请求进行处理转发到合适的服务器应用上,客户端和网关之间是HTTP通信,网关和服务器之间可以是非HTTP协议,网关还可以连接数据库和其他接口做一些操作处理。

隧道:使用HTTP的Connect方法建立连接,使用SSL加密传输保证数据传输的安全性。透明传输。

 

8. 什么是 HTTPS通信?

http是应用层协议,HTTP的报文结构有 请求行 、头部信息、实体信息组成。

HTTP的通信是不安全的,可以通过加密方式来进行安全通信,一般有两种实现方式。

第一种,通过HTTP在应用层将 实体信息进行加密,保证内容不被破解。

第二种,使用SSL的方式建立客户端和服务器之间的可靠安全传输。SSL不属于应用层也不属于传输层, 在两层之间的安全套接字,在应用层将报文内容传递给SSL,SLL使用公钥对报文进行加密处理,再交给传输层TCP进行发送,服务器端接到数据之后,在SSL层将数据解密得到HTTP报文格式,再进行处理。

SSL:在建立通信的过程中,依靠CA体系,认证服务器证书,认证证书携带的公钥信息,确定该服务器和公钥信息是一致的。

SSL建立通信的过程在 TCP的三次握手成功之后,会请求服务器端证书。

TLS 是SSL标准化之后的产物,现在TLS的1.0版本与SSL的3.0版本几乎没有区别

 

记一下:签名 验签和加密 解密

签名验签:A使用私钥对数据的摘要值做一个签名值,同时发送 原文 签名值 给B,B使用A的公钥对签名值解密,获得摘要值,并对原文做摘要处理,得到一个摘要值,对比。确定 A是否是A,因为只有 A拥有 公钥的对应私钥。

加密解密:A先产生一个密钥(对称密钥),使用堆成公钥对原文做加密处理,得到密文,并使用B的公钥对对称密钥做加密处理,得到数字信封,发送 密文 和 被加密的对称密钥给B。B使用B的私钥对 数字信封进行解密,得到对称密钥,使用对称密钥对密文解密得到 原文。(核心是:对称密钥加解密速度快)

(真实的通信情况是:A先和B协商 对称密钥,对称密钥确定之后,就使用对称密钥进行通信)

 

9. HTTP认证:

确认请求者身份,一般有 BASIC(基本认证)、DIGEST(摘要认证)、SSL(客户端认证)、FormBase(表单认证)

BASIC和DIGEST,不常用了。而SSL成本较高,需要证书,一般也不用,除了保密性重要的地方,例如银行的U盾等,

常用的就是 表单提交了,通过表单提交用户信息,服务器返回一个 set_Cookie : SESSIONID=xxx。浏览器保存Cookie的内容,下次请求时,在请求头中 添加 Cookie的SESSIONID,服务端就能区分请求来自某个已认证的用户。

 

10. 如何实现Web服务的信息和客户端之间同步

Ajax:异步通信,异步JavaScript与XML技术,有效利用JavaScript和DOM(文档对象模型)的操作。局部替换web,部分请求

Ajax的核心技术是 XMLHttpRequest 的API,通过JavaScript脚本语言与服务器进行HTTP通信。

Comet :延迟应答,挂起连接,等服务器有更新了,再返回响应给客户端。

SPDY:谷歌在 2010年提出的speedy。在应用层和传输层之间,添加了 会话层,用来管理建立起来的连接。控制对数据的流动。优点:多路复用流、赋予请求优先级、压缩HTTP首部、推送功能、服务器提示功能。但是该技术应用推广不佳。

WebSocket:应用层协议,Web浏览器和Web服务器之间的全双工通信标准。

WebSocket是建立在HTTP基础上协议,第一次请求依靠客户端发起,等TCP连接建立成功之后,服务端会发送 upgrade:WebSocket 字段,来协商切换到 WebSocket协议,已处理之后的通信内容。这样就由WebSocket全权接管了,任然依靠TCP通信,可以传输JSON、XML、HTML或任意格式的数据。(此时客户端和服务端都能主动发送数据)(一共需要四次握手,第四次握手的响应状态码为101 Switching Protocols)

优点:

推送功能,支持服务器端主动推送信息到客户端

减少通信量:建立连接之后,就一直保持着,而且WebSocket的首部信息较少

 

10. XML解析器:

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值