HTTP协议基础知识
什么是Http协议
超文本传输协议,是一个应用层协议,通过浏览器和服务器进行数据交互,进行超文本(文本、图片、视频等)传输的规定。
http协议结构组成
请求行(包括url,请求方式,状态码,http协议版本)
请求头
请求体
http协议中有哪些请求方式
GET
:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器POST
:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式PUT
:传输文件,报文主体中包含文件内容,保存到对应URI位置HEAD
:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效DELETE
:删除文件,与PUT方法相反,删除对应URI位置的文件OPTIONS
:查询响应URI支持的HTTP方法
GET和POST的区别
- get重点在从服务器上获取资源,post重点在想服务器发送数据;
- get传输数据是通过URL请求,以filed(字段)=value的形式,置于URL后,并用”?”连接,多个请求数据之间用“&”连接,这个过程用户是可见的,post是放在请求体内
- get传输量小,因为受URL长度限制,但效率较低/post可以传输大量数据,所以上传文件时只能用post方式
- get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等
HTTP和https区别
https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
http1.0和http1.1区别
- 建立连接方面: HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。
- HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法
无状态
由于http是一种无状态的协议,因此无论是客户端还是服务器都不记录http的相关信息。这样设计一方面减轻了服务器端的负载,另一方面减小了http请求的开销。
cookie和session用于解决http无状态的问题
持久化
正常在发送http时,都需要建立TCP的连接,再发送报文, 如果每次想要发送http报文都需要经过这个过程,那么时间大部分都会消耗在建立和断开连接的过程中。因此http中使用了connection属性,用于指定连接的方式。当设置成keep-alive,就会建立一条持久化的连接。不需要每次都建立连接,再中断。
管道化
http可以一次发送多个http请求,然后等待响应连接。不需要排队等候,这样就加快了http的响应时间。
内容编码
由于某些报文的内容过大,因此在传输时,为了减少传输的时间,会采取一些压缩的措施。例如accept-Encoding定义了内容编码的格式:gzip
http状态码
1XX:接收信息正在处理
2XX:正常处理完毕(200请求成功)
3XX:重定向
301 永久重定向
302 临时重定向
4XX:客户端错误
400:语法错误(参数不对)
401:未认证
403:禁止访问
404:资源未找到
5XX:服务器错误
500:服务器出错
503:服务器繁忙
HTTP首部字段
通用首部字段
Cach-Control 控制缓存的行为
Date 创建报文的事件
Connection 连接管理
Pragma:报文指令
Trailer:报文末端的首部一览
Transfer-Encoding:指定报文主体的传输编码方式
Upgrade:升级为其他协议
Via:代理服务器的相关信息
Warning:错误通知
请求首部字段(Request Header Fields)
从客户端向服务器发送求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
Accept:用户代理可处理的媒体类型
Accept-Charset:优先的字符集
Accept-Encoding:优先的内容编码
Accept-Language:优先的语言(自然语言)
Authorization:Web认证信息
Expect:期待服务器的特定行为
From:用户的电子邮箱地址
Host:请求资源所在服务器
If-Match:比较实体标记(ETag)
If-Modified-Since:比较资源的更新时间
If-None-Match:比较实体标记(与If-Match相反)
If-Range:资源未更新时发送实体Byte的范围请求
If-Unmodified-Since:比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards:最大传输逐跳数
Proxy-Authorization:代理服务器要求客户端的认真信息
Range:实体的直接范围请求
Referer:对请求中URI的原始获取方
TE:传输编码的优先级
User-Agent:HTTP客户端程序的信息
响应首部字段(Response Header Fields)
从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会请求客户端附加额外的内容信息。
Accept-Ranges:是否接受字节范围请求
Age:推算资源创建经过时间
ETag:资源的匹配信息
Location:令客户端重定向至指定URI
Proxy-Authenticate:代理服务器对客户端的认真信息
Retry-After:对再次发起请求的时机请求
Server:HTTP服务器的安装信息
Vary:代理服务器缓存的管理信息
WWW-Authenticate:服务器对客户端的认真信息
实体首部字段(Entity Header Fields)
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体相关的信息。
Allow:资源可支持的HTTP方法
Content-Encoding:实体主体适用的编码方法
Content-Language:实体主体的自然语言
Content-Length:实体主体的大小(单位:字节)
Content-Location:替代对应资源的URI
Content-MD5:实体主体的报文摘要
Content-Range:实体主体的位置范围
Content-Type:实体主体的媒体类型
Expires:实体主体过期的日期时间
Last-Modified:资源的最后修改日期时间
下一篇: Python os 模块知识点整理