前言

  1. http是什么
  2. https是什么
  3. http请求头包含哪些内容
  4. http建立连接过程
  5. get post什么区别

http

hypertext transfer protocol,超文本传输协议,可以传输文本之外的内容。

请求头

http请求报文包括了:

  1. 请求行: 请求方法+请求url+http协议和版本
  2. 请求头
  3. 报文体

请求方法

请求方法的作用表明对给定资源进行操作的方法,资源就是uri,url只是uri的子集,不同的请求方法有不同的语义化。

最常见的方法就是get post

浏览器方面的get post:

  1. get是获取资源用的,幂等,可以被缓存
  2. post用来提交表单,不是幂等的(多次操作会结果不一样),无法进行缓存。

数据请求中的get post

  1. 只是写法不同 都是基于tcp/ip同一个传输层协议
  2. 一般而言,get参数都是在拼接在url中 ?name=xiaofei&age=10这种形式,而post参数一般都放在body中。
  3. 相对而言,post相比get更加安全,url中的参数明文可见,但因为http本身就是不安全传输 post的传输也是可以看到的
  4. get请求参数最大长度4k,但这个限制是浏览器本身的原因(性能安全等考虑),post则没这个限制。
  5. 使用场景而言,get通常用来获取数据,post用来提交表单数据。

其他请求方法

head: 获取报头和get类似,响应没有具体内容 put: 替换指定文档内容,修改内容 delete: 删除指定资源 options: 目标资源的通信选项,服务器基于从预检请求头部获得的信息来判断,是否接受接下来的实际请求。比如跨域情况 通常先options请求 然后再实际的请求方式。

Head请求:只请求页面的首部,和get返回的数据区别在于get把请求资源内容带回来了,但是有时候比如网络环境不是很好或者只是想了解下资源的一些状况,比如大文件资源先获取其大小再决定要不要下载。节约带宽。

无状态和cookie

http连接是无状态的,就是说http每一次连接并不会对请求或者响应之间的通信状态进行保存,不会做持久化处理。这样的话能处理更多的事务。

但是后续的业务发展比如购物网站网页之间的跳转需要保持登录状态信息。引入cookie来处理。

  1. cookie是保存在客户端
  2. 客户端发起请求,如果没有带cookie则服务器会在响应报文中发个set-cookie通知客户端保存cookie,
  3. 客户端在下次发送请求时候报文内容带上cookie信息,这样服务端通过对比cookie信息知道是哪个客户端,得到之前的连接状态。

常见的状态码

常见状态码rfc2616

http状态码详解

  1. 1xx临时的信息响应 请求已被接受需要继续处理,这时候的响应信息都是临时的,客户端需要等待服务器采取进一步行动。

    1. 100 continue 客户端继续发送请求主题
    2. 101 服务器已经理解客户端请求,通知客户端采用不同的协议来处理当前请求
  2. 2xx 响应成功了,表示被服务器接收、理解并接受。

    1. 200 OK 响应成功 响应的响应头或者数据体也随此响应返回了。
    2. 201 created 请求被实现 已经有个新的资源根据请求被创建,其uri应该随着Location头信息返回。一般而言 要是rest api设计的话 对于表单提交新建的内容应该就通过201来表征 不过目前大部分api设计都是通过200来表示
    3. 202 Accepted 请求已经被服务端理解了,但并没有立即执行,后续可能执行也可能不执行。
    4. 204 No content, 客户提交了表单但不需要接受响应。比如服务器接受了客户端的更新请求,并不需要客户端页面内容有任何更新这时候就返回204。或者说用户提交一个调查表 填完提交就完事了,客户端不需要返回任何内容。
    5. 205 reset content,和204一样不需要要返回内容,但是要求客户端重置文档视图,比如提交了表单之后需要客户端重置表单
    6. 206 partial content, 服务器处理了部分请求,类似迅雷下载这种大文件分成多个阶段下载,上传文件也是断点续传的方式。
  3. 3xx 重定向,客户端需要采取进一步操作

    1. 301 Moved Permanently,永久重定向,需要请求的地址发生了变化,新的url在响应Location中返回
    2. 302 Found 临时重定向
    3. 303 see other 总是通过get请求新的uri
    4. 304 not modified,缓存相关,缓存没过期,服务器不返回数据,让客户端直接从缓存中获取内容
    5. 305 use proxy, 请求的资源需要使用代理来请求,比如内网资源需要使用vpn代理来请求。
  4. 4xx 客户端发生了错误,导致服务器理解不了处理不了。通常开发过程中要是这个错误 需要前端检查下请求发起是不是有问题了。

    1. 400 bad request, 请求参数是不是除了问题
    2. 401 unauthorized 未授权,需要WWW-Authenticate这个信息
    3. 403 forbidden,服务器直接给拒绝了,可以不给拒绝理由。如果隐蔽点 就直接给你404 不让你知道啥原因
    4. 404 not found。没找到资源,额 对这也算是客户端的问题
    5. 405 method not allowed。请求方法错误了,语义化
  5. 5xx 服务器错误,开发过程中要是遇到这个问题 基本是上都是先问下后端服务是否出了问题吧

    1. 500 Internal server error, 服务器内部错误
    2. 501 not implemented 服务器不支持处理某个请求
    3. 502 bad gateway,网关错误。首先理解网关是什么,比如从一个房间走到另一个房间 需要先通过一扇门,网关也是一个网络连接另一个网络之间的关口。网关错误表示当前服务器理解并去处理当前请求这个请求需要上游服务器给相关响应,但是上游服务器给的响应是无效的。
    4. 503 service unavailable,服务不可用,可能服务挂了宕机了
    5. 504 gateway timeout,网关超时。参考502,网关在处理或者等待上游服务器响应时候超时了。