初识HTTP协议
简单了解HTTP协议相关内容。
本篇内容主要是根据HTTP/1.1版本。
arp协议
IP能够通过arp协议解析出mac地址。
-----------------------------------------------------------------------
通信流程
http协议生成针对目标web服务器的http请求报文
收到后处理报文
tcp协议将http报文请求按序号分割成报文段
收到后将报文段重组
ip协议搜索对方的地址,一边中转一边传送
-----------------------------------------------------------------------
dns解析,应用层协议,将域名解析成ip地址
URI 统一资源标识符与URL 统一资源定位符
URL是URI的子集
URI包括
ftp://
http://
ldap://
tel:
telnet://
news:
urn:等
-------------------------------------------------------------
请求报文的构成:
方法 URI 协议版本
POST /form/entry HTTP/1.1
请求头
请求体
-------------------------------------------------------------
响应报文构成
协议版本 状态码 状态码的原因短语
HTTP/1.1 200 OK
响应头
响应体
-------------------------------------------------------------
HTTP是无状态协议,所以为了保存状态,有了Cookie。
HTTP中的方法:
GET方法用来请求访问已被URI识别的资源。
请求 GET /index.html HTTP/1.1
Host:www.xxx.jtp
响应 返回 index.html的页面资源
请求 GET /index.html HTTP/1.1
Host:www.xxx.jtp
if-Modified-Since:Thu,12 Jul 2017 12 17 07:30:00 GMT
响应 仅访问这个时间以后更新过的资源,
如果没有内容更新,则以状态码304 Not Modified作为响应内容。
-------------------------------------------------------------
POST :传输实体主体
请求 POST /submit.cgi HTTP/1.1
Host:www.xxx.jtp
Content-Length:1560
响应 返回submit.cgi接收数据的处理结果
-------------------------------------------------------------
PUT:传输文件
请求 PUT /example.html HTTP/1.1
Host:www.hackr.jp
Content-Type:text/html
Content-Length:1560
响应 响应返回状态码 204 No Content (请求执行成功,但没有返回内容)
-------------------------------------------------------------
DELETE 删除文件
OPTIONS 询问支持的方法
请求 OPTIONS*HTTP/1.1
Host:www.xxx.jp
响应 HTTP/1.1 200 OK
Aallow:GET,POST,HEAD,OPTIONS (返回支持的方法)
-------------------------------------------------------------
持久连接概念:以前http1.0时候,每次请求一个资源都要连接再断开一次tcp,消耗资源
HTTP/1.1和部分1,0有了持久连接功能,只要任意一段没有明确提出断开,则保持tcp连接状态。
MIME概念:允许邮件处理文本,图片视频等多个不同类型的数据传输。多种数据的多部分对象集合。
在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。
内容协商:
例如同一个页面分为中文版英文版,根据浏览器默认语言访问相应的内容。这样的机制叫内容协商。
内容协商会以语言,字符集,编码方式为基准判断响应的资源。
-------------------------------------------------------------
状态码
状态码告知从服务器端返回的请求结果。
1xx Informational 信息性状态码 接受的请求正在处理
2xx Success 成功状态码 请求正常处理完毕
3xx Redirection 重定向状态码 需要进行附加操作以完成请求
4xx Client Error 客户端错误状态码 服务器无法处理请求
5xx Server Error 服务端错误状态码 服务器处理请求错误
具体例如:
200 OK 表示从客户端发来的请求在服务器端被正常处理了。
204 No Content 服务器接收的请求已成功处理,但在返回的相应报文中不含实体部分。也不允许返回任何实体的主体。
例如,提交之后页面不更新,没变化。
206 Partial Content 表示客户进行了范围请求,服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
301 Moved Permanently 永久性重定向,该状态码表示请求的资源已被分配了新的URL。如果保存了书签需要更新书签了。
302 Found 临时重定向,该状态码表示请求的资源已被分配了新的uri,希望用户能使用熄灯呢uri访问。
303 See Other 该状态码表示由于请求对应的资源存在着另一个uri,应使用get方法定向获取请求的资源。
304 Not Modified 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求为满足条件的情况后,
直接304,不包含任何响应的主体部分,和重定向没有关系。
307 Temporary Redirect 临时重定向,该状态码与302有相同的含义
400 Bad Request 请求报文中存在语法错误。
401 Unauthorized 发送的请求需要有通过http认证的认证信息。
403 Forbidden 对请求资源的访问被服务器拒绝了。
404 Not Found 表示无法找到请求资源
500 服务器端执行请求时发生了错误。
503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护,无法处理请求。
-------------------------------------------------------------
通用指定首部字段
Cache-Control指令,通过指定首部字段,能够操作缓存的工作机制。
例如:
no-cache 强制向源服务器再次验证
no-store 不缓存请求或响应的任何内容
max-age = [秒] 响应的最大Age值
等等。
分为请求指令和响应指令。
具体应用:
例如:
Cache-Control:public 可向任意方提供相应的缓存。
HTTP/1.1版本默认连接都是长连接,当服务器端想断开连接时,则指定connection首部字段值为Close.
HTTP/1.1版本之前如果需要长连接则需要 Connection:Keep-Alive
请求首部字段
Accept 通知服务器,用户地阿里能够处理的媒体类型及媒体类型的相对优先级。例如text/html,application/xhtml+xml,image/jpeg,video/mpeg
Accept-Charset 通知服务器用户代理支持的字符集及字符集的相对优先级。例如unicode
Accept-Encoding 告知服务器用户代理支持的内容编码及内容编码的优先级。 例如gzip,compress
Accept-Language 告知服务器用户代理能够处理的自然语言,可以指定多种语言。
Authorization 告知服务器用户代理的认证信息。
等等
响应实体首部字段
Allow:GET,HEAD 用于同志客户端能够支持Request-URI指定资源的所有HTTP方法,当服务器收到
不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回。
Content-Language 资源的语言
Content-Length 实体主体部分的大小,单位是字节
Content-Type 说明了实体主体内对象的媒体类型。
Expires 资源失效日期。
-------------------------------------------------------------
为Cookie服务的首部字段
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段
Http协议的瓶颈:
一条连接上只可发一个请求。
请求只能从客户端开始,客户端不可以接收除响应以外的指令。
请求、响应首部未经压缩就发送,首部信息越多延迟越大。
发送冗长的首部,每次互相发送相同的首部造成的浪费较多。
可任意选择数据压缩格式,非强制压缩发送。
Ajax的解决方法。部分更新
Comet 一旦服务器有更新,Comet不会让请求等待,直接给客户端响应,通过延迟应答模拟实现服 务端向客户端推送的功能。通常服务端收到请求会处理完立即返回响应,但为了实现推送的功能,服务端会将响应置于挂起状态,当服务器内容更新后再返回该响应。
SPDY 改写了部分HTTP协议,多路复用,赋予请求优先级,压缩HTTP首部,推送功能,服务器提示功能。
-------------------------------------------------------------
WebSocket协议
推送功能
支持由服务器向客户端推送数据的推送功能。
减少通信量
只要建立起websocket连接,就希望一直保持连接状态。
为了实现websocket连接,在http连接建立之后,需要完成握手的步骤。
握手:
为了实现websocket通信,需要用到HTTPde Upgrade首部字段,告知服务器通信协议发生了变化,以达到握手的目的。
请求:
GET /chat HTTP/1.1
Host:server.example.com
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25JZQ==
Origin:http://example.com
Sec-WebSocket-Protocol:chat,subperchat
Sec-WebSocket-Version:13
响应:
对于之前的请求,返回状态吗101 Switching Protocols的响应
HTTP/1.1 101 Switching Protocols
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Accpet:s3pPLMBitXAQ9kGzz+xoo==
Sec-WebSocket-Protocol:chat
Sec-WebSocket-Accpet的字段值是由握手请求中Sec-WebSocket-Key的字段生成的。
握手确立之后,通信时不再使用HTTP的数据帧,而是WebSocket独立的数据帧。
中天一片无情月,是我平生不悔心