目录
HTTP简介
HTTP协议Hyper Text Transfer Protocol(超文本传输协议)的缩写。
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简而言之就是在HTTP的基础上加入SSL层
SSL(Secure Sockets Layer)安全套接层,主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全
HTTP和HTTPS是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果)
HTTP三点注意事项:
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用合适的MIME-type内容类型
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就比较快。
HTTP消息结构
HTTP是一个无状态的请求/响应协议。
一个HTTP“客户端”是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP“服务器”同样也是一个应用程序(Web服务,如Apache Web服务器或IIS服务器等),通过接受客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers,URI)来传输数据和建立连接。
客户端请求信息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
http响应消息
HTTP响应四部分组成,分别是:状态行、消息报头、空行和响应正文。
HTTP请求方法
序号 | 方法 | 描述 |
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | HEAD | 类似于GET请求,只不过返回的响应没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。POST请求可能导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容 |
5 | DELETE | 请求服务器删除指定的页面 |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式方式的代理服务器 |
7 | OPTIONS | 允许客户端查看服务器的性能 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
9 | PATCH | 是对PUT方法的补充,用来对已知资源进行局部更新 |
HTTP请求头信息
请求头 | 说明 |
Host | 对应网址URL中的web名称和端口号 |
User-agent | 浏览器名称 |
Referer | 显示产生请求的网页来自哪个URL |
Cookie | Cookie是在浏览器中寄存的小型数据体,可以记载和服务器相关的用户信息 |
Connecton | 客户端与服务器的连接类型。如:close,keep-alive |
Upgrade-Insecure-Requests | 升级不安全的请求 |
Accept | 浏览器或其他客户端可以接受的MIME文件类型,服务器可以根据它判断并返回适当的文件格式 |
Accept-Charset | 浏览器可以接受的字符编码 |
Accept-Encoding | 浏览器可以接受的编码方式 |
Accept-Language | 浏览器可以接受的语言种类 |
HTTP响应头信息
响应头 | 说明 |
Allow | 服务器支持哪些请求方法(如post,get等) |
Content-Encoding | 文档的编码(Encode)方法 |
Content-Length | 表示内容长度 |
Content-type | 表示后面的文档属于什么MIME类型 |
Date | 当前GMT时间 |
Expires | 应该在什么时候认为文档已经过期,从而不在缓存它 |
Last-Modified | 文档最后修改时间 |
Server | 服务器名称 |
Set-Cookie | 设置跟页面关联的Cookie |
常用HTTP状态码
状态码 | 中文描述 |
200 | 正常访问 |
301、302、304 | 重定向 |
400 | 客户端请求的语法错误,服务器无法理解 |
401 | 身份认证 |
403 | 禁止访问 |
404 | 页面不存在 |
500 | 服务器内部错误 |
502 | 响应超时 |
503 | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。 |
实例演示
客户端请求:
GET /dengji.html HTTP/1.1
Host: 10.50.3.200
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;
Referer: http://10.50.3.200/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
服务器响应:
HTTP/1.1 200 OK
Date: Fri, 18 Sep 2020 10:13:10 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
Last-Modified: Fri, 19 Jun 2020 13:57:20 GMT
ETag: "5cc-5a87045899000"
Accept-Ranges: bytes
Content-Length: 1484
Connection: close
Content-Type: text/html
HTTP认证
Basic基本认证简介
Basic认证是一种较为简单的HTTP认证方式,客户端通过非加密明文(Base64编码格式)传输用户名和密码到服务器端进行认证,通常需要配合HTTPS来保证信息传输的安全。
基本认证步骤
1.客户端访问一个受http基本认证保护的资源
2.服务器返回401状态,要求客户端输入用户名和密码进行认证(如果验证失败,响应头会加上WWW-Authenticate:Basic realm="请求与")
3.客户端将输入的用户名和密码用":"合并用Base64进行编码后,采用非加密的明文方式传送给服务器。
4.服务器将Authenticate头中的用户名解码并去除,进行验证,如果认证成功,则返回相应的资源,否则仍然返回401状态,重新进行验证。
缺点
1.用户名和密码明文(Base64)传输,需要配合HTTPS来保证信息传输的安全
2.即使密码被强加密,第三方仍可通过加密后的用户名和密码进行重放攻击
3.没有提供任何针对代理和中间节点的防护措施
4.假冒服务器很容易骗过认证,诱导用户输入用户名和密码