切换主题
图解HTTP
字数
3511 字
阅读时间
14 分钟
JavaScript高级程序设计(第四版):https://leglegend.github.io/web-road-map/node/js-advanced.html#表单基础
第1章 了解Web及网络基础
使用HTTP协议访问Web
HTTP(HyperText Transfer Protocol),超文本传输协议
HTTP的诞生
WWW(World Wide Web),万维网 构建万维网的三项技术:
- HTML(HyperText Markup Language),超文本标记语言
- HTTP
- URL(Uniform Resource Locator),统一资源定位符
网络基础TCP/IP
计算机与网络设备要互相通信,双方就必须基于相同的方法,或称之为——协议(protocol)。
TCP/IP协议分为四层:应用层、传输层、网络层、数据链路层。
- 应用层:决定了向用户提供应用服务时通信的活动
例如:FTP(File Transfer Protocol)文件传输协议,DNS(Domain Name System)域名系统,HTTP - 传输层:提供处于网络连接中的两台计算机之间的数据传输 传输层有两个性质不同的协议:TCP(Transmission Control Protocol)传输控制协议,UPD(User Data Protocol)用户数据报协议
- 网络层:用来处理网络上流动的数据包,选择一条传输路线
- 数据链路层:用来处理连接网络的硬件部分
客户端 -> 应用层 -> 传输层 -> 网络层 -> 链路层 | 服务器 <- 应用层 <- 传输层 <- 网络层 <- 链路层
举个HTTP请求的例子:
- 客户端在 应用层 发起HTTP请求
- 在 传输层 把HTTP请求报文分割并打标记
- 在 网络层 增加作为通信目的地的MAC地址
- 链路层 接收到数据逐层向上发送 每一层都会给信息打上一层首部信息,接收时每一层都会取掉
这种把数据包装起来的做法叫做封装
与HTTP关系密切的协议:IP、TCP和DNS
IP(Internet Protocol)网际协议 位于网络层,其作用是把各种数据包传送给对方 MAC地址(Media Access Control Address)
TCP位于传输层,提供可靠的字节流服务。 字节流服务(Byte Stream Service),指为了方便传输,将打款数据分割成以报文段(segment)为单位的数据包进行管理
为确保数据送达目标,TCP协议采用了三次握手策略,数据包送出后,会向对方确认是否成功送达。 握手过程中使用了TCP的标志(flag) SYN(synchronize) ACK(acknowledgement)
- 发送带有SYN标志的数据包给对方
- 接收后回传带有SYN/ACK标志的数据包以示传达确认信息
- 发送端再回传带有ACK标志的数据包,代表握手结束
负责域名解析的额DNS服务
DNS(Domain Name System),和HTTP一样位于应用层,提供域名到IP地址之间的解析服务。 DNS服务,通过域名查IP,或通过IP反差域名
各种协议与HTTP协议的关系
URI和URL
URI(Uniform Resource Identifier) 统一资源标识符 URL(Uniform Resource Locator) 统一资源定位符 URL就是使用浏览器访问页面时要输入的网页地址
URL是URI的子集,URI用字符串标识某一互联网资源,URL标识资源的地址
绝对URI格式:
http://user:pass@www.example.jp:80/dir/index.html?uid=1001&type=user#ch1 协议 登录信息 服务器地址 端口号 文件路径 查询字符串 片段标识符
登录信息:用户名密码,可选
服务器地址:可以是DNS可解析的名称,也可以是192.168.1.1这种IPv4地址,或者[0:0:0:0:0:0:0:0:1]IPv6地址
端口号:可省略,自动使用默认端口号 带层次的文件路径:服务器上的路径
查询字符串:针对指定文件路径内的资源,传入任意参数,可选
片段标识符:可选,一般用于标记已获取资源的子资源
RFC(Request for Comments) 征求修正意见书
第2章 简单的HTTP协议
HTTP协议用于客户端和服务端之间的通信
通过请求和响应的交换达成通信
请求包含:method(请求方法),URI,协议版本(HTTP/1.1),首部字段,内容实体 响应包含:协议版本、状态码(status code)、原因短语(reason-phrase)、首部字段(header field)、主体(entity body)
HTTP是不保存状态的协议
即无状态(stateless)协议,不具备保存之前发送过的请求或响应的功能
可用Cookie技术管理状态
请求URI定位元素
HTTP协议使用URI定位网上的资源
GET http://hacker.jp/index.htm HTTP/1.1 -> GET /index.htm HTTP/1.1 Host:hacker.jp 如果不是访问特定资源而是对服务器本身发起请求可用*代替URI
OPTIONS * HTTP/1.1
告知服务器意图的HTTP方法
HTTP/1.1可使用的方法 GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获得报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
TRACE:追踪路径
CONNECT:要求用隧道协议连接代理
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
使用方法下达命令
持久连接节省通信量
持久连接 HTTP keep-alive,避免加载很多资源时每次都要建立TCP连接
在HTTP/1.1中,所有连接默认都是持久连接
持久连接使可以同时发送多个连接,而不用等待上次连接结束再发起下个连接
使用Cookie的状态管理
响应报文有一个Set-Cookie的首部字段,通知客户端保存Cookie,下次请求会在请求中加入Cookie
第3章 HTTP报文内的HTTP信息
HTTP报文
HTTP报文是由多行(CR+LF换行)数据构成的字符串文本 包含请求报文和响应报文
请求报文及响应报文的结构
报文首部 空行 报文主体(可选)
请求行:方法URI和HTTP版本
状态行:状态码原因短语和HTTP版本 首部字段:请求头、响应头、实体
其他:RFC未定义的首部(Cookie等)
编码提升传输速率
内容编码:应用在实体内容上的编码格式 常用编码:gzip、compress、deflate、identity(不进行编码)
传输大容量数据时,把数据分割成多块(chunk),这称为块传输编码
获取部分内容的范围请求
范围请求(Range Request):在首部字段Range指定资源的byte范围,返回206
内容协商返回最合适的内容
内容协商:客户端和服务端就响应资源进行交涉,返回合适的资源(例如:语言)
第4章 返回结果的HTTP状态码
状态码告知从服务端返回的请求结果
状态码类别: 1xx: 信息性状态码,接受请求正在处理 2xx:成功状态码,请求正常处理完毕 3xx:重定向状态码,需要进行附加操作以完成请求 4xx:客户端错误状态码(Client Error),服务器无法处理请求 5xx:服务器错误状态码(Server Error),服务器处理请求出错
2xx成功
200 OK 请求被正常处理
204 No Content 请求已成功处理,但返回响应报文中不含实体的主体部分,页面不会刷新,一般在只需要发送求情,不需要返回值的时候使用
206 Partial Content 客户端进行了范围请求,服务端成功执行了这部分
3xx重定向
301 Moved Permanently 永久性重定向,标识请求的资源已被分配了新的URI (Location首部字段中有新的URI) 302 Found 临时性重定向 303 See Other 请求资源存在另一个URI,使用GET方法定向获取资源
304 Not Modified 资源已找到,但未改变,客户端可直接使用缓存,与重定向无关
307 Temporaty Redirect 临时重定向,请求方法不可变
4xx客户端错误
400 Bad Request 请求报文中存在语法错误 401 Unauthorizerd 第一次返回提示需要认证,第二次返回提示认证失败,浏览器初次收到401响应时,会弹出认证对话框 403 Forbidden 请求资源被服务器拒绝 404 Not Found 服务器上无法找到请求的资源
5xx服务器错误
500 Internal Server Error 表明服务端在执行请求时发生了错误 503 Service Unavailable 服务器处于超载或停机维护
第5章 与HTTP协作的Web服务器
用单台虚拟主机实现多个域名
域名通过DNS夫妻映射到IP地址(域名解析)后访问目标网站
同一个服务器可以搭建多个Web站点,实际上访问的是同一个IP,可在Host首部内区分
通信数据转发程序:代理、网关、隧道
可将请求转发给通信线路得到下一站服务器,并接受并转发响应给客户端
代理:转发功能服务器,接收客户端请求转发给服务器,并将响应转发给客户端
网关:转发其他服务器数据的服务器,接收客户端请求,就像自己就是本身的服务器一样
隧道:在相隔甚远的客户端与服务器之间进行中转
代理
代理不改变URI,持有资源的服务器称为源服务器,代理转发时会追加Via首部字段
代理服务器可以对特定URI进行访问控制
缓存代理(Caching Proxy),预先将资源保存在代理服务器上,再次请求可不从源服务器取数据
透明代理(Transparent Proxy),不对报文做任何加工的代理类型网关
可由HTTP请求转换为其他协议通信,可加密隧道
建立起一条与其他服务器的通信线路,再使用SSL等加密手段进行通信
保存资源的缓存
缓存之代理服务器或客户端本地磁盘保存资源副本
缓存有效期
缓存过期后,相源服务器确认缓存是否失效,断定失效则再次请求新资源
HTTP之前的协议
FTP(File Transfer Protocol) 文件传输协议
NNTP Archie WAIS Gopher
第6章 HTTP首部
HTTP报文首部
报文首部:客户端及服务端处理时的重要信息
报文主体:需要的资源
HTTP首部字段
结构: 首部字段名:字段值
例子:Content-Type:text/html
字段值可有多个值,逗号隔开
首部字段类型:
- 通用首部字段:请求和响应都会使用的首部
- 请求首部字段
- 响应首部字段
- 实体首部字段:资源内容等与实体相关的首部
HTTP/1.1 通用首部字段
Cache-Control:操作缓存工作机制
Connection:控制不再转发给代理的首部字段、管理持久连接。Keep-Alive:保持连接 close:断开持久连接 1.1默认都是持久连接 1.0相反 Date:创建HTTP报文的日期和时间 Trailer:事先说明报文主体后记录了哪些首部字段
Transfer-Encoding:传输报文主体时采用的编码方式,1.1仅对分块有效(chunked)
Upgrade:用以检测HTTP协议或其他协议是否可使用更高的版本进行通信
Via:用于追踪报文的转发
Warning:警告
请求首部字段
Accept:可通知服务器能够处理的媒体类型,type/subType格式 text/html;q=1 q表示权重 Accept-Charset:通知服务器支持的字符集
Accept-Encoding:告知服务器支持的内容编码 gzip compress deflate identity
Accept-Language:支持的语言
Authorization:告知服务器认证信息
Expect:告知服务器期望出现的某种特定行为
From:告知服务器用户的电子邮箱
Host:请求资源所处的互联网主机名和端口号
If-Match:条件请求,服务端判断条件为真才会执行请求
If-Modified-Since:指定日期后发生更新,服务器接收请求
If-None-Match:与ETag不一致时才处理请求,与If-Match相反
Max-Forwards:最大转发次数
Range:获取部分资源的范围请求 bytes=5001-10000
Referer:告知服务器请求的原始资源URI
User-Agent:浏览器信息
响应首部字段
Accept-Ranges:告知客户端请求范围
Location:将响应接收方引导至另一个URI
Server:服务器安装的HTTP应用服务的信息
实体首部字段
Allow:允许的HTTP方法
Content-Encoding:告知客户端主题的内容编码方式 例如gzip
Content-Language:实体主体使用的语言
Conent-Length:主体部分大小
Content-Location:主体返回资源的对应URI
Content-MD5:MD5算法值,可判断返回信息是否完整
Content-Range:返回的范围
Content-Type:实体内容的媒体类型
为Cookie服务的首部字段
Set-Cookie:响应首部字段,告诉客户端Cookie Cookie:请求首部字段,告诉服务器自己的Cookie
Set-Cookie:name=value 方式
其中包含: expires=DATE Cookie的有效期
path 适用文件目录
domain 适用域名
Secure 仅在https下才会发送Cookie
HttpOnly 不能被JS脚本访问
第7章 确保Web安全的HTTPS
HTTP的缺点1
HTTPS
贡献者
sunchengzhi