需要知道的HTTP 知识

一、TCP/IP网络模型

TCP/IP模型借鉴于OSI七层网络模型,将会话层、表示层、应用层合并到应用层

img

各层之间传输数据时,会按照各自的协议进行封包和解包。发送端传输时打上该层所属的首部信息,接收端每经过一层则将对应首部信息去除

二、HTTP 报文结构

(一)请求报文

img

1595055957760

请求行

请求方法 /请求文件URI路径 /HTTP版本

GET /home HTTP/1.1

(二)响应报文

img

1595056191700

状态行

HTTP版本 /状态码 /原因短语

HTTP/1.1 200 OK

三、HTTP 的请求方法

http/1.1规定以下请求方法

  • GET: 通常用于获取资源
  • POST: 提交数据,即上传数据
  • HEAD: 获取资源的元信息
    • 与GET方法相同,但不返回报文主体
    • 用于确认 URI 的有效性及资源更新的日期时间等
  • PUT: 用来传输文件,但HTTP/1.1不带验证机制
    • 请求报文的主体中包含文件内容
    • 将文件保存到请求URI中
  • DELETE:删除资源,但HTTP/1.1不带验证机制
  • OPTIONS:查询资源支持的请求方法
  • CONNECT: 建立连接隧道,用于代理服务器
  • TRACE: 追踪请求-响应的传输路径

GET 和 POST 有什么区别

  • 语义的角度
    • GET请求资源,POST提交数据
  • 参数的角度
    • GET参数通过URL传递,POST放在Request body中更适合传递敏感信息
    • GET请求在URL中传送的参数是有长度限制的(2k),而POST没有
  • 编码的角度
    • GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制
  • 幂等性的角度
    • GET是幂等的,而POST不是 (表示执行相同的操作,结果也是相同的)
  • 浏览器行为的角度
    • GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会
    • GET产生的URL地址可以被Bookmark,而POST不可以
    • GET在浏览器回退时是无害的,而POST会再次提交请求
  • TCP的角度
    • GET产生一个TCP数据包,POST产生两个TCP数据包
      • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据
      • 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok 返回数据
      • 火狐浏览器除外,POST 请求只发一个 TCP 包

四、理解URI

URI全称为(Uniform Resource Identifier), 也就是统一资源标识符。用于区分互联网上的资源

(一)URI 的结构

img

  • http 和 https 的默认端口分别为80、443

(二)URI 编码

  • URI 只能使用ASCII, ASCII 之外的字符是不支持显示的
  • URI 引入了编码机制,将所有非 ASCII 码字符界定符转为十六进制字节值,然后在前面加个%

五、理解 HTTP 状态码

(一) 1XX Informational (信息性状态码)

表示临时响应并需要请求者继续执行操作

100 Continue 继续

请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分

101 Switching Protocols 切换协议

请求者已要求服务器切换协议,服务器已确认并准备切换

(二) 2XX Success(成功状态码)

表示成功处理了请求的状态码

200 OK 成功

服务器已经成功处理请求。通常表示服务器提供了请求的网页

201 Created 已创建

请求成功并且服务器创建了新的资源

202 Accepted 已接受

服务器已接受请求,但尚未处理

203 Non-Authoritative Information 未授权信息

服务器已经成功处理了请求,但返回的信息可能来自另一来源

204 No Content 无内容

请求成功处理,客户端请求的资源存在,但其表示是空的

若服务器拒绝对PUT、POST或者DELETE请求返回任何状态信息或表示,通常采用此响应代码

205 Reset Content 重置内容

与204类似,表明客户端应重置数据源的视图或数据结构

206 Partial Content 部分内容

表示客户端进行范围请求,服务端成功执行

用于对部分GET请求(即使用Range请求报头的GET请求)的响应,常用于大型二进制文件的断点续传

(三) 3XX Redirection(重定向状态码)

表示要完成请求,需要进一步操作。通常用来重定向

300 Multiple Choices 多重选择

被请求的资源在服务器端存在多个表示,而服务器不知道客户端想要的是哪一个表示时,发送这个响应代码

301 Moved Permanently 永久移动

请求的网页已永久移动到新位置。对GET或HEAD请求的响应服务器返回此响应时,会自动将请求者转到新位置

302 Found 临时移动

服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

比如你的网站从 HTTP 升级到了 HTTPS 了,以前的站点再也不用了,应当返回301,这个时候浏览器默认会做缓存优化,在第二次访问的时候自动访问重定向的那个地址
而如果只是暂时不可用,那么直接返回302即可,和301不同的是,浏览器并不会做缓存优化

303 See Other 查看其它位置

请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码

请求已经被处理,但服务器不是直接返回一个响应文档,而是返回一个响应文档的URI

304 Not Modified 未修改

自动上次请求后,请求的网页未修改过。服务器返回此响应,不会返回网页的内容

305 Use Proxy 使用代理

请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理

307 Temporary Redirect 临时性重定向

服务器目前从不同位置的网页响应请求,但请求者应继续使用原有的位置来进行以后的请求

(四) 4XX Client Error(客户端错误状态码)

表示请求可能出错,妨碍了服务器的处理

400 Bad Request 错误请求

服务器不理解请求的语法

401 Unauthorized 未授权

请求要求身份验证。对于需要登录的网页,服务器可能返回此响应

403 Forbidden 禁止

客户端请求的结构正确,但服务器拒绝请求

404 Not Found 未找到

服务器找不到请求的网页

405 Method Not Allowd 方法禁用

禁用请求中指定的方法

406 Not Acceptable 不接受

当客户端对表示有太多要求,以至于服务器无法提供满足要求的表示

407 Proxy Authentication Required 需要代理授权

此状态码与401(未授权)类似,但指定请求者应当授权使用代理

408 Reqeust Timeout 请求超时

服务器等候请求时发生超时

409 Conflict 冲突

请求的操作会导致服务器的资源处于一种不可能或不一致的状态

服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息

410 已删除

如果请求的资源已永久删除,服务器就会返回此响应

411 需要有效长度

服务器不接受不含有效内容长度标头字段的请求

412 未满足前提条件

服务器未满足请求者在请求者设置的其中一个前提条件

413 Request Entity Too Large 请求实体过大

服务器无法处理请求,因为请求实体过大,超出了服务器的处理能力

414 Request-URI Too Long: 请求的URI过长

请求的URI(通常为网址)过长,服务器无法处理

415 不支持媒体类型

请求的格式不受请求页面的支持

416 请求范围不符合要求

如果页面无法提供请求的范围,则服务器会返回此状态码

417 未满足期望值

服务器未满足“期望”请求标头字段的要求

(五) 5XX Server Error(服务器错误状态码)

表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错

500 Internal Server Error 服务器内部错误

服务器遇到错误,无法完成请求

501 Not Implemented 尚未实施

服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码

502 Bad Gateway 错误网关

服务器作为网关或代理,从上游服务器无法收到无效响应

503 Service Unavailable 服务器不可用

服务器目前无法使用(由于超载或者停机维护)。通常,这只是暂时状态

504 网关超时

服务器作为网关代理,但是没有及时从上游服务器收到请求

505 HTTP版本不受支持

服务器不支持请求中所用的HTTP协议版本

https://juejin.im/entry/586b5b7dac502e12d62b4f33

https://juejin.im/post/5e76bd516fb9a07cce750746#heading-10

原文地址:https://www.cnblogs.com/zengbin13/p/13336204.html