HTTP(Hyper Text Transfer Protocol(超文本传输协议))是一个简单的请求-响应协议,它通常运行在 TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCII 码形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP 是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP 是一种协议规范,这种规范记录在文档上,为真正通过 HTTP 协议进行通信的 HTTP 的实现程序。HTTP 协议是基于 C/S 架构进行通信的,而 HTTP 协议的服务器端实现程序有 httpd、nginx 等,其客户端的实现程序主要是 Web 浏览器。

  • HTTP 是一种无状态协议,即对于事务处理没有记忆能力,服务器不保留与客户交易时的任何状态,如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
  • HTTP 是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。
  • HTTP 规范定义了 9 种请求方法:get、post、delete、put、head、trace、options、patch、connect。
  • 默认端口 80

客户端发送一个 HTTP 请求消息包括以下格式:请求行(request line)、请求头部(header)、空行、请求数据。
例如:

xml.open("POST", "1.php", true); //请求行
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //请求头部
xml.send("name=123&age=27"); //请求数据

HTTP 响应状态行、消息报头、空行和响应正文。
例如:

HTTP/1.1 200 OK       // 状态行
X-Powered-By: Express               // 消息报头
date: Wed, 11 Sep 2019 02:37:31 GMT // 消息报头
content-type: application/json;charset=UTF-8 // 消息报头
transfer-encoding: chunked // 消息报头
connection: close

HTTP 响应头:

  • Allow 服务器支持哪些请求方法(如 GET、POST 等)。
  • Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到 Content-Type 头指定的内容类型。利用 gzip 压缩文档能够显著地减少 HTML 文档的下载时间。
  • Content-Length 表示内容长度。只有当浏览器使用持久 HTTP 连接时才需要这个数据。
  • Content-Type 表示后面的文档属于什么 MIME 类型。Servlet 默认为 text/plain,但通常需要显式地指定为 text/html(content-type:text/xml; charset= utf-8)。
  • Date 当前的 GMT 时间
  • Expires 应该在什么时候认为文档已经过期,从而不再缓存它
  • Last-Modified 文档的最后改动时间
  • Location 表示客户应当到哪里去提取文档
  • Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计
  • Server 服务器名字
  • Set-Cookie 设置和页面关联的 Cookie
  • WWW-Authenticate 客户应该在 Authorization 头中提供什么类型的授权信息

HTTP 状态码
常见:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它 URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

5 种分类:

  • 1** 信息,服务器收到请求,需要请求者继续执行操作
    1)100 Continue 继续。客户端应继续其请求
    2)101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议

  • 2** 成功,操作被成功接收并处理
    1)200 OK 请求成功。一般用于 GET 与 POST 请求
    2)201 Created 已创建。成功请求并创建了新的资源
    3)202 Accepted 已接受。已经接受请求,但未处理完成
    4)203 Non-Authoritative Information 非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本
    5)204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
    6)205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
    7)206 Partial Content 部分内容。服务器成功处理了部分 GET 请求

  • 3** 重定向,需要进一步的操作以完成请求
    1)300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
    2)301 Moved Permanently 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替
    3)302 Found 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI
    4)303 See Other 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看
    5)304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
    6)305 Use Proxy 使用代理。所请求的资源必须通过代理访问
    7)306 Unused 已经被废弃的 HTTP 状态码
    8)307 Temporary Redirect 临时重定向。与 302 类似。使用 GET 请求重定向

  • 4** 客户端错误,请求包含语法错误或无法完成请求

1)400 Bad Request 客户端请求的语法错误,服务器无法理解
2)401 Unauthorized 请求要求用户的身份认证
3)402 Payment Required 保留,将来使用
4)403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
5)404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
6)405 Method Not Allowed 客户端请求中的方法被禁止
7)406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
8)407 Proxy Authentication Required 请求要求代理的身份认证,与 401 类似,但请求者应当使用代理进行授权
9)408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
10)409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
11)410 Gone 客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置
12)411 Length Required 服务器无法处理客户端发送的不带 Content-Length 的请求信息
13)412 Precondition Failed 客户端请求信息的先决条件错误
14)413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息
15)414 Request-URI Too Large 请求的 URI 过长(URI 通常为网址),服务器无法处理
16)415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
17)416 Requested range not satisfiable 客户端请求的范围无效
18)417 Expectation Failed 服务器无法满足 Expect 的请求头信息

  • 5** 服务器错误,服务器在处理请求的过程中发生了错误

1)500 Internal Server Error 服务器内部错误,无法完成请求
2)501 Not Implemented 服务器不支持请求的功能,无法完成请求
3)502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
4)503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的 Retry-After 头信息中
5)504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
6)505 HTTP Version not supported 服务器不支持请求的 HTTP 协议的版本,无法完成处理

