HTTP协议是一种超文本传输协议,它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
我们平时输入 URL 来进行搜索的时候,一般开头就会有 http 或者 https。
常见的HTTP(超文本传输协议,默认端口80)、HTTPS(默认端口443)、SMTP(传邮件.默认端口25)、FTP(传文件,默认端口21)、Telnet(远程登录,默认端口23)
HTTP 协议工作于客户端-服务端架构上。
浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。
Web 服务器根据接收到的请求后,向客户端发送响应信息。
HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。
访问百度:
HTTP0.9:只支持GET这一个请求方式,只能访问HTML格式的资源。没有 Header 等描述数据的信息。服务器在发送数据完毕后,就关闭 TCP 连接。
HTTP1.0:增加了 POST、PUT请求。一次请求创建一次连接获得一个Web资源,响应后就会断开连接,下一个请求需要再次建立 TCP 连接。(三次握手)因此效率很低。默认短链接。
HTTP1.1(目前主流):一次请求创建一次连接,可以允许多个HTTP请求,获得多个web资源,默认长连接。
持久连接,即 TCP 连接默认不关闭,可以被多个请求复用,提高了请求性能。
管道机制(pipeline),即在同一个 TCP 连接里面,客户端可以同时发送多个请求。例如,浏览器同时发出 A 请求和 B 请求,但是服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。
HTTP2.0:HTTP2 主要解决了传输性能的问题。增加双工模式,不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,是一个并行的效率。 HTTP2 中,对头信息进行了压缩,减少了对带宽的占用。
请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。
客户端请求消息:
请求报文是由请求行(请求方法+请求 URL+协议版本)、请求头部、空行、请求主体四部分组成
- GET/sample.jspHTTP/1.1 请求行
- Accept:image/gif.image/jpeg, 请求头部
- Accept-Language:zh-cn
- Connection:Keep-Alive
- Host:localhost
- User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
- Accept-Encoding:gzip,deflate
-
- username=jinqiao&password=1234 请求主体
服务端响应消息:
HTTP响应也由四个部分组成,分别是:状态行、响应首部、空行和响应主体。
- HTTP/1.1 200 OK 状态行
- Server:Apache Tomcat/5.0.12 响应首部
- Date:Mon,6Oct2003 13:23:42 GMT
- Content-Length:112
-
- <html> 响应主体
- <head>
- <title>HTTP响应示例<title>
- head>
- <body>
- Hello HTTP!
- body>
- html>
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
可以把PUT、DELETE、POST、GET理解为客户端对服务端的增删改查
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
应答头 | 说明 |
---|---|
Allow | 服务器支持哪些请求方法(如GET、POST等)。 |
Content-Encoding | 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。 |
Content-Length | 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。 |
Content-Type | 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。 |
Date | 当前的GMT时间。 |
Expires | 应该在什么时候认为文档已经过期,从而不再缓存它? |
Last-Modified | 文档的最后改动时间。 |
Location | 表示客户应当到哪里去提取文档。 |
Refresh | 表示浏览器应该在多少时间之后刷新文档,以秒计。 |
Server | 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。 |
Set-Cookie | 设置和页面关联的Cookie。 |
WWW-Authenticate | 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。 |
HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。
HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP | HTTPS | |
端口 | 80 | 443 |
安全性 | 无加密,安全性较差 | 有加密机制,安全性较高 |
资源消耗 | 较少 | 由于加密处理,资源消耗更多 |
是否需要证书 | 不需要 | 需要 |
协议 | 运行在TCP协议之上 | 运行在SSL协议之上,SSL运行在TCP协议之上 |