HTTP协议
1、HTTP标头(header)
HTTP 标头是用于 HTTP 请求或响应的字段,它传递关于请求或者响应的额外上下文和元数据。例如,请求消息可以使用标头表明它首选的媒体格式,而响应可以使用标头表明返回主体的媒体格式。标头是不区分大小写,开始于行首,后面紧跟着一个 ':'
和与之相关的值。字段值在一个换行符(CRLF)前或者整个消息的末尾结束。
带有一个标头的基本请求
GET /example.html HTTP/1.1
Host: example.com
2、实体报头
实体报头是描述了一个 HTTP 消息有效载荷(即关于消息主体的元数据)的 HTTP 报头,见 HTTP header。实体报头包括 Content-Length
、Content-Language
、Content-Encoding
、Content-Type
和 Expires
等。实体报头可能同时存在于 HTTP 请求和响应信息中。
尽管实体报头既非请求或响应报头,(由于它经常出现在请求头或响应头中)它们通常包含于此类概念中。
在下面的例子中,Content-Length
是实体报头,而 Host
和 User-Agent
是请求报头。
POST /myform.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Content-Length: 128
3、MIME type
MIME type (现在称为“媒体类型 (media type)”,但有时也是“内容类型 (content type)”)是指示文件类型的字符串,与文件一起发送(例如,一个声音文件可能被标记为 audio/ogg
,一个图像文件可能是 image/png
)。它与传统 Windows 上的文件扩展名有相同目的。
4、常见HTTP标头
-
Accept
Accept
请求头用来告知(服务器)客户端可以处理的内容类型,这种内容类型用MIME 类型来表示。借助内容协商机制, 服务器可以从诸多备选项中选择一项进行应用,并使用Content-Type
应答头通知客户端它的选择。Accept: <MIME_type>/<MIME_subtype> Accept: <MIME_type>/* Accept: */*
-
Accept-Charset:用来告知(服务器)客户端可以处理的字符集类型
Accept-Charset: <charset>
-
Accept-Encoding: 将客户端能够理解的内容编码方式(通常是某种压缩算法)通知给服务端
Accept-Encoding: gzip Accept-Encoding: compress Accept-Encoding: deflate Accept-Encoding: br Accept-Encoding: identity Accept-Encoding: *
-
Accept-Language: 客户端声明可以理解的自然语言
Accept-Language: <language> Accept-Language: *
-
Accept-Patch:服务器使用,通知浏览器请求的媒体类型(media-type)可以被服务器理解
Accept-Patch: application/example, text/example Accept-Patch: text/example;charset=utf-8 Accept-Patch: application/merge-patch+json
-
跨域相关header
- 响应头
Access-Control-Allow-Credentials
响应头用于在请求要求包含 credentials(Request.credentials
的值为include
)时,告知浏览器是否可以将对请求的响应暴露给前端 JavaScript 代码。Access-Control-Allow-Credentials: true
响应首部
Access-Control-Allow-Headers
用于 preflight request(预检请求)中,列出了将会在正式请求的Access-Control-Request-Headers
字段中出现的首部信息。Access-Control-Allow-Headers: <header-name>[, <header-name>]* Access-Control-Allow-Headers: *
响应首部
Access-Control-Allow-Methods
在对 preflight request.(预检请求)的应答中明确了客户端所要访问的资源允许使用的方法或方法列表。Access-Control-Allow-Methods: <method>, <method>, ...
Access-Control-Allow-Origin
响应标头指定了该响应的资源是否被允许与给定的来源(origin)共享。Access-Control-Allow-Origin: * Access-Control-Allow-Origin: <origin> Access-Control-Allow-Origin: null
响应标头
Access-Control-Expose-Headers
允许服务器指示那些响应标头可以暴露给浏览器中运行的脚本,以响应跨源请求。Access-Control-Expose-Headers: [<header-name>[, <header-name>]*] Access-Control-Expose-Headers: *
The
Access-Control-Max-Age
这个响应头表示 preflight request (预检请求)的返回结果(即Access-Control-Allow-Methods
和Access-Control-Allow-Headers
提供的信息)可以被缓存多久。Access-Control-Max-Age: <delta-seconds>
- 请求头
请求头
Access-Control-Request-Headers
出现于 preflight request(预检请求)中,用于通知服务器在真正的请求中会采用哪些请求头。Access-Control-Request-Headers: <header-name>, <header-name>, ...
请求头
Access-Control-Request-Method
出现于 preflight request(预检请求)中,用于通知服务器在真正的请求中会采用哪种 HTTP 方法。因为预检请求所使用的方法总是OPTIONS
,与实际请求所使用的方法不一样,所以这个请求头是必要的。Access-Control-Request-Method: <method>
-
Content-Encoding
Content-Encoding
列出了对当前实体消息(消息荷载)应用的任何编码类型,以及编码的顺序。它让接收者知道需要以何种顺序解码该实体消息才能获得原始荷载格式。Content-Encoding: gzip Content-Encoding: compress Content-Encoding: deflate Content-Encoding: br
-
Content-Languare
Content-Language
是一个 entity header(实体消息首部),用来说明访问者希望采用的语言或语言组合,这样的话用户就可以根据自己偏好的语言来定制不同的内容。举个例子,假如设置了这样一条消息首部( “
Content-Language: de-DE
” ),那么说明这份文件是为说德语的人提供的(当然这并不意味着文件本身就是用德语写的。比如,它可能是为说德语的人开设的英语教程的一部分,也就是用英语写的)。 -
Content-Length
Content-Length
是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。Content-Length: <length>
-
Content-Type
Content-Type
实体头部用于指示资源的 MIME 类型 media type 。Content-Type: text/html; charset=utf-8 Content-Type: multipart/form-data; boundary=something
-
Cookie
Cookie
是一个 HTTP 请求标头,其中含有先前由服务器通过Set-Cookie
标头投放或通过 JavaScript 的Document.cookie
方法设置,然后存储到客户端的 HTTP cookie 。Cookie: <cookie-list> Cookie: name=value Cookie: name=value; name2=value2; name3=value3
-
Host
Host 请求头指明了请求将要发送到的服务器主机名和端口号。
Host: <host>:<port>
-
Referer
Referer
请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用Referer
请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。Referer: <url>
5、HTTP请求方法
-
CONNECT
HTTP
CONNECT
方法可以开启与所请求资源之间的双向沟通的通道。它可以用来创建隧道(tunnel)。 -
DELETE
HTTP
DELETE
请求方法用于删除指定的资源。 -
GET
HTTP
GET
方法请求指定资源的表示。使用GET
的请求应该只用于请求数据,而不应该包含数据。 -
POST
HTTP
POST
方法发送数据给服务器。请求主体的类型由Content-Type
标头指定。 -
PUT
HTTP
PUT
请求方法创建一个新的资源或用请求的有效载荷替换目标资源的表示。PUT
与POST
方法的区别是,PUT
方法是幂等的:调用一次与连续调用多次效果是相同的(即没有副作用),而连续调用多次相同的POST
方法可能会有副作用,比如多次提交同一订单。
6、HTTP响应状态码
-
100 Continue
HTTP
100 Continue
信息型状态响应码表示目前为止一切正常,客户端应该继续请求,如果已完成请求则忽略。 -
200 OK
状态码
200 OK
表明请求已经成功。默认情况下状态码为 200 的响应可以被缓存。 -
404 Not Found
HTTP 响应状态码
404 Not Found
指的是服务器无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。 -
500 Internal Server Error
在 HTTP 协议中,
500 Internal Server Error
是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。