图解http协议

第一章 了解Web及网络能基础

一、HTTP是什么

HyperText Transfer Protocol 超文本传输协议html

二、HTTP当前使用较多的版本

http 1.1web

三、TCP/IP协议族

1、协议族 解决了如下的问题 进而指定的一系列规则
一、怎样探测到通讯的目标 目标
二、由哪一边发起通讯 发
三、使用哪种语言进行通讯 发送中
四、怎样结束通讯 发送完
2、TCP/IP的分层管理
应用层:向用户提供应用服务时的通讯活动 FTP HTTP DNS
传输层:提供处于网络链接的两台计算机之间的数据传输 TCP UDP
网络层: 数据包经过怎样的路径到达目标地址 IP ARP RARP
链路层:用来处理网络的硬件部分 网卡segmentfault

四、与HTTP协议关系密切的IP TCP DNS

IP地址 指明了节点被分配到的地址
MAC地址 网卡所属的固定地址
使用ARP协议凭借MAC地址进行通讯
1、确保可靠性的TCP协议
TCP传输协议
在TCP/IP协议中,TCP协议提供可靠的链接服务,采用三次握手创建一个链接。
第一次握手:创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.windows

下面是一个TCP三次握手的实例
IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1浏览器

第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求创建联机;缓存

第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;安全

第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则链接创建成功。
负责域名解析的DNS
Domain Name System 提供域名到ip的解析服务服务器

五、URL的格式

http://user:pass@www.example....
协议:http https
登陆信息:指定用户名和密码从服务器端获取资源时必须的登陆信息
服务器地址:域名
服务器端口号:
带层次的文件路径:用来指定资源在服务器的位置
查询字符串:可选
片断标识符:可选 文档内的某个位置cookie

第二章 简单的HTTP协议

HTTP方法

GET:获取资源
图片描述网络

POST:传输实体主体
图片描述

PUT 向服务器传输文件
图片描述

HEAD 得到报文首部
图片描述

DELETE 删除服务器上的文件

图片描述

OPTIONS 询问服务器支持的方法
一种应用的场景 发送非简单的cors请求时 浏览器会首先发送options方法来询问服务器支持的方法。参见https://segmentfault.com/a/11...
图片描述

http中的长链接

HTTP1.1和HTTP1.0相比较而言,最大的区别就是增长了持久链接支持(貌似最新的 http1.0 能够显示的指定 keep-alive),但仍是无状态的,或者说是不能够信任的。在http1.0中使用Connection:keep-alive来标记此次请求是长链接的请求。
因此 若是web服务器端看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久链接),它就能够利用持久链接的优势,当页面包含多个元素时(例如Applet,图片),显著地减小下载所须要的时间。
长链接vs短链接
所谓长链接指创建SOCKET链接后不论是否使用都保持链接,但安全性较差,
所谓短链接指创建SOCKET链接后发送后接收完数据后立刻断开链接,通常银行都使用短链接

使用cookie的状态管理

HTTP是无状态的协议 不对以前发生过的请求和响应的状态进行管理
浏览器第一次向服务器发起请求
图片描述

浏览器第二次向该服务器发送请求
图片描述

下面是步骤1 2 3分别对应的报文
一、请求报文
GET /reader/HTTP/1.1
HOST:hackr.jp
二、响应报文
HTTP/1.1 200 OK
Date:Tur,12 jul 2012 07:12:20 GMT
Server Apache
<set-cookie:sid=12211212121 ;path=/ expires=wed,10-0ct-12 >
Content-Type:text/plain charset=UTF-8
三、请求报文
GET /image /http/1.1
Host : hacker.jsp
Cokkie:sid=12211212121

第三章 HTTP报文内的HTTP信息

报文的结构

报文首部 报文主体(用于传输请求或响应的实体主体)

请求报文及响应报文的结构

请求报文的结构
报文首部:请求行(方法 URI http版本) 请求首部字段 通用首部字段 实体首部字段 报文主体
响应报文的结构
报文首部:状态行(状态码 缘由短语 http版本) 响应首部字段 通用首部字段 实体首部字段 报文主体

