HTTP

HTTP方法

以HTTP/1.1方法进行介绍。

GET: 获取资源
请求访问已被URI识别的资源。指定资源经服务器端解析后返回响应内容。

POST: 传输实体主体

GET和POST的区别:

  1. GET在url中提交,POST在request body中提交。
  2. GET请求会被浏览器自动缓存。
  3. GET有长度限制(HTTP协议本身没有URL长度限制,但处理过长URL会产生性能和安全问题,限制来源于浏览器和服务端。)
  4. 只支持ASCII码请求参数,POST没有限制。
  5. 安全性。在HTTP中二者都是明文传输,但GET的URL会被放在浏览历史和服务器日志中,相比较而言没有POST安全。但只要进行抓包,就能获得数据,因此为了实际的安全性,还是应该使用HTTPS。

总的来说,GET用于获取信息,可缓存,而POST可用于修改服务器上的数据,不可缓存。GET和POST的底层本质上都是TCP连接,传输上没有区别,只是从应用层协议上进行了约定。

PUT: 传输文件
在请求报文的主体中包含文件内容,保存到请求URI指定的位置。HTTP/1.1的PUT方法无验证机制,存在安全性问题。

HEAD: 获得报文首部
用于确认URI的有效性及资源的更新日期时间等。

DELETE: 删除文件
按照指定URI删除指定的资源。无验证机制。

OPTIONS:询问支持的方法

TRACE:追踪路径
让Web服务器将之前的请求通信环回给客户端。客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改的。

CONNECT: 要求用隧道连接代理
在与代理服务器通信时建立隧道,主要通过SSL和TLS把通信内容加密后经网络隧道传输。

HTTP首部

在这里插入图片描述
请求行:
包含请求的方法,请求URL和HTTP版本。
状态行:
包含表明响应结果的状态码,原因短语和HTTP版本。
通用首部字段:
在这里插入图片描述
请求首部字段:
在这里插入图片描述
响应首部字段:
在这里插入图片描述
实体首部字段:
在这里插入图片描述

连接管理

短连接与长连接

HTTP1.1 默认为长连接,如果关闭,Connection : close
HTTP1.1之前默认短连接,如果开启长连接,Connection : Keep-Alive

管线化

不用等待响应亦可发送下一个请求,能够同时并行发送多个请求。

状态管理

Cookie

通过在请求和响应报文中写入Cookie信息控制客户端的状态。
Cookie回根据从服务器端发送的响应报文内的Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,回自动在请求报文中加入Cookie再发送出去。服务器发现Cookie后,检查是哪个客户端发来的连接请求。

包括会话期Cookie,浏览器关闭后自动删除,以及持久性Cookie,指定过期时间或有效期。

Session

Session可以存储在服务器上的文件、数据库或者内存中。一般通过Cookie管理Session。
基于表单认证:

  1. 客户端将用户ID,密码等登录信息放入请求报文。
  2. 服务端通过验证登录信息进行身份认证,将用户的认证状态与Session ID绑定后存在服务器端。
  3. 服务端向客户端返回响应时,会在Set-Cookie字段中写入Session ID。
  4. 客户端收到该Session ID后,会将其作为Cookie保存在本地,下次向服务器发送请求时,Session ID也随之发送到服务器,服务器提取后继续之前的业务操作。

一旦被第三方盗用,可伪装进行恶意操作,Session ID字符串应该是难以推测的,同时进行时效性管理。另外需要定期进行用户的重新验证。

如果浏览器禁用Cookie,可将Session ID作为URL的参数进行传递。

HTTP状态码

在这里插入图片描述
常用状态码:
200 OK
客户端发来的请求在服务端被正常处理了。
204 No Content
请求已成功处理,但返回的响应报文不含实体的主体部分。
一般适用于只需客户端向服务端发信息,而对客户端不需要新信息的情况。
206 Partial Content
客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。
301 Moved Permanently
永久性重定向。请求的资源已被分配了新的URI。
302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303 See Other
由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。
虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下这么做。
304 Not Modified
客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件。
附带条件的请求是指采用 GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
307 Temporary Redirect
临时重定向。遵照浏览器标准,不会从 POST 变成 GET。
400 Bad Request
请求报文语法错误。
401 Unauthorized
发送的请求需要有通过 HTTP 认证的认证信息,若之前已进行过 1 次请求,则表示
用 户认证失败。当浏览器初次接收到 401 响应,会弹出认证用的对话窗口。
403 Forbidden
对请求资源的访问被服务器拒绝.
404 Not Found
服务器上无法找到请求的资源。也可以在服务器端拒绝请求且不想说明理由时使用。
500 Internal Server Error
服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。
503 Service Unavailable
服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值