文章目录
HTTP(HyperText Transfer Protocol),超文本传输协议,定义了万维网的服务器和浏览器之间的文档传输方式,HTTP是面向文本的应用层协议。HTTP使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输。
HTTP简介
HTTP本身是无连接的,即虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。
HTTP是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,因为服务器并不记得曾经访问过的客户,也不记得为该客户提供过多少次服务。HTTP的无状态设计简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。
HTTP请求消息体
请求行:请求方法 URL 协议版本
请求头部:头部字段名 值
请求头部:头部字段名 值
…
请求数据:请求数据
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
HTTP响应消息体
状态行
消息报头
空行
响应正文
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
HTTP请求方法
HTTP请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据处理请求。数据被包含在请求体中。POST请求可能会导致数据修改 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | HTTP1.1协议中预留给能将连接改为管道方式的代理服务器 |
TRACE | 主要用于测试或诊断 |
PATCH | 对PUT方法的补充,用来对已知资源进行局部更新 |
HTTP状态码
HTTP状态码分为5类:
- 1** :信息,服务器收到请求,需要请求者继续执行操作。
- 2** :请求成功,操作被成功接收并处理
- 3** :重定向,需要进一步的操作以完成请求
- 4** :客户端错误,请求包含语法错误或无法完成请求
- 5** :服务器错误,服务器在处理请求的过程中发生了错误
常见的状态码:
状态码 | 状态码英文名称 | 中文含义 |
---|---|---|
100 | Continue | 继续 |
101 | Switching Protocols | 切换协议。服务器端根据客户端的请求切换协议 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URL,返回的信息包括新的URL。 |
302 | Found | 临时移动。与301类似,但资源只是被临时移动。 |
305 | Use Proxy | 使用代理。请求的资源必须通过代理访问 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
403 | Forbidden | 服务器理解客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法找到资源。可设置“个性页面”处理此错误 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器收到一个无效的响应 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
参考链接:HTTP状态码
Content-type(内容类型)
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,Content-Type 标头告诉客户端实际返回的内容的内容类型。常见的媒体类型如下:
content-type | 文件类型 |
---|---|
text/html | html格式 |
text/plain | 纯文本格式 |
text/xml | XML格式 |
image/gif | gif图片格式 |
image/png | png图片格式 |
application/json | JSON数据格式 |
application/pdf | pdf格式 |
multipart/form-data | 需要在表单中进行文件上传时,就需要使用该格式 |
HTTP1.0和HTTP1.1的区别
- HTTP1.0是无连接的:每次客户端和服务端发送请求都要建立新的连接
- HTTP1.1是长连接 keep-alive:客户端和服务器端的连接保持不断开,避免了每次客户端与服务器请求都要重复建立释放建立TCP连接,提高了网络的利用率
- HTTP1.1虽然保持连接不断开,但是不允许同时存在两个并行的响应,只允许顺序加载
HTTP1.0和HTTP2.0的区别
- HTTP2.0采用二进制格式而非文本格式
- HTTP2.0是完全多路复用的,HTTP1.0加载多个文件时是顺序加载,HTTP2.0可以并行加载
- HTTP2.0使用报头压缩,降低了开销
- HTTP2.0支持服务器主动推送
HTTP和HTTPS的区别
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTPS = HTTP + SSL
层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL(Secure Sockets Layer 安全套接层)。
HTTP和HTTPS区别如下:
- https协议需要到CA( Certificate Authority,电子证书)申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由HTTP + SSL协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS连接步骤
- 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端
- 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
- Web服务器利用自己的私钥解密出会话密钥
- Web服务器利用会话密钥加密与客户端之间的通信