HTTP
超文本传输协议(HyperText Transfer Protocol),定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传给浏览器。
前置知识
网络分层模型:
分层设计优点:
高内聚低耦合、易复用、高扩展性
盖尔定律
一个切实可行的复杂系统势必是从一个切实可行的简单系统发展而来的。从头开始设计的复杂系统根本不切实可行,无法修修补补让它切实可行。你必须由一个切实可行的简单系统重新开始。
请求方法
- GET: GET方法用来请求访问已被URI识别的资源。指定的资源经过服务器端解析后返回响应内容。也就是说如果请求的资源是文本,那就保存原样返回,如果是CGI【通用网关接口】那样的程序,则返回经过执行后的输出结果。
- HEAD: 获取资源的元信息。HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
- POST: 提交数据,即上传数据。POST方法用来传输实体的主体。虽然用GET也可以传输实体的主体,但是一般不用,POST的主要目的并不是获取响应的主体内容。
- PUT: 修改数据。PUT方法主要是用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。但是HTTP 1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题。架构采用REST【表征状态转移】标准的同类Web网站,就可以会开放使用PUT方法。
- DELETE: 删除资源(几乎用不到),是与PUT相反的方法,DELETE方法按请求URI删除指定的资源。
- CONNECT: 建立连接隧道,用于代理服务器
- OPTIONS: 列出可对资源实行的请求方法,用来跨域请求
- TRACE: 追踪请求-响应的传输路径
常用状态码
RFC 规定 HTTP 的状态码为三位数,被分为五类:
- 1xx: 表示目前是协议处理的中间状态,还需要后续操作。
- 2xx: 表示成功状态。
- 3xx: 重定向状态,资源位置发生变动,需要重新请求。
- 4xx: 请求报文有误。
- 5xx: 服务器端发生错误。
200 OK是见得最多的成功状态码。通常在响应体中放有数据。
404 Not Found: 资源未找到,表示没在服务器上找到相应的资源。
500 Internal Server Error: 仅仅告诉你服务器出错了,出了啥错咱也不知道。
HTTP请求过程
以访问掘金网站文章为例:
- 浏览器分析链接指向页面的URL(juejin.cn/post/723257…
- 浏览器向DNS请求解析juejin.cn/的IP地址
- 域名系统DNS解析出掘金服务器的IP地址
- 浏览器与该服务器建立TCP连接(默认端口为80)
- 浏览器发出HTTP请求:GET/post/7232577434472874042
- 服务器通过HTTP响应把文件发送给浏览器
- 释放TCP连接
- 浏览器解释文件,并将Web页显示给用户
总结
一个HTTP框架的设计包括API设计、中间件设计、路由设计、协议层设计、网络层设计