Http学习
本文最后更新于 2025年1月18日 晚上
Http学习
HTTP和HTTPS的区别
HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。
HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。
主要区别如下:
- 加密:
- HTTP:数据传输过程中不加密,容易被截获和篡改。
- HTTPS:使用SSL/TLS协议对传输的数据进行加密,保护数据传输过程中的安全性。
- 端口:
- HTTP:默认使用端口80。
- HTTPS:默认使用端口443。
- 安全性:
- HTTP:不提供数据加密,安全性较低。
- HTTPS:提供数据加密和完整性校验,安全性较高。
- 证书:
- HTTP:不需要证书。
- HTTPS:需要SSL证书来启用加密,并验证服务器的身份。
- 性能:
- HTTP:由于不加密数据,性能略高于HTTPS。
- HTTPS:由于需要进行加密和解密,可能会有一定的性能开销。
- **搜索引擎优化(SEO)**:
- HTTP:搜索引擎可能会对没有使用HTTPS的网站进行降权。
- HTTPS:搜索引擎倾向于优先索引和展示使用HTTPS的网站。
- 浏览器显示:
- HTTP:在大多数现代浏览器中,HTTP网站通常显示为”不安全”。
- HTTPS:浏览器会显示一个锁形图标,表示网站是安全的。
- 成本:
- HTTP:通常免费。
- HTTPS:需要购买SSL证书,可能会有一定的成本。
- 应用场景:
- HTTP:适用于不需要传输敏感信息的网站,如新闻网站、博客等。
- HTTPS:适用于需要传输敏感信息的网站,如网上银行、在线购物、电子邮件等。
HTTP报文
客户端请求消息
请求行(Request Line):
- 方法:如 GET、POST、PUT、DELETE等,指定要执行的操作。
- 请求 URI(统一资源标识符):请求的资源路径,通常包括主机名、端口号(如果非默认)、路径和查询字符串。
- HTTP 版本:如 HTTP/1.1 或 HTTP/2。
请求行的格式示例:
GET /index.html HTTP/1.1
请求头(Request Headers):
- 包含了客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等。
- 常见的请求头包括
Host
、User-Agent
、Accept
、Accept-Encoding
、Content-Length
等。 - Host:资源所在的主机的ip和端口
- User-Agent:告知服务器发起请求的客户端软件类型,包括浏览器的信息和操作系统。例如,它可以包含浏览器的名称、版本、操作系统等信息,帮助服务器优化响应内容
- Accept:指示客户端能处理的内容类型。例如,可以是
text/html
、application/json
等 - Accept-Encoding:告知Accept-Encoding的编码形式
- Upgrade-Insecure-Requests:告知服务器把希望把不安全的请求提升为安全的请求
空行:
- 请求头和请求体之间的分隔符,表示请求头的结束。
请求体(可选):
- 在某些类型的HTTP请求(如 POST 和 PUT)中,请求体包含要发送给服务器的数据。
服务端响应消息
HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
状态行(Status Line):
- HTTP 版本:与请求消息中的版本相匹配。
- 状态码:三位数,表示请求的处理结果,如 200 表示成功,404 表示未找到资源。
- 状态信息:状态码的简短描述。
状态行的格式示例:
HTTP/1.1 200 OK
响应头(Response Headers):
- 包含了服务器环境信息、响应体的大小、服务器支持的压缩类型等。
- 常见的响应头包括
Content-Type
、Content-Length
、Server
、Set-Cookie
等。
空行:
- 响应头和响应体之间的分隔符,表示响应头的结束。
响应体(可选):
- 包含服务器返回的数据,如请求的网页内容、图片、JSON数据等。
HTTP 响应头信息 | ||
---|---|---|
响应头信息(英文)HTTP 响应头信息是服务器在响应客户端的HTTP请求时发送的一系列头字段,它们提供了关于响应的附加信息和服务器的指令。 | 响应头信息(中文) | 描述 |
Date以下是一些常见的 HTTP 响应头信息: | 日期 | 响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT |
Server | 服务器 | 服务器软件的名称和版本。例如:Apache/2.4.1 (Unix) |
Content-Type | 内容类型 | 响应体的媒体类型(MIME类型),如text/html; charset=UTF-8 , application/json 等。 |
Content-Length | 内容长度 | 响应体的大小,单位是字节。例如:3145 |
Content-Encoding | 内容编码 | 响应体的压缩编码,如 gzip , deflate 等。 |
Content-Language | 内容语言 | 响应体的语言。例如:zh-CN |
Content-Location | 内容位置 | 响应体的 URI。例如:/index.html |
Content-Range | 内容范围 | 响应体的字节范围,用于分块传输。例如:bytes 0-999/8000 |
Cache-Control | 缓存控制 | 控制响应的缓存行为, 如 no-cache 表示必须重新请求。 |
Connection | 连接 | 管理连接的选项,如keep-alive 或close ,keep-alive 表示连接不会在传输后关闭。。 |
Set-Cookie | 设置 Cookie | 设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure |
Expires | 过期时间 | 响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT |
Last-Modified | 最后修改时间 | 资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT |
ETag | 实体标签 | 资源的特定版本的标识符。例如:”33a64df551425fcc55e6” |
Location | 位置 | 用于重定向的 URI。例如:/newresource |
Pragma | 实现特定的指令 | 包含实现特定的指令,如 no-cache 。 |
WWW-Authenticate | 认证信息 | 认证信息,通常用于HTTP认证。例如:Basic realm=”Access to the site” |
Accept-Ranges | 接受范围 | 指定可接受的请求范围类型。例如:bytes |
Age | 经过时间 | 响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24 |
Allow | 允许方法 | 列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等 |
Vary | 变化 | 告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept |
Strict-Transport-Security | 严格传输安全 | 指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains |
X-Frame-Options | 框架选项 | 控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN |
X-Content-Type-Options | 内容类型选项 | 指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff |
X-XSS-Protection | XSS保护 | 控制浏览器的 XSS 过滤和阻断。例如:1; mode=block |
Public-Key-Pins | 公钥固定 | HTTP 头信息,用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256=”base64+primarykey”; pin-sha256=”base64+backupkey”; max-age=expireTime |
HTTP content-type
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
语法格式:
1 |
|
实例:
常见的媒体格式类型如下:
- text/html : HTML格式
- text/plain :纯文本格式
- text/xml : XML格式
- image/gif :gif图片格式
- image/jpeg :jpg图片格式
- image/png:png图片格式
以application开头的媒体格式类型:
- application/xhtml+xml :XHTML格式
- application/xml: XML数据格式
- application/atom+xml :Atom XML聚合格式
- application/json: JSON数据格式
- application/pdf:pdf格式
- application/msword : Word文档格式
- application/octet-stream : 二进制流数据(如常见的文件下载)
- application/x-www-form-urlencoded :
另外一种常见的媒体格式是上传文件之时使用的:
- multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
MIME 类型
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
常见的 MIME 类型
- 超文本标记语言文本 .html、.html:text/html
- 普通文本 .txt: text/plain
- RTF 文本 .rtf: application/rtf
- GIF 图形 .gif: image/gif
- JPEG 图形 .jpeg、.jpg: image/jpeg
- au 声音文件 .au: audio/basic
- MIDI 音乐文件 mid、.midi: audio/midi、audio/x-midi
- RealAudio 音乐文件 .ra、.ram: audio/x-pn-realaudio
- MPEG 文件 .mpg、.mpeg: video/mpeg
- AVI 文件 .avi: video/x-msvideo
- GZIP 文件 .gz: application/x-gzip
- TAR 文件 .tar: application/x-tar
补充
request
response