HTTP(Hyper Text Transfer Protocol(超文本传输协议))是一个简单的请求-响应协议,它通常运行在 TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCII 码形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP 是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP 是一种协议规范,这种规范记录在文档上,为真正通过 HTTP 协议进行通信的 HTTP 的实现程序。HTTP 协议是基于 C/S 架构进行通信的,而 HTTP 协议的服务器端实现程序有 httpd、nginx 等,其客户端的实现程序主要是 Web 浏览器。
- HTTP 是一种无状态协议,即对于事务处理没有记忆能力,服务器不保留与客户交易时的任何状态,如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
- HTTP 是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。
- HTTP 规范定义了 9 种请求方法:get、post、delete、put、head、trace、options、patch、connect。
- 默认端口 80
客户端发送一个 HTTP 请求消息包括以下格式:请求行(request line)、请求头部(header)、空行、请求数据。
例如:
xml.open("POST", "1.php", true); //请求行
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //请求头部
xml.send("name=123&age=27"); //请求数据
HTTP 响应状态行、消息报头、空行和响应正文。
例如:
HTTP/1.1 200 OK // 状态行
X-Powered-By: Express // 消息报头
date: Wed, 11 Sep 2019 02:37:31 GMT // 消息报头
content-type: application/json;charset=UTF-8 // 消息报头
transfer-encoding: chunked // 消息报头
connection: close
HTTP 响应头:
- Allow 服务器支持哪些请求方法(如 GET、POST 等)。
- Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到 Content-Type 头指定的内容类型。利用 gzip 压缩文档能够显著地减少 HTML 文档的下载时间。
- Content-Length 表示内容长度。只有当浏览器使用持久 HTTP 连接时才需要这个数据。
- Content-Type 表示后面的文档属于什么 MIME 类型。Servlet 默认为 text/plain,但通常需要显式地指定为 text/html(
content-type:text/xml; charset= utf-8
)。 - Date 当前的 GMT 时间
- Expires 应该在什么时候认为文档已经过期,从而不再缓存它
- Last-Modified 文档的最后改动时间
- Location 表示客户应当到哪里去提取文档
- Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计
- Server 服务器名字
- Set-Cookie 设置和页面关联的 Cookie
- WWW-Authenticate 客户应该在 Authorization 头中提供什么类型的授权信息
HTTP 状态码
常见:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它 URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
5 种分类:
-
1** 信息,服务器收到请求,需要请求者继续执行操作
1)100 Continue 继续。客户端应继续其请求
2)101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议 -
2** 成功,操作被成功接收并处理
1)200 OK 请求成功。一般用于 GET 与 POST 请求
2)201 Created 已创建。成功请求并创建了新的资源
3)202 Accepted 已接受。已经接受请求,但未处理完成
4)203 Non-Authoritative Information 非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本
5)204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
6)205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
7)206 Partial Content 部分内容。服务器成功处理了部分 GET 请求 -
3** 重定向,需要进一步的操作以完成请求
1)300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
2)301 Moved Permanently 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替
3)302 Found 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI
4)303 See Other 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看
5)304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
6)305 Use Proxy 使用代理。所请求的资源必须通过代理访问
7)306 Unused 已经被废弃的 HTTP 状态码
8)307 Temporary Redirect 临时重定向。与 302 类似。使用 GET 请求重定向 -
4** 客户端错误,请求包含语法错误或无法完成请求
1)400 Bad Request 客户端请求的语法错误,服务器无法理解
2)401 Unauthorized 请求要求用户的身份认证
3)402 Payment Required 保留,将来使用
4)403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
5)404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
6)405 Method Not Allowed 客户端请求中的方法被禁止
7)406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
8)407 Proxy Authentication Required 请求要求代理的身份认证,与 401 类似,但请求者应当使用代理进行授权
9)408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
10)409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
11)410 Gone 客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置
12)411 Length Required 服务器无法处理客户端发送的不带 Content-Length 的请求信息
13)412 Precondition Failed 客户端请求信息的先决条件错误
14)413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息
15)414 Request-URI Too Large 请求的 URI 过长(URI 通常为网址),服务器无法处理
16)415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
17)416 Requested range not satisfiable 客户端请求的范围无效
18)417 Expectation Failed 服务器无法满足 Expect 的请求头信息
- 5** 服务器错误,服务器在处理请求的过程中发生了错误
1)500 Internal Server Error 服务器内部错误,无法完成请求
2)501 Not Implemented 服务器不支持请求的功能,无法完成请求
3)502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
4)503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的 Retry-After 头信息中
5)504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
6)505 HTTP Version not supported 服务器不支持请求的 HTTP 协议的版本,无法完成处理
本面试题为前端常考面试题,后续有机会继续完善。我是歌谣,一个沉迷于故事的讲述者。
欢迎一起私信交流。