HTTP 专题

发布时间: 更新时间: 总字数:1076 阅读时间:3m 作者: 分享 复制网址

超文本传输​​协议(HTTP) 是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的。

介绍

HTTP(HyperText Transfer Protocol,超文本传输协议) 是互联网使用的核心协议,是所有的Web应用程序的通信协议。

说明:

  • HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应
  • 传输层使用有状态的TCP传输,HTTP协议本身无状态,可使用 Web 服务中 Session 和 Cookie 记录状态

URI & URL

  • 统一资源标识符(Uniform Resource Identifier, URI) 一个用来标识某一互联网资源名称的字符串
  • 统一资源定位符(Uniform Resource Locator, URL) 一个用于标识和定位某一互联网资源名称的字符串,即我们经常说的网页地址

URL 组成

一般格式如下:

scheme:[subscheme]://[username:password@]host:port/path?query#fragment

说明:

  • Scheme 通信协议,一般为http、https、ftp等
    • subscheme 子协议(可选),一般用于区分不同数据库驱动协议
  • Host 服务器的域名或ip地址
  • Port 端口号(可选),http默认为80、https默认为443
  • Path 目录,由/分隔的字符串,表示具体的资源路径
  • Query:查询项(可选),和 Path 见使用 ? 分隔,多个用 & 隔开,参数的名和值用 = 隔开
  • Fragment 信息片段,用于指定网络资源中的某片断

示例:

http://user:pwd@baidu.com/login
ftp://user:pwd@127.0.0.1
telnet://user:pwd@127.0.0.1
ssh://user:pwd@127.0.0.1

# 数据库
jdbc:mysql://localhost:3306/test?user=root&password=pwd
jdbc:oracle:thin:@localhost:1521:test
jdbc:sqlserver://localhost:1433:DatabaseName=test

请求 request

Http 请求消息分为消息头和消息体。

<request info>\r\n
key1: value1\r\n
key2: value2\r\n
...
\r\n // 空行
<request body>

说明:

  • request info 组成:<method[GET|POST|PUT|...]> <url> <protocol[HTTP/1.0|HTTP/1.1|HTTP/2]>
  • Header 有键值对组成,一般包括:
    • Host
    • User-Agent
    • Referer 发出请求的原始 URL
    • Cookie

响应 response

<response info>\r\n
key1: value1\r\n
key2: value2\r\n
...
\r\n // 空行
<response body>

说明:

  • response info 组成:<protocol[HTTP/1.0|HTTP/1.1|HTTP/2]> <status code[20x|30x|40x|50x]> <status text[Accept|...]>
  • Header
    • Server web 服务器软件名称
    • Content-Type 消息体类型,浏览器解析使用
    • Content-Length 消息体的字节长度
    • Set-Cookie 设置 cookie 信息,后续再请求会带回该信息,一般存储状态信息

Multipart formposts

POST http://example.com/submit.cgi HTTP/1.1
Host: example.com
User-Agent: curl/7.46.0
Accept: */*
Content-Length: 313
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------fa163e399192a323

--------------------------fa163e399192a323
Content-Disposition: form-data; name="secret"; filename="file.txt"
Content-Type: text/plain

contents of the file
--------------------------fa163e399192a323--

说明:

  • Header
    • boundary 定义为 ------------------------fa163e399192a323
  • 空行
  • 开始符 "--" + boundary
    • --------------------------fa163e399192a323
  • Content-Disposition 定义基本信息,响应头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地
    • Content-Disposition: form-data
    • Content-Disposition: form-data; name="fieldName"
    • Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"
  • Content-Type: text/plain 定义文件格式
  • 空行
  • 文件内容
  • 结束符 "--" + boundary + "--"

HTTP 方法

  • GET 获取资源
  • POST 创建资源
  • PUT 修改资源
  • DELETE 删除资源
  • HEAD 检测资源是否存在
  • OPTIONS 请求服务器报告某一资源的 HTTP 方法,通常返回 Allow 消息头响应
  • CONNECT
  • TRACE 诊断

RPC vs HTTP

  • RPC 是一个完整的远程调用方案,包括:接口规范序列化/反序列化规范通信协议(如七层的HTTP、四层的TCP等)
  • HTTP 是一个通信协议,工作中 OSI 的第七层

示例

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数