前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员必须要了解的网络协议HTTP,也许你只了解其中一部分

程序员必须要了解的网络协议HTTP,也许你只了解其中一部分

作者头像
IT大咖说
发布2019-08-06 11:01:12
6430
发布2019-08-06 11:01:12
举报
文章被收录于专栏:IT大咖说IT大咖说

一、概念

URI

URI 包含 URL 和 URN

二、HTTP 方法

客户端发送的请求报文第一行为请求行,包含了方法字段。

GET

获取资源,当前网络请求中,绝大部分使用的是 GET 方法。

HEAD

获取报文首部 和GET 方法类似,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。

POST

传输实体主体 ,POST 主要用来传输数据,而 GET 主要用来获取资源。

PUT

上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

PATCH

对资源进行部分修改,PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。

DELETE

删除文件,与PUT功能相反,并且同样不带验证机制。

DELETE /test.html HTTP/1.1

OPTIONS

查询支持的方法,查询指定的 URL 能够支持的方法。会返回 `Allow: GET, POST, HEAD, OPTIONS` 这样的内容。

CONNECT

要求在与代理服务器通信时建立隧道使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

TRACE

追踪路径,服务器会将通信路径返回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

三:HTTP 状态码

服务器返回的响应报文中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。

1XX | Informational(信息性状态码) | 接收的请求正在处理 |

2XX | Success(成功状态码) | 请求正常处理完毕 |

3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |

4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |

5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |

1XX 信息

100 Continue:表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

2XX 成功

200 OK:请求服务器成功

204 No Content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。

3XX 重定向

301 Moved Permanently:永久性重定向

302 Found:临时性重定向

303 See Other:和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

304 Not Modified:如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。

307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。

4XX 客户端错误

400 Bad Request :请求报文中存在语法错误。

401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。

403 Forbidden :请求被拒绝。

404 Not Found:服务没找到

5XX 服务器错误

500 Internal Server Error :服务器正在执行请求时发生错误。

503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

四:Cookie

HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 Cookie 来保存状态信息。

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。

Cookie 曾一度用于客户端数据的存储,因为当时并没有其它合适的存储办法而作为唯一的存储手段,但现在随着现代浏览器开始支持各种各样的存储方式,Cookie 渐渐被淘汰。新的浏览器 API 已经允许开发者直接将数据存储到本地,如使用 Web storage API(本地存储和会话存储)或 IndexedDB。

1. 用途

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)

个性化设置(如用户自定义设置、主题等)

浏览器行为跟踪(如跟踪分析用户行为等)

2. 创建过程

服务器发送的响应报文包含 Set-Cookie 首部字段,客户端得到响应报文后把 Cookie 内容保存到浏览器中。

HTTP/1.0 200 OK

Content-type: text/html

Set-Cookie: test_cookie=test

Set-Cookie: user_cookie=fhwekflashfkas

客户端之后对同一个服务器发送请求时,会从浏览器中取出 Cookie 信息并通过 Cookie 请求首部字段发送给服务器。

GET /index.html HTTP/1.1

Host: www.test.com

Cookie: user_cookie=fhwekflashfkas; test_cookie=test

3.分类

会话期 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。

持久性 Cookie:指定过期时间(Expires)或有效期(max-age)之后就成为了持久性的 Cookie。

Set-Cookie: id=rewrw; Expires=Wed, 21 Oct 2019 07:28:00 GMT;

4.作用域

Domain 标识指定了哪些主机可以接受 Cookie。如果不指定,默认为当前文档的主机(不包含子域名)。如果指定了 Domain,则一般包含子域名。例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如 developer.mozilla.org)。

Path 标识指定了主机下的哪些路径可以接受 Cookie(该 URL 路径必须存在于请求 URL 中)。以字符 %x2F ("/") 作为路径分隔符,子路径也会被匹配。例如,设置 Path=/docs,则以下地址都会匹配:

/docs

/docs/Web/

/docs/Web/HTTP

5.JavaScript

浏览器通过 `document.cookie` 属性可创建新的 Cookie,也可通过该属性访问非 HttpOnly 标记的 Cookie。

document.cookie = "test_cookie=test";

document.cookie = "user_cookie=fhwekflashfkas";

6.HttpOnly

标记为 HttpOnly 的 Cookie 不能被 JavaScript 脚本调用。跨站脚本攻击 (XSS) 常常使用 JavaScript 的 `document.cookie` API 窃取用户的 Cookie 信息,因此使用 HttpOnly 标记可以在一定程度上避免 XSS 攻击。

Set-Cookie: id=rewrw; Expires=Wed, 21 Oct 2019 07:28:00 GMT; Secure; HttpOnly

7.Secure

标记为 Secure 的 Cookie 只能通过被 HTTPS 协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其固有的不安全性,Secure 标记也无法提供确实的安全保障。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档