什么是Http
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
- 文本:html、字符串....
- 超文本:文件、图片、位置、视频、音乐、地图....
- 默认端口:80
Https:安全的
Https(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL 。
默认端口:443
- 特征
- 支持客户/服务器模式;
- 简单快速;
- 灵活;
- 无连接;
- 无状态
- 工作原理
- 客户端连接到Web服务器(一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接)。
- 发送HTTP请求(通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成)。
- 服务器接受请求并返回HTTP响应(Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成)。
- 释放连接TCP连接(若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求)。
- 网络传输过程
Http版本时代
- Http/1.0
客户端与web服务器连接后,只能获取一个web资源,然后断开连接。
- Http/1.1
客户端与web服务器连接后,可以获得多个web资源。
Http三次握手
- 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。
Http请求(Request)
- 客户端 ——> 发请求(request) ——> 服务器
- 请求行:包含请求方法、URI、HTTP版本信息
- 请求头部(headers)字段
- 请求内容实体(body)
eg:www.baidu.com
Request URL: https://www.baidu.com/ 请求地址
Request Method: GET get/post方法
Status Code: 200 OK 状态码:200
Remote Address: 36.152.44.96:443 远程地址
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
1、请求行
- 请求行中的请求方式:Get
- 请求方式:Get、Post、HEAD、DELETE、PUT
-- Get
请求能够携带的参数比较少,有大小限制(1024字节),会在浏览器的URL地址栏中显示数据内容,不安全,但高效。
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
-- Post
请求能够携带的参数比较多,没有大小限制,不会在浏览器的URL地址栏中显示数据内容,安全,但不高效。
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
-- PUT
向指定资源位置上传其最新内容。
-- DELETE
请求服务器删除Request-URI所标识的资源。
-- HEAD
类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
-- CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
-- OPTIONS
允许客户端查看服务器的性能。
-- TRACE
回显服务器收到的请求,主要用于测试或诊断。
2、消息头
Accept: text/html 告诉浏览器,它所支持的数据类型
Accept-Encoding: gzip, deflate, br 支持哪种编码格式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 告诉浏览器,它的语言环境
Cache-Control: max-age=0 缓存控制
Connection: keep-alive 告诉浏览器,请求完成是断开还是保持连接
hots: xx 主机
Http响应(Response)
- 服务器 ——> 响应(response) ——> 客户端
- 状态行:包含HTTP版本、状态码、状态码的原因短语
- 响应头部(headers)字段
- 响应内容(body)实体
eg:www.baidu.com
Cache-Control: private 缓存控制
Connection: keep-alive 连接
Content-Encoding: gzip 编码
Content-Type: text/html;charset=utf-8 类型
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
1、响应体
Accept: text/html 告诉浏览器,它所支持的数据类型
Accept-Encoding: gzip, deflate, br 支持哪种编码格式
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 告诉浏览器,它的语言环境
Cache-Control: max-age=0 缓存控制
Connection: keep-alive 告诉浏览器,请求完成是断开还是保持连接
Hots: xx 主机
Refrush: 告诉客户端,多久刷新一次
Location: 让网页重新定位
2、响应状态码
200:请求响应成功
3xx:请求重定向
- 重定向:你重新到我给你的新位置去
- 302:表示重定向,这种情况下,服务器返回的头部信息中会包含一个 Location 字段,内容是重定向到的url
4xx:找不到资源,资源不存在
- 400:客户端请求有语法错误,不能被服务器所解析
- 401:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403:服务器收到请求,但是拒绝提供服务
- 404:请求资源找不到
5xx:服务器代码错误
- 500:服务器发生不可以预期的错误
- 503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
- 502:网关错误
- 504:(网关超时)bai 服务器作为网关或代理,但是没有及时du从上游zhi服务器收到请求