本面试题为前端常考面试题,后续有机会继续完善。我是歌谣,一个沉迷于故事的讲述者。

欢迎一起私信交流。

“睡服“面试官系列之各系列目录汇总(建议学习收藏)

“约见”面试官系列之常见面试题第十六篇之http(建议收藏)相关推荐

  1. “约见”面试官系列之常见面试题第二十六篇之vue-router的hash和history(建议收藏)

    这篇文章主要介绍了Vue-router 中hash模式和history模式的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Vue-router 中hash模式和hi ...

  2. “约见”面试官系列之常见面试题第二十九篇之Vue和React的区别

    vue与react的不同之处是什么?下面本篇文章就来给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. vue与react,两者都为当下主流框架 相同之处在于: 使用 V ...

  3. “约见”面试官系列之常见面试题第二十八篇之vue中的混合(minix)实例理解

    minix 是个什么东西, 就是混合,把你混合给我 浅显表述就是 你说 : '我叫李四', 我说 : '我叫张三', 然后把你 混合给我, 就成了 我说 : '我叫张三我叫李四', 所有解说都在例子里 ...

  4. “约见”面试官系列之常见面试题第二十四篇之vue-router使用(建议收藏)

    开发的时候有时候会遇到一种情况,比如 :点击这个链接跳转到其他组件的情况,通常会跳转到新的页面,蛋是,我们不想跳转到新页面,只在当前页面切换着显示,那么就要涉及到路由的嵌套了,也可以说是子路由的使用. ...

  5. “约见”面试官系列之常见面试题第二十二篇之函数闭包(建议收藏)

    目录 1.概念 2.特点 3.闭包的创建:­­­ ---------------------------------------------我是容易看懂的分界线-------------------- ...

  6. “约见”面试官系列之常见面试题第十九篇之数组去重(建议收藏)

    目录 数组去重的方法 一.利用ES6 Set去重(ES6中最常用) 二.利用for嵌套for,然后splice去重(ES5中最常用) 三.利用indexOf去重 四.利用sort() 五.利用对象的属 ...

  7. “约见”面试官系列之常见面试题第十八篇之深拷贝和浅拷贝得区别(建议收藏)

     壹 ❀ 引 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力. 此篇文章中也会简 ...

  8. “约见”面试官系列之常见面试题第十五篇之jsonp(建议收藏)

    目录 什么是jsonp 首先先知道 为什么需要JSONP? JSONP的原理 jsonp的第一种方式,将目标作为js形式加载过来,尽管其实对方是一个php 一.Ajax工作原理 二.Jsonp工作原理 ...

  9. “约见”面试官系列之常见面试题第十四篇之所有数据类型(建议收藏)

    最近有很多人说数据类型是 6种.我怎么记得JS的数据类型有8种.最近发现好多人对JS的基础不太了解.很多数据类型都没有搞清楚.不BB,我就按我的理解写一波笔记,每次看一波书我就感觉一次比一次多懂一点. ...

最新文章

  1. “35岁才是一个程序员成熟的开始!”
  2. jsp实现简单的分页
  3. 【Timbre,Amplitude,Pitch】声音的基本属性
  4. Android学习第一书
  5. 这家剑桥校友创办的苏州AI独角兽,再获4.1亿投资,将在国内IPO
  6. html js 添加数据类型,js数据类型判断和转换
  7. Spring-AOP概述
  8. js操作json方法总结
  9. android md 颜色,安卓MD(Material Design)规范
  10. linux mysql 内存监控_MySQL监控性能的一些方法总结
  11. What's the difference between Unicode and UTF-8?
  12. addeventlistener 清除_科普100秒 | 吃花生能软化血管、清除垃圾?
  13. [转载] python异常和错误有什么区别_python的错误和异常
  14. python之format函数学习
  15. 序列二次规划——SQP
  16. 专业实训三:智慧养老商业画布举例
  17. debian上虚拟机安装系统
  18. redis实现分布式锁的几种方式
  19. 594万元奖金 | “2020 年全国人工智能大赛”重磅启动
  20. oracle 启用job,Oracle job启动与关闭

热门文章

  1. UOJ Test Round 3
  2. 函数的命名空间以及作用域
  3. su su - sudo
  4. 很好的理解遗传算法的样例
  5. JS 计算日期天数差
  6. JTable 一个最好的例子
  7. mysql索引优化实际例子_MySQL索引优化的实际案例分析
  8. python 矩阵获取行数_4个最佳项目创意的代码片段和示例,旨在为Python和机器学习构建出色的简历!...
  9. 【RK3399Pro学习笔记】七、ROS订阅者Subscriber的编程实现
  10. Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O