第四章 服务器返回响应的状态码

状态码的类别

图片描述

2xx 成功

200 ok 客户端发过来的请求被正常的处理

204 No Content 服务器接受的请求已被成功的处理 可是没有内容返回

好比说  浏览器发出的put   delete   方法  服务器成功的处理了请求  可是不会返回任何的内容

206 partial Content 客户端进行了范围请求 并且服务器成功的处理了这个请求 在服务器的响应中包含由

Content-Range  指定范围的实体内容

3xx 重定向

301 Moved Permanently 永久性重定向 表示客户请求的文档在其余地方,必须在响应头部Location字段中指明新的永久性的URI。这个操做会将浏览器的书签也会改变

302 Found 临时重定向 此次的访问地址改变 可是浏览器中的书签不会被改变

304 Not Modified
可能会出如今如下的几种状况:
一、针对请求中的if-modified-Since 若是服务器没有更新 就会返回304 更新了就200
若是客户端在请求一个文件的时候,发现本身缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。所以,若是请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的文件的修改时间就能够肯定是返回 304 仍是 200 。对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。可是对于动态页面,就是动态产生的页面,每每没有包含 Last Modified 信息,这样浏览器、网关等都不会作缓存,也就是在每次请求的时候都完成一个 200 的请求。
二、当用户第一次访问某个静态资源的时候,服务器会返回
状态码:200
首部字段:Etag:dadmsdadks23
实体:相应的内容

当用户第二次请求该静态资源的时候会发送
首部字段:if-None-Math:w/dadmsdadks23
若是这个静态资源的实体值仍然为dadmsdadks23 就会返回304

4xx 客户端错误

400 Bad Request 该状态码 表示浏览器发起的请求中存在语法错误
401 Unauthorized 这个请求须要 HTTP认证
403 Forbidden 此次的请求被服务器拒绝了
404 Not Found 浏览器发起的请求的资源在服务器上没有找到

5xx服务器错误

500 Internal Server Error 服务器内部发生了错误
503 Service Unavailable 服务器不可用

第五章 与http协做的web服务器

通讯数据转发程序 代理 网管 隧道

代理 有转发功能的应用程序 扮演了位于服务器和客户端 “中间人”的角色
网管 接受从客户端发送过来的请求 它就像本身拥有子单元的源服务器同样对请求进行处理
隧道 客户端和服务器之间进行中转 并保持双方通讯链接的应用程序

第六章 HTTP首部

HTTP首部的种类

请求首部 响应首部 通用首部 实体首部

请求首部

一、Accept:text/plain,application/xhtml+xml,application/xml;q=0.3
通知服务器,我(客户端)可以处理的媒体类型及权重(0-1) 不指定权重的时候默认是1
二、Accept-charset:iso-8859-5,unicode-1-1;q=0.8
通知服务器,我(客户端)可以支持的字符集 及权重(0-1)
三、Accept-Ecoding:gzip,deflate
通知服务器,我(客户端)可以支持的内容编码
四、Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
通知服务器,我(客户端)可以处理的自燃语言集及权重(0-1)
五、Authorization: Basic dwVub3N1jasasjai=
通知服务器,我(客户端)的认证信息。一般须要服务器认证的客户端会在收到响应401 未受权的时候再发出带有这样首部的一个请求 从而向服务器发送认证的相关信息
六、Expect:100-continue
通知服务器,我(客户端)指望的出现的某种特定的行为 当服务器没法理解客户端的指望作出响应时 相应的状态码为417 Expectation Failed
七、Host
通知服务器,我(客户端)请求的资源在 服务器的主机名和端口号
八、if-match:123456 <etag_value>
条件请求 服务器接收到这样的条件请求时 只有判断条件为真的时候 才会处理请求
(1)For GET 和 HEAD 方法,搭配 Range首部使用,能够用来保证新请求的范围与以前请求的范围是对同一份资源的请求。若是 ETag 没法匹配,那么须要返回 416 (Range Not Satisfiable,范围请求没法知足) 响应。
九、if-None-Match <etag_value>
当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的相匹配的时候,服务器端会才返回所请求的资源,响应码为 200
十、Range:byte=5001-10000
告知服务器 主须要返回 从第5001-10000字节的资源
十一、refer:http://www.hacker.jp/index.html
告知服务器发起请求的 原始资源的URI 域名+资源名
十二、User-Agent:Mozilla/5.0(windows NT)
告知服务器 我(客户端)访问服务器时正在使用的浏览器的版本

