欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HTTP 指南

程序员文章站 2022-07-10 17:04:08
...

HTTP 指南

HTTP 规范是我们在开发 Web 相关工程是应该要遵守的,这里记录下我觉得常用的基础知识和常见用法。

0 HTTP 简介

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种基于TCP/IP 通信协议来传递数据的网络传输协议,所有的 WWW 文件都必须遵守这个标准。HTTP 默认端口号为 80。

HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 内容类型。

HTTP 是无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1 HTTP Request Method

HTTP 1.0 定义了三种请求方法:GET, POST 和 HEAD方法。HTTP 1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET  
请求指定的页面信息,并返回实体主体。

HEAD  
类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头

POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。

PUT
从客户端向服务器传送的数据取代指定的文档的内容。

DELETE
请求服务器删除指定的页面。

CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS
允许客户端查看服务器的性能。

TRACE
回显服务器收到的请求,主要用于测试或诊断。

2 HTTP Request Header

Allow
服务器支持哪些请求方法(如GET、POST等)。

Content-Encoding
文档的编码(Encode)方法。只有在解码之后才可以得到 Content-Type 头指定的内容类型,利用gzip压缩文档能够显著地减少HTML文档的下载时间

Content-Length
表示内容长度。只有当浏览器使用持久 HTTP 连接时才需要这个数据 

Content-Type
表示后面的文档属于什么 MIME 类型 

Date
当前的 GMT 时间 

Expires
应该在什么时候认为文档已经过期,从而不再缓存它 

Last-Modified
文档的最后改动时间。客户可以通过 If-Modified-Since 请求头提供一个日期,该请求将被视为一个条件 GET,只改动时间迟于指定时间的文档才会返回,否则返回一个 304(Not Modified) 状态 

Location
表示客户应当到哪里去提取文档 

Refresh
表示浏览器应该在多少时间之后刷新文档,以秒计

注意:这种功能通常是通过设置 HTML 页面 HEAD 区的 <META HTTP-EQUIV=”Refresh” CONTENT=”5;URL=http://host/path">实现

注意:Refresh 的意义是”N秒之后刷新本页面或访问指定页面”,而不是”每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV=”Refresh” …>。 

注意 Refresh 头不属于 HTTP 1.1 正式规范的一部分,而是一个扩展 

Server
服务器名字 

Set-Cookie
设置和页面关联的 Cookie 

WWW-Authenticate
客户应该在 Authorization 头中提供什么类型的授权信息?在包含401(Unauthorized) 状态行的应答中这个头是必需的 

3 HTTP Content Type

用来向浏览器和服务器提供信息,表示该 URL 对应的资源类型,应该匹配好,不要挂羊头卖狗肉

注:这里只列出比较常见的

文件后缀                 Content-Type(Mime-Type)

.css                     text/css
.gif                     image/gif
.htm                     text/html
.html                    text/html
.jpeg                    image/jpeg
.jpg                     image/jpeg
.js                      application/x-javascript
.ico                     image/x-icon
.mp3                     audio/mp3
.mp4                     video/mpeg4
.mpeg                    video/mpg
.mpg                     video/mpg
.pdf                     application/pdf
.png                     image/png
.tif                     image/tiff
.tiff                    image/tiff
.torrent                 application/x-bittorrent
.wav                     audio/wav
.xhtml                   text/html

4 HTTP Status Code

无论是返回 HTML 还是 API 响应,我们都应该尽可能遵从 HTTP 状态码规范,没有必要自己再搞一套。简单来说,HTTP 状态码包含三个十进制数字,第一个数字是类别,后俩是编号,一共有五个大类。

注:加粗的为常用的状态码

1XX 信息

服务器收到请求,需要请求者继续执行操作

100 Continue
继续。客户端应继续其请求 

101 Switching Protocols
切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议

2XX 成功

操作被成功接收并处理

200 OK
请求成功。一般用于 GET 与 POST 请求 

201 Created
已创建。成功请求并创建了新的资源 

202 Accepted
已接受。已经接受请求,但未处理完成 

203 Non-Authoritative Information
非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本 

204 No Content
无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 

205 Reset Content
重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 

206 Partial Content
部分内容。服务器成功处理了部分GET请求 

3XX 重定向

需要进一步的操作以完成请求

300 Multiple Choices
多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 

301 Moved Permanently
永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新URI。今后任何    新的请求都应使用新的URI代替 

302 Found
临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI 

303 See Other
查看其它地址。与 301 类似。使用 GET 和 POST 请求查看 

304 Not Modified
未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 

305 Use Proxy
使用代理。所请求的资源必须通过代理访问 

306 Unused
已经被废弃的HTTP状态码 

307 Temporary Redirect
临时重定向。与 302 类似。使用 GET 请求重定向 

4XX 客户端错误

请求包含语法错误或无法完成请求

400 Bad Request
客户端请求的语法错误,服务器无法理解 

401 Unauthorized
请求要求用户的身份认证 

402 Payment Required
保留,将来使用 

403 Forbidden
服务器理解请求客户端的请求,但是拒绝执行此请求 

404 Not Found
服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置”您所请求的资源无法找到”的个性页面 

405 Method Not Allowed
客户端请求中的方法被禁止 

406 Not Acceptable
服务器无法根据客户端请求的内容特性完成请求 

407 Proxy Authentication Required
请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 

408 Request Time-out
服务器等待客户端发送的请求时间过长,超时 

409 Conflict
服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 

410 Gone
客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置 

411 Length Required
服务器无法处理客户端发送的不带 Content-Length 的请求信息 

412 Precondition Failed
客户端请求信息的先决条件错误 

413 Request Entity Too Large
由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息 

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

415 Unsupported Media Type
服务器无法处理请求附带的媒体格式 

416 Requested range not satisfiable
客户端请求的范围无效 

417 Expectation Failed 

5XX 服务器端错误

服务器在处理请求的过程中发生了错误

500 Internal Server Error
服务器内部错误,无法完成请求 

501 Not Implemented
服务器不支持请求的功能,无法完成请求 

502 Bad Gateway
充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 

503 Service Unavailable
由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 

504 Gateway Time-out
充当网关或代理的服务器,未及时从远端服务器获取请求 

505 HTTP Version not supported
服务器不支持请求的HTTP协议的版本,无法完成处理 
相关标签: http协议