【面试八股总结】超文本传输协议HTTP(一)

参考资料 :小林Coding、阿秀、代码随想录

一、 什么是HTTP协议?

HTTP是超文本传输协议 HyperText Transfer Protocol

特性:

  • 简单、灵活、易于扩展
  • 无状态:服务器不会记忆HTTP状态
  • 不安全通信使用明文,不验证通信方身份,无法的证明报文的完整性(可能被篡改)

二、 HTTP报文

1. HTTP请求报文

  • Request Line 请求行:请求方法URL HTTP协议版本号
  • Request Headers 请求头:包含请求的附加信息,由key:value组成
  • 空 行:分隔请求头和请求体
  • Request Body 请求体:承载多个请求参数的数据(可选)

2. HTTP响应报文

  • Status Line 状态⾏:HTTP协议版本 状态码 状态消息
  • Response Headers 响应头:以键值对的形式提供的额外信息
  • 空 行
  • Response Body 响应体:体包含服务器返回给客户端的实际数据

三、 HTTP请求方法

HTTP1.0 定义了三种请求⽅法: GET, POST 和 HEAD⽅法。

HTTP1.1 新增了六种请求⽅法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT ⽅法

方法 描述
GET 请求指定的⻚⾯信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(eg.提交表单/上传文件),数据包含在请求体中。 POST请求可能导致新的资源建立/已有资源的改变。
HEAD 类似于GET,但返回相应中没有具体资源,用于获取情报头。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定页面。
CONNECT HTTP1.1 协议中预留给能够将连接改为管道方式的代理服务器,用于代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
PATCH 对PUT方法的补充,用于对已知资源进行局部更新。

GET和POST有什么区别?

| | GET | POST |
| 概念 | 获取数据,不影响服务器 | 修改数据,会影响服务器 |
| 参数传递 | GET请求参数一般写在URL中,所以GET传送的数据量一般较小,不能大于2K,且只接受ASCII字符。 | POST请求参数一般放在请求体中,其请求信息没有长度限制和数据类型限制。 |
| 请求报文 | GET将请求的数据放在URL上,以?分割URL和传输数据,参数以&相连 | POST将数据放在HTTP的请求体内 |
| 安全 | 安全,因为GET为只读操作,不会对服务器数据产生影响。 | 不安全,POST方法会修改服务器上资源。 |
| 幂等 | 幂等,每次GET都不会改变服务器资源。 | 不幂等,多次提交数据会创建多个资源。 |
| 缓存机制 | GET请求会被浏览器主动缓存,请求参数也被完整保留在浏览器历史记录中,且在浏览器中 GET 请求可以保存为书签。 | POST不会被浏览器主动缓存,参数也不会被保留,也不能把POST请求作为书签。 |
| 时间消耗 | GET产生一个TCP数据包:浏览器会把Header和Data一并发送出去,服务器相应200(返回数据) | POST产生两个TCP数据包:浏览器先发送Header,服务器响应100 continue,浏览器再发送Data,服务器响应200 ok(返回数据) |

编码方式 只能进行URL编码 支持多种编码方式

补充说明:

1)HTTP协议没有Body和URL的长度限制,对URL限制的大多是浏览器和服务器的原因。

2)安全:HTTP协议中,安全是指请求方法不会破坏服务器上的资源。

3)幂等:多次执行相同的操作,结果都相同。一次和多次请求某一个资源应该具有相同的作用,

四、 HTTP状态码

| 状态码分类 | 具体🌰 | 含义 |
| 1xx 信息 | 100 Continue | 表明到⽬前为⽌都很正常,客户端可以继续发送请求或者忽略这个响应。 |
| 2xx 成功 | 200 OK | 最常见的成功状态码,表示一切正常。如果是非 HEAD请求,服务器返回的响应头都会有 body 数据。 |
| 2xx 成功 |
| 2xx 成功 |
|-------------------------|------------------------------------------------------------------------------------------------------------------|----------------------------------------------------|
| 204 No Content | 请求已经成功处理,但是返回的响应报⽂不包含实体的主体部分。⼀般在只需要从客户端 往服务器发送信息,⽽不需要返回数据时使⽤。 |
| 206 Partial Content | 表示客户端进⾏了范围请求,响应报⽂包含由 Content-Range 指定范围的实体内 容。 |
| 302 Found | 临时性重定向 |
| 303 See Other | 和 302 有着相同的功能,但是 303 明确要求客户端应该采⽤ GET ⽅法获取资源。 |
| 304 Not Modified | 如果请求报⽂⾸部包含⼀些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满⾜条件,则服务器会返回 304 状态码。 |
| 307 Temporary Redirect | 临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST ⽅法改成 GET ⽅法。 |
| 401 Unauthorized | 该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已 进⾏过⼀次请求,则表示⽤户认证失败。 |
| 403 Forbidden | 请求被拒绝。 |
| 404 Not Found | 请求的资源在服务器上不存在或未找到,所以无法提供给客户端。 |
| 501 Not Implemented | 客户端请求的功能还不支持。 |
| 502 Bad Gateway | 服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。 |
| 503 Service Unavailable | 服务器暂时处于超负载或正在进⾏停机维护,现在⽆法处理请求。 |

五、 HTTP常见字段

分类 字段名称 含义
通⽤头部字段General Headers Cache-Control 指定缓存策略
通⽤头部字段General Headers Connection 控制连接的⾏为
通⽤头部字段General Headers Date 指定⽇期和时间
请求头部字段Request Headers Accept 指定客户端能够接受的响应的MIME类型
请求头部字段Request Headers Accept-Encoding 指定客户端⽀持的内容编码⽅式
请求头部字段Request Headers Authorization ⽤于进⾏身份验证的凭据
请求头部字段Request Headers Host 指定请求的⽬标主机和端⼝
请求头部字段Request Headers User-Agent 标识客户端的⽤户代理(浏览器或其他⼯具)
响应头部字段 Response Headers Content-Length 服务器返回数据时,带有该字段,表示回应的数据长度
响应头部字段 Response Headers Content-Type 服务器回应时,告诉客户端本次数据的格式
响应头部字段 Response Headers Content-Enconding 服务器返回的数据使用了什么压缩格式
相关推荐
程序员-珍1 小时前
虚拟机ip突然看不了了
linux·网络·网络协议·tcp/ip·centos
邵泽明2 小时前
面试知识储备-多线程
java·面试·职场和发展
4647的码农历程2 小时前
Linux网络编程 -- 网络基础
linux·运维·网络
向李神看齐2 小时前
RTSP协议讲解
网络
Death2002 小时前
使用Qt进行TCP和UDP网络编程
网络·c++·qt·tcp/ip
魏大橙3 小时前
linux RCE本地/公网测试
网络·网络协议·udp
l1x1n03 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
陈逸轩*^_^*3 小时前
Java 网络编程基础
java·网络·计算机网络
夜流冰3 小时前
工具方法 - 面试中回答问题的技巧
面试·职场和发展
l1x1n04 小时前
网络安全概述:从认知到实践
网络