浅谈 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
    响应数据(响应体)
    
posted @ 2019-06-20 17:52  林染  阅读(331)  评论(5编辑  收藏  举报