跳至主要內容

HTTP

naijoug大约 4 分钟

Hyper Text Transfer Protocol,超文本传输协议

TCP 默认端口 : 80

reference

concept

  • URL

    Uniform Resource Locator (统一资源定位器)

    语法规则 : scheme://host.domain:port/path/filename

    • scheme : 定义网络服务类型
      • http : 超文本传输协议,普通网页。
      • https : 安全超文本传输协议,安全加密网页。
      • ftp : 文件传输协议,文件上传或下载。
      • file : 访问本机文件。
    • host : 定义主机域 (http默认主机域 : www)
    • domain : 域名 (google.com)
    • port : 主机端口号 (http默认端口号 : 80)
    • path : 资源在中服务器路径
    • filename : 资源名称
  • URL Encoding

    URL只能使用ASCII字符集来通过英特网进行发送。

    URL中包含的ASCII之外的字符,需要转化为ASCII格式。

    • ASCII字符 : 转化为% + 两位十六进制数
    • 空格 : 使用+替换
  • HTTP 字段信息

    字段含义说明
    Header请求头HTTP客户程序(浏览器),向服务器发送请求的时候必须指明请求类型,一般是GET或者POST
    Content-Type内容类型一般是指网页中存在的Content-Type,用于定义网络文件或网络请求的类型
    Content-Length内容长度表示请求消息正文的长度
    Authorization授权信息
    Cookie在服务端生成,发送给客户端,客户端会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器。在浏览器中非常重要,主要应用于用户登录和购物车等,移动应用开发不建议使用
    User-Agent浏览器类型服务器可以根据浏览器的类型选择推送不同的内容给客户端
  • HTTP 请求方式

    方法名说明
    GET获取指定资源
    POST向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源
    HEAD获取指定资源头部信息
    PUT替换指定资源(不支持浏览器操作)
    DELETE删除指定资源
    OPTIONS允许客户端查看服务器的性能
    TRACE回显服务器收到的请求,主要用于测试或诊断
    CONNECT预留给能够将连接改为管道方式的代理服务器(HTTP代理使用)
  • Content-Type 类型

    Content-Type浏览器支持说明
    application/x-www-form-urlencoded提交的数据按照key1=val1&key2=val2的方式进行编码
    multipart/form-data采用这种方式上传文件(支持二进制文件)
    application/json×表明服务端消息主体是序列化后的JSON字符串
    text/xml×文本
  • 网络请求状态码

    状态码说明
    1xx代表临时响应,需要请求者继续执行操作的状态代码。
    2xx代表的多是操作成功。
    200请求成功
    3xx代表重定向,表示要完成请求,需要进一步操作
    4xx代表请求错误,表示请求可能出错,妨碍了服务器的处理。
    404NotFound
    5xx代表服务器错误,表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
    500服务器内部错误

GET vs POST

幂等性 : 同一方法执行多次和执行一次效果相同

类型参数位置参数长度幂等性缓存性
GET以 ? 拼接最长 2048 字符幂等可缓存
POST请求体内没有限制不幂等不可缓存

HTTP 常见报文

abbrfulldescription
SYNsynchronize同步报文,用于建立连接
ACKacknowledge确认报文,用于确认已接收
FINfinish传输完成报文,用于结束连接
RSTreset重置报文,用于重置连接
PSHpush推送报文,用于直接将数据推送给接收端,而不是先放在缓存区
URGurgent紧急报文,用于传输紧急数据,接收端会优先处理该数据

“三次握手” - 创建连接

  • 客户端发给服务端 SYN 报文 => (服务端: 客户端的发送功能正常)
  • 服务端接受 SYN 报文之后,给客户端发送 SYN+ACK 报文 => (客户端: 服务端接受、发送功能正常)
  • 客户端收到 SYN+ACK 报文之后,给服务度发送 ACK 报文 => (服务单: 客户端接受功能正常)

三次握手的核心点 : 开始数据通信前,确认双方发送和接受功能是否都正常。

“四次挥手” - 断开连接

  • 一方完成数据发送发给另一方 FIN 报文 (一方: 数据传输完成)
  • 另一方接受 FIN 报文之后,给对方发送 ACK 报文 (另一方: 确认对方数据传输完成,并已关闭)
  • 另一方进行数据确认已完成,则也给对方发送 FIN 报文 (另一方: 如果有数据还未传输,传输完,保证数据传输完成。)
  • 对方收到 FIN 报文之后,回复 ACK 报文 (一方: 确认对方数据传输完成)

四次挥手的核心点 : 断开连接前,确认双方数据均发送完毕。