HTTP状态码
| 1XX | 信息响应类,临时响应并需要请求者继续执行操作。 |
|---|---|
| 2XX | 处理成功响应类,请求成功。 |
| 3XX | 重定向响应类,为了完成指定的动作,必须接受进一步处理。 |
| 4XX | 客户端错误,客户请求包括语法错误或者是不能正确执行。 |
| 5XX | 服务端错误,服务器不能正确执行一个正确的请求。 |
1XX 信息
- 100 请求成功:这是个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝,客户端应当继续发送请求的剩余部分。如果请求已经完成,忽略这个响应。
- 101 协议切换:表示服务器应客户端升级协议的请求对协议进行切换。此机制始终由客户端发起,并且服务器可能接受或拒绝切换到新协议。客户端可使用常用的协议(如HTTP / 1.1)发起请求,请求说明需要切换到HTTP / 2或甚至到WebSocket。
102 继续处理:此代码旨在通过通知客户端服务器收到请求并对其进行处理来避免客户端出现超时错误。
2XX 成功
200 一切正常:这是当网页或资源完全按照预期方式运行时交付的代码。
- 201 创造:服务器完成了浏览器的请求,因此创建了一个新资源。
- 202 已接受:服务器已接受浏览器的请求,但仍在处理它。请求最终可能会也可能不会导致完整的响应。
- 203 非权威信息:使用代理时可能会出现此状态代码。这意味着代理服务器从源服务器收到了一个200“一切正常”的状态代码,但在将其传递给浏览器之前修改了响应。
- 204 没有内容:此代码表示服务器已成功处理请求,但不会返回任何内容。
- 205 重置内容:像204一样,这意味着服务器处理请求但不会返回任何内容。并且,它还要求浏览器重置文档视图。
-
3XX 重定向
300 多种选择:或提供操作列表供请求者选择。
- 301 永久移动: 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。。比如,我们访问 http://www.baidu.com 会跳转到 https://www.baidu.com,发送请求之后,就会返回 301 状态码,然后返回一个 location,提示新的地址,浏览器就会拿着这个新的地址去访问。注意: 301 请求是可以缓存的,即通过看 status code,可以发现后面写着 from cache。把网页的名称从 php 修改为了 html,也会发生永久重定向。
- 302 临时移动: 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。比如未登陆的用户访问用户中心重定向到登录页面。
- 303 查看其他位置: 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
- 304 未修改):自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
- 305 使用代理:请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
- 307 临时重定向: 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
301和302的区别:302 重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回 302,所以,搜索搜索引擎认为新的网址是暂时的。而 301 重定向是永久的重定向,搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址。
4XX 客户端错误
- 400 错误请求:服务器不理解请求的语法。
- 401 未授权:请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
- 403 禁止:服务器拒绝请求。
- 404 未找到:服务器找不到请求的网页。
- 405 方法禁用:禁用请求中指定的方法。
- 406 不接受:无法使用请求的内容特性响应请求的网页。
- 407 需要代理授权:此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
- 408 请求超时:服务器等候请求时发生超时。
- 409 冲突:服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
- 410 已删除:如果请求的资源已永久删除,服务器就会返回此响应。
- 411 需要有效长度:服务器不接受不含有效内容长度标头字段的请求。
- 412 未满足前提条件:服务器未满足请求者在请求中设置的其中一个前提条件。
- 413 请求实体过大:服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
- 414 请求的 URI 过长:请求的 URI(通常为网址)过长,服务器无法处理。
- 415 不支持的媒体类型:请求的格式不受请求页面的支持。
- 416 请求范围不符合要求:如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 未满足期望值:服务器未满足”期望”请求标头字段的要求。
5XX 服务器错误
500 服务器内部错误:服务器遇到错误,无法完成请求。
- 501 尚未实施:服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
- 502 错误网关:服务器作为网关或代理,从上游服务器收到无效响应。(应用层服务挂了)
- 503 服务不可用:服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
- 504 网关超时:服务器作为网关或代理,但是没有及时从上游服务器收到请求。应用层服务超时。
- 505 HTTP 版本不受支持:服务器不支持请求中所用的 HTTP 协议版本。
参考链接:https://blog.csdn.net/wei_gg/article/details/99552561
HTTP报文
1. 概述
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,每个字段的长度是不确定的。HTTP报文传过来的都是一堆的0x ASCII码,例如” 41 63 63 65 70 74”这段十六进制ASCII码串对应的是“accept” 单词。
HTTP报文分为请求报文和响应报文。
2. 请求报文
HTTP的请求报文由四部分组成:请求行(request line)、请求头部(header)、空行和请求数据(request data)
a. 请求行
请求方法
| 方法名称 | 方法作用 |
|---|---|
| GET | 请求从服务器获取资源。GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。 注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。 |
| POST | 用于将数据发送到服务器以创建或更新资源。POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。 |
| HEAD | 本质和get一样,但服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。 |
| PUT | PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。 注:在实际应用中,PUT 用到的比较少。而且,因为它与 POST 的语义、功能太过近似,有的服务器甚至就直接禁止使用 PUT 方法,只用 POST 方法上传数据。html表单不支持PUT。 |
| DELETE | DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。有可能被防火墙拦截,因为这个动作危险性太大,所以通常服务器不会执行真正的删除操作,而是对资源做一个删除标记。当然,更多的时候服务器就直接不处理 DELETE 请求。 |
| CONNECT | 要求服务器为客户端和另一台远程服务器建立一条特殊的连接隧道。 |
| OPTIONS | 获取http服务器支持的http请求方法,允许客户端查看服务器的性能。 |
| TRACE | 多用于对 HTTP 链路的测试或诊断,可以显示出请求 - 响应的传输路径。它的本意是好的,但存在漏洞,会泄漏网站的信息,所以 Web 服务器通常也是禁止使用。 |
URL
统一资源定位符(Uniform Resource Locator,缩写:URL),是对资源的引用和访问该资源的方法。俗称网址,就是浏览器地址栏里面的。
一个 URL 由以下不同的部分组成:
- 协议:通常是 https 或 http,一种告诉浏览器或者设备如何访问资源的方法,当然还有其他的协议,如 ftp 、mailto 或者 file。
- 主机名:表示 IP 地址的注册名称(域名) 或 IP 地址,用于识别连接到网络的设备的数字标识符。
- 端口号
- 路径:可以引用文件系统路径,通常作为一个代码段使用。
- 参数:以问号开头的可选查询参数,其中多个参数用 & 连接。
- hash:用于为页面上的标题提供快速链接,如锚点链接。
URI&URN
统一资源标志符(Uniform Resource Identifier,缩写:URI),提供了一种识别资源的方法。但与 URL 不同的是,URI 不提供定位所述资源的方法。
Uniform Resource Name 统一资源名称。
请求协议版本
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1。
HTTP1.0和HTTP1.1的区别:
- 长连接:在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
- 错误状态响应码:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
b. 请求头
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部通知服务器有关于客户端请求的信息。比较常见的有:
c. 空行
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。d. 请求数据
请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头部是Content-Type和Content-Length。3. 响应报文
HTTP响应报文由状态行(status line)、响应头部(headers)、空行(blank line)和响应数据(也叫响应体或响应正文)(response body)4个部分组成。
a. 状态行
状态行由3部分组成,分别为:协议版本、状态码、状态码描述。其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。
HTTP状态码
b. 响应头部
常见响应头部及描述如下:
c. 空行
响应头部的最后会有一个空行,表示响应头部结束,接下来为响应数据。与请求报文一致。d. 响应体
用于存放需要返回给客户端的数据信息。fiddler抓出来的一段HTTP响应数据是一段HTML。
参考链接:https://blog.csdn.net/m0_45861545/article/details/120835738
