欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈 HTTP 协议

程序员文章站 2022-07-11 17:37:59
一、 HTTP简介 1. 超文本传输协议 Hyper Text Transfer Protocol 2. 是一种用于分布式、协作式和超媒体信息系统的应用层协议 3. HTTP是万维网的数据通信的基础 4. HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信 二、 HTTP ......

一、 http简介

  1. 超文本传输协议 hyper text transfer protocol
  2. 是一种用于分布式、协作式和超媒体信息系统的应用层协议
  3. http是万维网的数据通信的基础
  4. http有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信

二、 http 请求/响应的步骤

  1. 客户端连接到web服务器
    • 一个http客户端,通常是浏览器,与web服务器的http端口(默认为80)建立一个tcp套接字连接
  2. 发送http请求
    • 通过tcp套接字,客户端向web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成
  3. 服务器接受请求并返回http响应
    • web服务器解析请求,定位请求资源,服务器将资源复本写到tcp套接字,由客户端读取,一个响应由状态行、响应头部、空行和响应数据4部分组成
  4. 释放连接tcp连接
    • 若connection 模式为close,则服务器主动关闭tcp连接,客户端被动关闭连接,释放tcp连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求
  5. 客户端浏览器解析html内容
    • 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码,然后解析每一个响应头,响应头告知以下为若干字节的html文档和文档的字符集,客户端浏览器读取响应数据html,根据html的语法对其进行格式化,并在浏览器窗口中显示
  6. 面试题:在浏览器地址栏键入url,按下回车之后会经历的流程:
    • 浏览器向dns服务器请求解析该url中的域名所对应的ip地址
    • 解析出ip地址后,根据该ip地址和默认端口80,和服务器建立tcp连接
    • 浏览器发出读取文件(url 中域名后面部分对应的文件)的http请求,该请求报文作为tcp三次握手的第三个报文的数据发送给服务器
    • 服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器
    • 释放tcp连接
    • 浏览器将该html文本并显示内容

三、 http请求方法

  1. get:获取一个页面、图片(资源)
  2. post:提交数据
  3. head
  4. put
  5. delete
  6. trace
  7. options
  8. connect

四、 http状态码

  1. 状态代码的第一个数字代表当前响应的类型:
    • 1xx消息——请求已被服务器接收,继续处理
    • 2xx成功——请求已成功被服务器接收、理解、并接受
    • 3xx重定向——需要后续操作才能完成这一请求
    • 4xx请求错误——请求含有词法错误或者无法被执行
    • 5xx服务器错误——服务器在处理某个正确请求时发生错误
  2. 常见的:"200 ok","404 not found"

五、 url:统一资源定位符

  1. url包含的信息:
    • 传送协议
    • 层级url标记符号(为 // ,固定不变)
    • 访问资源需要的凭证信息(可省略)
    • 服务器(通常为域名,有时为ip地址)
    • 端口号(以数字方式表示,可省略,http的默认值为80,https的默认值为443)
    • 路径(以 / 字符区别路径中的每一个目录名称)
    • 查询(get模式的窗体参数,以 ? 字符为起点,每个参数以 & 隔开,再以 = 分开参数名称与数据,通常以utf8的url编码,避开字符冲突的问题)
    • 片段(以“#”字符为起点)
  2. 示例:http://www.luffycity.com:80/news/index.html?id=250&page=1
    • http,是传送协议
    • www.luffycity.com,是服务器
    • 80,是服务器上的网络端口号
    • /news/index.html,是路径
    • ?id=250&page=1,是查询

六、 http请求格式

  1. 请求(request)

    • 浏览器:服务器
    • get 请求没有请求数据
  2. 格式:

    请求方式 url路径 协议版本\r\n
    k1:v1\r\n
    k2:v2\r\n
    \r\n
    数据

七、 http响应格式

  1. 响应(response)

    • 服务器:浏览器
  2. 格式:

    协议版本 状态码 状态码描述\r\n
    k1:v1\r\n
    k2:v2\r\n
    \r\n
    响应数据(响应体)