HTTP 请求/响应的步骤:(工作原理)

  1. 客户端连接到 Web 服务器

一个 HTTP 客户端,通常是浏览器,与 Web 服务器的 HTTP 端口(默认为 80)建立一个 TCP 套接字连接。例如,http://www.baidu.com

  1. 发送 HTTP 请求

通过 TCP 套接字,客户端向 Web 服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据 4 部分组成。

  1. 服务器接受请求并返回 HTTP 响应

Web 服务器解析请求,定位请求资源。服务器将资源复本写到 TCP 套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据 4 部分组成。

  1. 释放连接 TCP 连接

若 connection 模式为 close,则服务器主动关闭 TCP 连接,客户端被动关闭连接,释放 TCP 连接;若 connection 模式为 keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

  1. 客户端浏览器解析 HTML 内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的 HTML 文档和文档的字符集。客户端浏览器读取响应数据 HTML,根据 HTML 的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址行键入 url,按下回车之后会经历以下流程

  • 浏览器向 DNS 服务器请求解析该 url 中的域名,找到域名对应的 ip 地址
  • 浏览器通过获得的 ip 地址向该地址的服务器建立 TCP 连接
  • 浏览器向该服务器发送请求报文(该请求作为 TCP 三次握手的第三个报文数据发送给服务器)
  • 服务器根据请求报文映射文件资源,复制文件资源并发送给浏览器
  • 服务器断开 TCP 连接,浏览器被动断开 TCP 连接(释放 TCP 连接)
  • 浏览器解析响应数据并显示内容

http 协议特点

  • http 协议是基于 TCP/IP 协议上的应用层协议

  • http 基于请求-响应模式(一定是从客户端先建立通信的,服务器端在没有接收到请求之前不会响应数据)

  • 无状态保存。HTTP 是一种不保存状态,即无状态 stateless 协议。HTTP 协议自身不对请求和响应的通信内容做保存。协议本身不保留之前一切的请求或响应的报文信息。为了实现保存状态(比如保持登录状态),引入了 cookie

    技术。有了 cookie 再使用 http 通信,就可以管理状态了。

  • 无连接。无连接的含义是限制每次连接只处理一个请求。服务器处理完用户的请求,并接收到用户的应答后,即断开连接。采用这种方式可以节省传输时间,并提高并发性能。早期的 http

    协议是接收到用户应答后就立即断开连接。现在的协议版本是接收到应答后再等待几秒(默认是 3

    秒),若用户没有再发起请求则断开连接。这样可以短时间内减少连接的次数。因为连接也是耗时的。(等待时间可以通过后端设置。可设置一个适合当前业务系统的最佳等待时间)

http 请求方式

  • get 查询数据
  • post 提交数据(如提交表单或上传文件)(新建数据或更改数据)
  • put 更新数据
  • delete 删除数据

get 与 post 请求方式

  • GET 提交的数据会放在 URL 之后,也就是请求行里面,以?分割 URL 和传输数据,参数之间以&相连,如 EditBook?name=test1&id=123456.(请求头里面那个 content-type

    做的这种参数形式,后面讲) POST 方法是把提交的数据放在 HTTP 包的请求体中.

  • GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制),而 POST 方法提交的数据没有限制.

  • GET 与 POST 请求在服务端获取请求数据方式不同,就是我们自己在服务端取请求数据的时候的方式不同了,这句废话昂。

http 状态码

  • 1xx 消息——请求已被服务器接收,继续处理
  • 2xx 成功——请求已成功被服务器接收、理解、并接受
  • 3xx 重定向——需要后续操作才能完成这一请求
  • 4xx 请求错误——请求含有词法错误或者无法被执行
  • 5xx 服务器错误——服务器在处理某个正确请求时发生错误

URL

超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:

  • 传送协议。
  • 层级 URL 标记符号(为[//],固定不变)
  • 访问资源需要的凭证信息(可省略)
  • 服务器。(通常为域名,有时为 IP 地址)
  • 端口号。(以数字方式表示,若为 HTTP 的默认值“:80”可省略)
  • 路径。(以“/”字符区别路径中的每一个目录名称)
  • 查询。(GET 模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再* 以“=”分开参数名称与数据,通常以 UTF8 的 URL 编码,避开字符冲突的问题)
  • 片段。以“#”字符为起点

以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:

  • http,是协议;
  • www.luffycity.com,是服务器;
  • 80,是服务器上的默认网络端口号,默认不显示;
  • /news/index.html,是路径(URI:直接定位到对应的资源);
  • ?id=250&page=1,是查询。

大多数网页浏览器不要求用户输入网页中 “http://” 的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。

由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如

www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。

http-超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)

  • http 协议是以 ASCII 码传输,建立在 TCP/IP 层之上的应用层协议

最新文章

  1. 使用shell/python获取hostname/fqdn释疑
  2. 【小贴士】探一探javascript中的replace
  3. Integer to Roman -- LeetCode 012
  4. OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)
  5. C# MVC ( 添加路由规则以及路由的反射机制 )
  6. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->使用Spring Framework开发自己的应用程序
  7. 首页banner特效
  8. Java中boolean型变量的默认值问题
  9. jasperreport报表生成时编译的错误
  10. FZU 2101 大三的美好时光
  11. poj2785双向搜索
  12. iOS的相对路径和绝对路径
  13. MaxPooling的作用
  14. verilog学习笔记(0)
  15. LGTB 与序列
  16. 关于一些基础的Java问题的解答(一)
  17. Kafka监控系统Kafka Eagle剖析
  18. Java 面试题 队列
  19. 如何更改Oracle字符集避免乱码
  20. 01python初识—编辑器&版本&变量知识

热门文章

  1. [数据分析与可视化] 数据绘图要点2-Y轴的开始与结束
  2. kafka详解(03) - kafka JAVA API
  3. 如何将WebAssembly优化到2MB?
  4. 关于Spring的IoC容器,你了解多少
  5. 一文搞懂工作流审批(Java+activiti)快速开发+自定义工作流配置
  6. 12月13日内容总结——路由分发、名称空间、虚拟环境、视图层三板斧、JsonResponse对象、request对象获取文件、视图层FBV与CBV的源码剖析、模版层简介
  7. 破解练习-CRACKME002
  8. 打开MASA Blazor的正确姿势2:组件总览
  9. VMware 虚拟机安装 OpenWrt 作旁路由 单臂路由 img 镜像转 vmdk 旁路由无法上网 没网络
  10. 源码下载teb