文章目录

  • 1.什么是协议?
  • 2.HTTP协议是什么?
  • 3.HTTP工作原理
  • 4.HTTP特点
  • 5.URI和URL的区别
  • 6.HTTP请求方法
  • 7.HTTP状态码
  • 8.HTTP报文组成
  • 9.HTTP响应格式(响应协议)

1.什么是协议?

网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。

2.HTTP协议是什么?

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1
2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

3.HTTP工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面 传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求 报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响 应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 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的语法对其进行格式化,并在浏览器窗口中显示。
    例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
    ① 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
    ②. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
    ③ 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
    ④ 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
    ⑤ 释放 TCP连接;
    ⑥ 浏览器将该 html 文本并显示内容;

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

基于 请求-响应 的模式
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应

无状态保存
HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个 级别,协议对于发送过的请求或响应都不做持久化处理。

使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产 生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。可是,随着Web的不断发展,因无状态而导致业务处理变得棘手 的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管 理状态了。有关Cookie的详细内容稍后讲解。

无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间,并且可以提高并发性能,不能和每个用户建立长久的连接,请求一次相应一次,服务端和客户端就中断了。但是无连接有两种方式,早期的http协议是一个请求一个响应之后,直接就断开了,但是现在的http协议1.1版本不是直接就断开了,而是等几秒钟,这几秒钟是等什么呢,等着用户有后续的操作,如果用户在这几秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,那么就会断开连接,这样可以提高效率,减少短时间内建立连接的次数,因为建立连接也是耗时的,默认的好像是3秒中现在,但是这个时间是可以通过咱们后端的代码来调整的,自己网站根据自己网站用户的行为来分析统计出一个最优的等待时间。

4.HTTP特点

①http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
②简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
③灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
④无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session。
⑤无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。

5.URI和URL的区别

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

URI:Uniform Resource Identifier 统一资源标识符
URL:Uniform Resource Location 统一资源定位符

URI 是用来标示 一个具体的资源的,我们可以通过 URI 知道一个资源是什么。

URL 则是用来定位具体的资源的,标示了一个具体的资源位置。互联网上的每个文件都有一个唯一的URL。

6.HTTP请求方法

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

GET

向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

HEAD

与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

PUT

向指定资源位置上传其最新内容。

DELETE

请求服务器删除Request-URI所标识的资源。

TRACE

回显服务器收到的请求,主要用于测试或诊断。

OPTIONS

这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

注意事项:

1.方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
2.HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源。

post和get的区别:
都包含请求头请求行,post多了请求body。
GET多用来查询,请求参数放在url中,不会对服务器上的内容产生作用。post用来提交,如把账号密码放入body中。
GET是直接添加到URL后面的,直接就可以在URL中看到内容,而POST是放在报文内部的,用户无法直接看到。
GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有。

7.HTTP状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:

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

虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK",“404 Not Found”,但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。

8.HTTP报文组成

请求报文构成
1.请求行:包括请求方法、URL、协议/版本
2.请求头(Request Header)
3.请求正文

响应报文构成
1.状态行
2.响应头
3.响应正文

9.HTTP响应格式(响应协议)


网络编程:HTTP协议超级详解相关推荐

  1. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  2. 搬砖:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议--QUIC详解 本文来自腾讯资深研发工程师罗成的技术分享,主要介绍 QUIC 协议产生的背景和核心特性等. 1.写在前面 如果你的 App,在不需要任 ...

  3. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  4. C++实战项目-网络编程基础包含TCP详解

    目录 网络结构模式(网络应用程序设计模式) C/S结构 B/S结构 MAC地址 IP地址 子网掩码 端口 网络模型 通信过程 数据包封装 协议 以太网帧格式 ARP数据报格式 IP数据报格式 UDP协 ...

  5. linux网络编程--select/poll/epoll 详解

    目录 参考链接 epoll函数 close epoll event EL/LT ET Edge Trigger 边沿触发工作模式 LT Level Trigger 水平触发工作模式 epoll 源码解 ...

  6. Java网络编程二:Socket详解

    Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点. 一.使用Socket进行网络通信的过程 服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接 ...

  7. 网络编程01-TCP协议(详)

    目录 一.网络编程学习大纲 二.回顾系统编程中进程的通信方式 1. 管道 2.信号 3.IPC对象 三.网络编程(套接字编程) 1.特点 2.协议 3.历史 四.网络应用程序设计模式 1.C/S模式 ...

  8. HTTP协议超级详解

    HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础. ...

  9. linux线程同步 epoll,Linux网络编程--epoll 模型原理详解以及实例

    1.简介 Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数.Linux 2.6内核中有提高网络I/O性能的新方法,即epoll . epoll是什么?按 ...

最新文章

  1. xcode 4.5 new feature __ ios6 新特性
  2. Win64 驱动内核编程-34.对抗与枚举MiniFilter
  3. Ubuntu 18.04 安装 redis入门使用
  4. mysql重启电脑提示145_MYSQL错误:Can’t open file: ‘#215;#215;#215;.MYI’ (errno: 145)修复方法...
  5. 应用服务关闭时eureka客户端会向server发送销毁请求
  6. mysql6.7主从_CentOS 6.7下MySQL主从部署
  7. 计算机网络物理层之数字传输系统
  8. 通过 Hibernate 调用存储过程
  9. Java - System.in.read(byte[] b);
  10. 谷歌浏览器下载、安装、配置。(保姆级详细教程。)
  11. 硬链接(hard link)和符号连接(symbolic link)
  12. 架构设计的新思路,《架构之道》读书笔记
  13. 计算机证件照无法上传,计算机IE浏览器为什么不能上传照片
  14. Gmail中基本html
  15. 拓嘉辰丰:把握活动规则,玩转拼多多万人团
  16. split,splice,slice 三者的用法
  17. 360权重是什么,360权重怎么查询
  18. 使用SwitchyOmega+Proxyee-down无限制下载
  19. 100个Div水平垂直均匀分布CSS
  20. Java的来历和它的创始人

热门文章

  1. 虚幻引擎与Unity引擎中逼真冰块效果的实现
  2. 免费开发Three.js+vue2.0园区三维可视化
  3. r7 4700u和r5 5600u哪个好
  4. 微信小程序的组件用法与传统HTML5标签的区别
  5. 项目--点击按钮显示资料,点击空白处隐藏资料
  6. 掌握知识变现的四个步骤,你的知识就是印钞机
  7. 【2023海康威视提前批笔试题】~ 题目及参考答案
  8. webstorm tab键补全代码改为enter
  9. 鸿蒙系统不是PC系统,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  10. 若依框架以及Mybatis-plus分页插件失效,数据库有多条却只查前十条