HTTP协议概述

本文详细介绍了HTTP协议中的标头结构、实体报头如Content-Length和Content-Type的作用,MIME类型的概念,以及常见的HTTP请求方法和响应状态码,如200OK、404NotFound和500InternalServerError。
摘要由CSDN通过智能技术生成

HTTP协议

1、HTTP标头(header)

HTTP 标头是用于 HTTP 请求或响应的字段,它传递关于请求或者响应的额外上下文和元数据。例如,请求消息可以使用标头表明它首选的媒体格式,而响应可以使用标头表明返回主体的媒体格式。标头是不区分大小写,开始于行首,后面紧跟着一个 ':' 和与之相关的值。字段值在一个换行符(CRLF)前或者整个消息的末尾结束。

带有一个标头的基本请求

GET /example.html HTTP/1.1
Host: example.com

2、实体报头

实体报头是描述了一个 HTTP 消息有效载荷(即关于消息主体的元数据)的 HTTP 报头,见 HTTP header。实体报头包括 Content-LengthContent-LanguageContent-EncodingContent-TypeExpires 等。实体报头可能同时存在于 HTTP 请求和响应信息中。

尽管实体报头既非请求或响应报头,(由于它经常出现在请求头或响应头中)它们通常包含于此类概念中。

在下面的例子中,Content-Length 是实体报头,而 HostUser-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标头

  1. Accept

    Accept 请求头用来告知(服务器)客户端可以处理的内容类型,这种内容类型用MIME 类型来表示。借助内容协商机制, 服务器可以从诸多备选项中选择一项进行应用,并使用 Content-Type 应答头通知客户端它的选择。

    Accept: <MIME_type>/<MIME_subtype>
    Accept: <MIME_type>/*
    Accept: */*
    
  2. Accept-Charset:用来告知(服务器)客户端可以处理的字符集类型

    Accept-Charset: <charset>
    
  3. Accept-Encoding: 将客户端能够理解的内容编码方式(通常是某种压缩算法)通知给服务端

    Accept-Encoding: gzip
    Accept-Encoding: compress
    Accept-Encoding: deflate
    Accept-Encoding: br
    Accept-Encoding: identity
    Accept-Encoding: *
    
  4. Accept-Language: 客户端声明可以理解的自然语言

    Accept-Language: <language>
    Accept-Language: *
    
  5. Accept-Patch:服务器使用,通知浏览器请求的媒体类型(media-type)可以被服务器理解

    Accept-Patch: application/example, text/example
    Accept-Patch: text/example;charset=utf-8
    Accept-Patch: application/merge-patch+json
    
  6. 跨域相关header

    1. 响应头

    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-MethodsAccess-Control-Allow-Headers 提供的信息)可以被缓存多久。

    Access-Control-Max-Age: <delta-seconds>
    
    1. 请求头

    请求头 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>
    
  7. Content-Encoding

    Content-Encoding 列出了对当前实体消息(消息荷载)应用的任何编码类型,以及编码的顺序。它让接收者知道需要以何种顺序解码该实体消息才能获得原始荷载格式。

    Content-Encoding: gzip
    Content-Encoding: compress
    Content-Encoding: deflate
    Content-Encoding: br
    
  8. Content-Languare

    Content-Language 是一个 entity header(实体消息首部),用来说明访问者希望采用的语言或语言组合,这样的话用户就可以根据自己偏好的语言来定制不同的内容。

    举个例子,假如设置了这样一条消息首部( “Content-Language: de-DE” ),那么说明这份文件是为说德语的人提供的(当然这并不意味着文件本身就是用德语写的。比如,它可能是为说德语的人开设的英语教程的一部分,也就是用英语写的)。

  9. Content-Length

    Content-Length 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。

    Content-Length: <length>
    
  10. Content-Type

    Content-Type 实体头部用于指示资源的 MIME 类型 media type

    Content-Type: text/html; charset=utf-8
    Content-Type: multipart/form-data; boundary=something
    
  11. Cookie

    Cookie 是一个 HTTP 请求标头,其中含有先前由服务器通过 Set-Cookie 标头投放或通过 JavaScript 的 Document.cookie 方法设置,然后存储到客户端的 HTTP cookie

    Cookie: <cookie-list>
    Cookie: name=value
    Cookie: name=value; name2=value2; name3=value3
    
  12. Host

    Host 请求头指明了请求将要发送到的服务器主机名和端口号。

    Host: <host>:<port>
    
  13. Referer

    Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

    Referer: <url>
    

5、HTTP请求方法

  1. CONNECT

    HTTP CONNECT 方法可以开启与所请求资源之间的双向沟通的通道。它可以用来创建隧道(tunnel)。

  2. DELETE

    HTTP DELETE 请求方法用于删除指定的资源。

  3. GET

    HTTP GET 方法请求指定资源的表示。使用 GET 的请求应该只用于请求数据,而不应该包含数据。

  4. POST

    HTTP POST 方法发送数据给服务器。请求主体的类型由 Content-Type 标头指定。

  5. PUT

    HTTP PUT 请求方法创建一个新的资源或用请求的有效载荷替换目标资源的表示。

    PUTPOST 方法的区别是,PUT 方法是幂等的:调用一次与连续调用多次效果是相同的(即没有作用),而连续调用多次相同的 POST 方法可能会有副作用,比如多次提交同一订单。

6、HTTP响应状态码

  1. 100 Continue

    HTTP 100 Continue 信息型状态响应码表示目前为止一切正常,客户端应该继续请求,如果已完成请求则忽略。

  2. 200 OK

    状态码 200 OK 表明请求已经成功。默认情况下状态码为 200 的响应可以被缓存。

  3. 404 Not Found

    HTTP 响应状态码 404 Not Found 指的是服务器无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。

  4. 500 Internal Server Error

    在 HTTP 协议中,500 Internal Server Error 是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。

    这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值