HTTP入门
Posted Leida_wanglin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP入门相关的知识,希望对你有一定的参考价值。
HTTP入门
柯南语录:
城市黎明的灯火
总有光环在陨落
模仿者一个又一个
无人问津的角色
你选择去崇拜谁呢 怨恨谁呢
假装热情的冷漠
假装自由的枷锁
你最后成为了什么
燃烧华丽的烟火
绽放一次就足够了 奢求什么
无名之辈 我是谁
忘了谁 也无所谓
谁不是 拼了命走到生命的结尾
也许很累一身狼狈
也许卑微一生无为
也许永远成为不了 你的光辉
无名之辈 我是谁
忘了谁 也无所谓
继续追 谁的光荣不是伴着眼泪
也许很累一身狼狈
也许卑微一生无为
谁生来不都是一样 尽管叫我无名之辈
下一篇:HTTP + 加密 + 认证 + 完整性保护 = HTTPS
1. 简单的HTTP协议
主要使用HTTP1.1版本
1.1. HTTP协议用于客户端和服务端之间的通信
请求访问文本或图像等资源的一端为客户端
提供资源响应的一端为服务端
1.2. 通过请求和响应的交换达成通信
HTTP协议规定,请求从客户端发出,最后服务端响应该请求并返回。
1.3. HTTP是不保存状态的协议
HTTP是一种不保存状态,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存。
HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,引入了Cookie技术。
1.4. 请求URI定位资源
HTTP协议使用URI定位互联网上的资源,正是因为URI的特定功能。
URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。URL是URI的子集。
1.5. 告知服务器意图的HTTP方法
HTTP/1.1中可使用的方法
1.5.1. GET:获取资源
1.5.2. POST:传输实体主体
1.5.3. PUT:传输文件
HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,一般Web网站不使用该方法
1.5.4. HEAD:获取报文首部
和GET方法一样,不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间。
1.5.5. DELETE:删除文件
DELETE方法用来删除文件,与PUT相反的方法。HTTP/1.1的DELETE和PUT一样不带验证机制。
1.5.6. OPTIONS:询问支持的方法
OPTIONS方法用来查询针对请求URI指定的资源支持的方法
1.6. 持久连接节省通信量
HTTP协议的初始化版本中,每进行一次HTTP通信就要断开一次TCP连接。
1.6.1. 持久连接
HTTP/1.1和一部分的HTTP/1.0想出了持久连接的方法。
持久连接的特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
HTTP/1.1中,所有的连接默认都是持久连接
1.6.2. 管线化
持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。
1.7. 使用Cookie的状态管理
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie的首部字段信息,通知客户端保存 Cookie。
当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
2. 返回结果的HTTP状态码
2.1. 状态码告知从服务器返回的请求结果
状态码以3位数字和原因短语组成。
数字中的第一位指定了响应类别,后两位无分类。
2.2. 2XX 成功
2XX的响应结果表明请求被正常处理了。
2.2.1. 200 OK
表示从客户端发来的请求在服务器端被正常处理了。
2.2.2. 204 NO Content
表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
返回204响应,浏览器显示的页面不发生更新。
2.2.3. 206 Partial Content
表示客户端进行了范围请求,服务端成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
2.3. 3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
2.3.1. 301 Moved Permanently
永久性重定向
该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
2.3.2. 302 Found
临时性重定向
该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能够使用新的URI访问。
2.3.3. 303 See Other
该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使用时大家都会这么做。
2.3.4. 304 Not Modified
该状态码表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况。
304状态码返回时,不包含任何响应的主体部分。
304虽然被划分在3XX类别中,但是和重定向没有关系
2.4. 4XX 客户端错误
4XX的响应结果表明客户端是发生错误的原因所在。
2.4.1. 400 Bad Request
该状态码表示请求报文中存在语法错误。
2.4.2. 401 Unauthorized
该状态码表示发送的请求需要有通过HTTP认证的认证信息。
当浏览器初次接收到 401 响应,会弹出认证用的对话窗口
2.4.3. 403 Forbidden
该状态码表明对请求的访问被服务器拒绝了。
未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)等列举的情况都可能发生403的原因
2.4.4. 404 Not Found
该状态码表明服务器上无法找到请求的资源。
也可以在服务器端拒绝请求且不想说明理由时使用
2.5 5XX 服务器错误
5XX 的响应结果表明服务器本身发生错误。
2.5.1. 500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。
也有可能时Web应用存在的bug或某些临时的故障
2.5.2 503 Service Unavailble
该状态码表明服务器暂时处于超负载或进行停机维护,现在无法处理请求。
状态码和状况的不一致
不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如 Web 应用程序内部发生错误,状态码依然返回 200 OK,这种情况也经常遇到
3. 与HTTP协作的Web服务器
一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率
3.1. 用单台虚拟主机实现多个域名
HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点。
在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。当请求发送到服务器时,已经是以IP地址形式访问了。
3.2. 通信数据转发程序:代理、网关、隧道
HTTP通信时,除客户端和服务器以外,还有用于通信数据转发的应用程序,如代理、网关和隧道。
3.2.1. 代理
代理服务器的基本行为就是接受客户端发送的请求后转发给其他服务器。
持有资源实体的服务器被称为源服务器。从源服务器返回的响应经
过代理服务器后再传给客户端。
转发时,需要附加Via 首部字段以标记出经过的主机信息
使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。
3.2.2. 网关
与代理十分相似,而网关能使通信线路上的服务器提供非HTTP协议服务。
利用网关能够提高通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接安全。
3.2.3. 隧道
隧道可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。
隧道的目的是确保客户端能与服务器进行安全的通信。
隧道本身不会去解析 HTTP 请求。也就是说,请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。
下一篇:HTTP + 加密 + 认证 + 完整性保护 = HTTPS
以上是关于HTTP入门的主要内容,如果未能解决你的问题,请参考以下文章