HTTP 和 HTTPS
HTTP
HTTP 是一种用于传输超文本的协议,是互联网上应用最为广泛的协议之一。
基本概念
HTTP是一个无状态协议:即每个请求之间是没有关联的,每个请求都是独立的。HTTP是基于请求和响应的:客户端发送请求给服务器,服务器返回响应给客户端。HTTP是文本协议:HTTP使用文本格式进行通信,请求和响应都是由头部和主体两部分组成的文本格式。
工作原理
客户端发起请求:客户端使用
HTTP协议向服务器发送请求,请求包含请求方法、请求URL、请求头和请求主体等信息。服务器响应请求:服务器接收到客户端的请求后,进行处理并返回响应,响应包含状态码、响应头和响应主体等信息。
连接关闭:完成请求和响应之后,客户端和服务器之间的连接会被关闭。
HTTP 的常见请求方法:
| 方法 | 作用 |
|---|---|
| GET | 获取资源 |
| POST | 提交数据 |
| PUT | 更新资源 |
| DELETE | 删除资源 |
| HEAD | 获取响应头信息 |
| OPTIONS | 获取服务器支持的请求方法等信息 |
总的来说,HTTP 是一种简单、可靠、可扩展的协议,它在互联网中扮演着重要的角色,被广泛应用于 Web 开发、移动应用、API 接口等领域。
GET 与 POST 的区别
GET 和 POST 是 HTTP 协议中常用的两种请求方法,它们之间的主要区别如下:
- 参数传递方式不同
GET请求:参数是通过URL传递的,即将参数拼接在URL后面。POST请求:参数是通过请求体传递的,即将参数放在请求体中,请求头中会包含Content-Type字段来说明请求体中的数据格式。
- 参数传递大小限制不同
GET请求:由于参数是通过URL传递的,因此传递的参数大小有限制,通常不超过2KB。POST请求:由于参数是通过请求体传递的,因此传递的参数大小没有限制。
- 安全性不同
GET请求:参数是暴露在URL中的,因此在请求过程中容易被拦截、篡改或缓存,不适合传递敏感信息。POST请求:参数是放在请求体中的,相对于GET请求更安全,适合传递敏感信息。
- 缓存机制不同
GET请求:浏览器会缓存GET请求的结果,下次请求相同的URL时,直接从缓存中获取,不会重新请求服务器。POST请求:浏览器不会缓存POST请求的结果,每次请求都会向服务器发送请求。
- 应用场景不同
GET请求:通常用于获取数据,如搜索、分页等。POST请求:通常用于提交数据,如登录、注册等。
总之,GET 和 POST 请求各有优缺点,需要根据实际业务需求选择合适的请求方法。
HTTP 报文组成
HTTP 报文是 HTTP 协议中的核心概念之一,包括两部分:请求报文和响应报文。
HTTP报文是一个文本格式的信息,它包含了请求或响应所需要的全部信息,使得客户端和服务器端能够有效地进行通信和数据传输。
请求报文
请求报文包括请求行、请求头、请求体三部分,格式如下:
<method> <request-URL> <version>
<headers>
<body>2
3
其中:
请求行:包括请求方法、请求
URL和协议版本,用空格分隔;请求头:包括多个键值对,每个键值对用冒号分隔,多个键值对之间用回车符和换行符分隔;
请求体:用于携带请求参数和数据,请求体可以为空。
响应报文
响应报文也包括三部分:状态行、响应头和响应体,格式如下:
<version> <status> <reason-phrase>
<headers>
<body>2
3
其中:
状态行:包括协议版本、状态码和状态消息,用空格分隔;
响应头:包括多个键值对,每个键值对用冒号分隔,多个键值对之间用回车符和换行符分隔;
响应体:用于携带响应结果和数据,响应体可以为空。
Request Header
Request Header(请求头)是 HTTP 请求报文中的一部分,包含了客户端(浏览器或应用程序)向服务器发送请求时的附加信息,以键值对的形式组织。常见的请求头有:
User-Agent:客户端的类型及版本号Referer:请求来源的URLAccept:客户端支持的MIME类型Accept-Language:客户端支持的语言类型Accept-Encoding:客户端支持的压缩类型Host:请求的服务器域名Connection:客户端与服务器之间连接的类型Cookie:客户端存储的Cookie信息Cache-Control:请求缓存的控制参数
请求头的作用是提供给服务器更多的信息,以便服务器更好地处理请求。
Response Header
Response Header(响应头)是 HTTP 响应报文中的一部分,包含了服务器对客户端请求的响应信息,以键值对的形式组织。常见的响应头有:
Content-Type:响应内容的MIME类型Content-Length:响应内容的长度Cache-Control:响应缓存的控制参数Set-Cookie:服务器要求客户端存储的Cookie信息Location:重定向的URL地址ETag:资源的标识符,用于缓存控制Last-Modified:资源的最后修改时间,用于缓存控制Expires:资源的过期时间,用于缓存控制
响应头的作用是告知客户端服务器对请求的响应情况,以便客户端进行下一步处理。
HTTPS
HTTPS 是 HTTP 协议的一种安全版本,通常使用 SSL/TLS 协议进行加密。它在数据传输的过程中使用了公钥加密和私钥解密的方式来保护数据的机密性和完整性。HTTPS 协议在数据传输过程中,采用了多种加密技术,包括对称密钥加密、非对称密钥加密和消息摘要算法等。这些技术保证了数据在传输过程中不会被黑客窃取或篡改。
作用
使用 HTTPS 协议可以防止中间人攻击、身份伪装、数据篡改、数据窃听等问题。通过数字证书,可以验证网站的真实性,确保通信双方的身份,保障用户的隐私和安全。
HTTP 和 HTTPS 的区别
HTTP 和 HTTPS 都是应用层协议,但 HTTPS 在 HTTP 的基础上增加了安全层,使得数据在传输过程中更加安全可靠。下面是 HTTP 和 HTTPS 的区别:
HTTP使用明文传输数据,而HTTPS通过SSL/TLS加密数据传输;HTTP的默认端口是80,HTTPS的默认端口是443;HTTP在通信过程中没有身份验证,而HTTPS通过SSL/TLS建立身份验证机制,可以防止身份被冒充;HTTP数据传输速度更快,因为HTTPS增加了加密、解密和身份验证等额外的步骤,需要消耗更多的计算资源和时间;HTTP使用的证书是申请成本较低的DV(Domain Validation)证书,而HTTPS使用的证书是成本较高的EV(Extended Validation)证书,可以提供更高的安全性和可信度。
总之,HTTPS 比 HTTP 更加安全可靠,但在性能方面会有一定的损失。因此,在对安全性要求较高的场合,应该使用 HTTPS。
HTTPS 协议的优缺点
HTTPS 协议相比 HTTP 协议,具有以下优点和缺点:
优点:
安全性高:
HTTPS协议利用SSL/TLS加密传输数据,能够有效地保障数据的安全性,可以防止数据被窃取、篡改、劫持等攻击。防止中间人攻击:
HTTPS采用了证书机制,能够有效地防止中间人攻击。提高网站的信誉度:
HTTPS协议能够保证网站的真实性和完整性,让用户更加信任网站,从而提高了网站的信誉度。支持更多的浏览器和搜索引擎:现在的浏览器和搜索引擎都支持
HTTPS协议,使用HTTPS协议能够让网站更好的展示在搜索结果中,提高曝光率。
缺点:
加密、解密过程会消耗更多的计算资源和时间,会降低服务器的性能,增加服务器的负担。
证书需要向
CA机构购买,成本较高,不是所有的网站都能够承受。HTTPS协议对缓存的支持不够好,会导致网站的访问速度较慢,需要额外的服务器资源来支持HTTPS的加密和解密过程。HTTPS协议无法缓存静态文件,对于一些大文件的下载,HTTPS的效率并不是很高。
综上所述,HTTPS 协议虽然有一些缺点,但是其安全性和信誉度优势明显,对于一些需要保障数据安全的网站和交易场景,采用 HTTPS 协议是必要的。
状态码
HTTP 的状态码用于表示服务器处理请求的结果:
1xx:信息提示,表示请求已被接受,需要继续处理。2xx:成功,表示请求已被成功处理和接受。3xx:重定向,表示需要进行进一步操作才能完成请求。4xx:客户端错误,表示请求包含错误或无法被处理。5xx:服务器错误,表示服务器在尝试处理请求时发生了错误。
常见状态码
200OK:客户端请求成功301Moved Permanently:所请求的页面已经永久重定向至新的URL302Found:所请求的页面已经临时重定向至新的URL304Not Modified:未修改。403Forbidden:对请求页面的访问被禁止404Not Found:请求资源不存在500Internal Server Error:服务器发生不可预期的错误原来缓冲的文档还可以继续使用503Server Unavailable:请求未完成,服务器临时过载或宕机,一段时间后可恢复正常
更多状态码
1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态码100:继续,服务器已经接收到请求头,并且客户端应该继续发送请求体(通常用于POST请求)。101:切换协议,请求者已要求服务器切换协议,服务器已确认并准备切换
2xx(成功)表示成功处理了请求的状态码200:成功,服务器已经成功处理了请求201:已创建,请求成功并且服务器创建了新的资源202:已接受,服务器已接受请求,但尚未处理203:非授权信息,服务器已经成功处理了请求,但返回的信息可能来自另一来源204:无内容,服务器成功处理了请求,但没有返回任何内容205:重置内容,服务器成功处理了请求,但没有返回任何内容
3xx(重定向)表示要完成请求,需要进一步操作;通常,这些状态代码用来重定向300:多种选择,针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择301:永久移动,请求的网页已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置302:临时移动,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求303:查看其它位置,请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码304:未修改,自上次请求后,请求的网页未修改过。服务器返回此响应,不会返回网页的内容305:使用代理,请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理307:临时性重定向,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有的位置来进行以后的请求
4xx(请求错误)这些状态码表示请求可能出错,妨碍了服务器的处理400:错误请求,服务器不理解请求的语法401:未授权,请求要求身份验证。对于需要登录的网页,服务器可能返回此响应403:禁止,服务器拒绝请求404:未找到,服务器找不到请求的网页405:方法禁用,禁用请求中指定的方法406:不接受,无法使用请求的内容特性响应请求的网页407:需要代理授权,此状态码与401(未授权)类似,但指定请求者应当授权使用代理408:请求超时,服务器等候请求时发生超时410:已删除,如果请求的资源已永久删除,服务器就会返回此响应413:请求实体过大,服务器无法处理请求,因为请求实体过大,超出了服务器的处理能力414:请求的URI过长,请求的URI(通常为网址)过长,服务器无法处理
5xx(服务器错误)这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错500:服务器内部错误,服务器遇到错误,无法完成请求501:尚未实施,服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码502:错误网关,服务器作为网关或代理,从上游服务器无法收到无效响应503:服务器不可用,服务器目前无法使用(由于超载或者停机维护)。通常,这只是暂时状态504:网关超时,服务器作为网关代理,但是没有及时从上游服务器收到请求505:HTTP版本不受支持,服务器不支持请求中所用的HTTP协议版本
304状态码过程
浏览器请求资源时,先检查资源的
Expires和Cache-Control值,如果缓存仍然有效,则直接使用缓存,返回状态码200,并在响应头中添加from cache字样,不会请求数据。如果缓存失效,浏览器发送带有
If-None-Match和If-Modified-Since头的条件请求到服务器,请求头中的If-None-Match值是上一次请求返回的ETag值,If-Modified-Since是上一次请求返回的Last-Modified值。服务器收到条件请求后,检查资源的
ETag和Last-Modified值是否匹配,如果匹配,则表示资源没有更新,返回状态码304,告诉浏览器可以直接使用缓存。如果资源已更新,则服务器返回新的资源,状态码为
200,并在响应头中添加新的ETag和Last-Modified值,浏览器会更新缓存,并在下一次请求中使用新的缓存。
总之,HTTP 304 状态码的过程是一种优化缓存机制的方式,减少网络带宽和服务器负载。通过比较资源的 ETag 和 Last-Modified 值,避免了不必要的数据传输,提高了资源请求的效率。
HTTP1、HTTP2、HTTP3
HTTP (Hypertext Transfer Protocol) 是一种用于客户端和服务器之间进行通信的协议。在过去几十年中,HTTP 已经经历了多次重大更新,其中最重要的三个版本是 HTTP1、HTTP2 和 HTTP3 。它们之间的区别如下:
HTTP1:HTTP1.0最初发布于1996年,然后在1999年被HTTP1.1取代。HTTP1.x是一种基于文本的协议,使用明文传输数据,不支持请求和响应的多路复用,每个请求都需要建立一个新的TCP连接。这导致了一些性能瓶颈,例如延迟和带宽限制。HTTP2:HTTP2在2015年发布,是HTTP1.x的升级版。它引入了二进制协议,支持请求和响应的多路复用,可以在一个TCP连接上同时发送多个请求,降低了延迟和提高了带宽利用率。此外,HTTP2还支持服务器推送,可以在客户端请求之前将资源推送到客户端缓存,从而提高性能。HTTP3:HTTP3是最新的HTTP协议,于2020年发布。它基于QUIC(Quick UDP Internet Connections)协议,使用UDP而不是TCP来传输数据。由于UDP支持更高的并发连接和更低的延迟,HTTP3可以更快地传输数据,并支持请求和响应的多路复用。此外,HTTP3还支持0-RTT(Zero Round Trip Time)握手,可以减少建立连接所需的时间。
HTTP1.1 的优点:
兼容性好:
HTTP1.1被广泛支持和采用。可缓存性:
HTTP1.1支持多种缓存技术,可以缓存网页,提高网页加载速度。资源异步加载:使用
HTTP1.1可以通过在页面中嵌入多个资源链接的方式异步加载资源,提高了页面的并发度和渲染速度。
HTTP1.1 的缺点:
队头阻塞:
HTTP1.1使用的是串行的请求和响应方式,如果某个请求响应慢,后续的请求需要等待,会出现队头阻塞的问题。无状态:
HTTP1.1协议本身无状态,需要使用Cookie等技术来实现状态管理。头部冗余:
HTTP1.1的头部信息没有压缩,每次请求和响应都需要重复传输相同的头部信息,导致传输数据量增大。
HTTP2 的优点:
多路复用:
HTTP2使用二进制协议,支持多路复用,可以在一个连接上同时处理多个请求和响应。首部压缩:
HTTP2使用首部压缩技术,可以减少请求和响应的头部信息传输量,提高了传输效率。服务器推送:
HTTP2支持服务器推送技术,可以在客户端请求前主动向客户端推送相应资源,提高了响应速度和性能。
HTTP2 的缺点:
依赖
HTTPS:HTTP2协议必须依赖TLS协议,需要使用HTTPS传输数据。突发流量:多路复用可以并发处理多个请求和响应,但也会导致某个请求耗费过多的时间,影响其他请求的响应速度。
资源消耗:
HTTP2对于每个连接都需要维护状态,资源消耗较大。
HTTP3 的优点:
基于
QUIC协议:HTTP3基于QUIC协议,具有更好的安全性和传输效率。集成了
TLS:HTTP3集成了TLS,保证了数据的安全性。抗干扰:
HTTP3通过使用UDP协议,支持快速重传和自适应拥塞控制,抵抗网络干扰。
HTTP3 的缺点:
兼容性:
HTTP3的兼容性较差,需要客户端和服务器端都支持HTTP3协议。连接建立:
HTTP3协议需要建立多个连接来提高传输效率,增加了连接建立的复杂度。难以调试:
HTTP3的调试工具还不够成熟,调试过程比较困难。
WARNING
HTTP2和HTTP3是对HTTP1.1的升级和改进,不是对HTTP1.0的重写。虽然
HTTP1.1是HTTP1.0的改进版本,但HTTP2和HTTP3是对HTTP1.1的更进一步的改进和升级。HTTP1.1相对于HTTP1.0的改进主要是在持久连接、管线化、缓存等方面,而HTTP2和HTTP3则在多路复用、头部压缩、流量控制等方面有了很大的改进。