响应首部字段

一、Accept-Ranges:bytes
告知客户端,我(服务器)可以处理的请求范围
二、Age:600 //这个缓存向源服务器确认过 如今已通过去10分钟了
告知客户端,我(服务器)在多久以前建立了响应(秒) 表示消息对象在缓存代理服务器中存贮的时长
三、ETag: <etag_value>
服务器会为每份资源添加ETag 可以告知客户端这个实体的标识 将资源以字符串的形式做为惟一的标识,当资源更新的时候 字符串也须要更新
四、Location:http://www.newLocation.com
配合状态码 301 302 将浏览器引导到新的地址 进而实现重定向
五、Retry-After:120 //告诉客户端你等2分钟以后再发送请求
配合状态码503(服务器不可用)一块儿使用
六、Server:Apache/2.2.1
告知客户端,我(服务器)的信息

通用首部字段

一、Cache-control 如下是它可能的取值
缓存请求指令
no-cache----不要读取缓存中的文件,要求向WEB服务器从新请求 区别于no-store
no-store----请求和响应都禁止被缓存
max-age:60----表示当访问此网页后的1分钟内不会去服务器请求,

这个功能与Expires相似,只是Expires是根据某个特定日期值作比较。一但缓存者自身的时间不许确.则结
    果可能就是错误的,而max-age,显然无此问题.。Max-age的优先级也是高于Expires的。

only-if-cached ---- 告知缓存者,我但愿内容来自缓存,我并不关心被缓存响应,是不是新鲜的
缓存响应指令
public---- 可向任意方 提供响应的缓存
private---- 仅向特定的用户返回响应
no-cache---- 能够缓存,可是只有在跟WEB服务器验证了其有效后,才能返回给客户端 可使用可是须要确认
no-store ---- 请求和响应都禁止被缓存
max-age:60 ----- 本响应包含的对象的过时时间 这个响应对象再有1分钟就过时了
二、Connection
这个字段有两个做用

[1]控制再也不转发给代理的首部字段 connection:Upgrade
图片描述

[2]管理持久链接 connection:close
在http1.1版本的链接默认都是持久链接。当服务器想要断开链接的时候 指定connection:close
三、Date:日期
建立报文的日期
四、via
能够追踪客户端与服务器之间的请求和响应报文的传输路径,报文在通过代理和网关时,会先在首部字段上附加该信息,而后再进行转发。
图片描述
五、Trailer:Expires
表示的是在报文主体 以后还有的首部字段
图片描述

实体首部

一、Allow:GET,HEAD
服务器通知客户端 我(服务器)可以支持的HTTP方法
二、Content-Encoding:gzip
会告知服务器或者客户端 实体主体的部分的编码
三、Content-Language:zh-CN
会告知服务器或者客户端 实体主体的使用的语言
三、Content-Length:1500
会告知服务器或者客户端 实体的长度
四、Content-Type:text/html;charset=UTF-8
说明了实体主体内容的媒体类型
五、Expires:Date类型
资源失效的一个日期
六、Last-Modified:Date
指明资源最终修改的时间

http中为cookie设置的首部

一、set-cookie:响应报文中 服务器向客户端设置cookieset-cookie有如下的属性值:[1]expires:date指定cookie的过时时间,若是没有为cookie的expire赋值的话 cookie的有效期仅限于会话期间[2]secure 没有值限制web网页仅在https安全链接时 才能够发送cookie[3]httpOnly 没有值这个属性会使js没法更改cookie

相关文章
相关标签/搜索