面试问题汇总:

  1. 谈一下什么是HTTP协议?
  2. 谈一下请求、请求报文?
  3. 谈一下响应报文?
  4. HTTP请求/响应的步骤是什么,简单说一下?
  5. get和post请求有什么区别,简单谈一下?
  6. 简单说一下抓包工具?

1-什么是HTTP 协议

即超文本传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。

  • HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。
  • 即HTTP协议主要由请求和响应构成。

http协议原理图示

2-什么是请求|请求报文

常用请求方法 POST、GET、PUT、DELETE
请求由客户端发起,其规范格式为:请求行、请求头、请求主体。

  • 请求行

    由请求方式、请求URL和协议版本构成
  • 请求头
    • Host:localhost请求的主机
    • Accept:/ 接受的文档MIME类型
    • User-Agent:很重要
    • Referer:从哪个URL跳转过来的
    • Accept-Encoding:可接受的压缩格式
  • 请求主体
    即传递给服务端的数据
    注:当以post形式提交表单的时候,请求头里会设置
    Content-Type: application/x-www-form-urlencoded,以get形式当不需要

    • 特殊的请求头介绍:
    • Content-Type:""
    • referer: 请求头
    • refresh 响应头
    • Content-Type: 响应头

get请求报文

  GET http://localhost:3000/?username=123&password=456 HTTP/1.1Host: localhost:3000Connection: keep-aliveUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36Sec-Fetch-Mode: navigateSec-Fetch-User: ?1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3Sec-Fetch-Site: noneAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cookie: Webstorm-ef037c84=6dd4cb30-4200-4430-b5a8-a4ca17524f5dIf-None-Match: W/"25-SfBxcqQTxSsstDatHQMe/b3IUyc"
  • 请求首行
    GET http://localhost:3000/?username=123&password=456 HTTP/1.1

    • GET 请求方式
    • http://localhost:3000/?username=123&password=456 请求地址(包含请求参数)
    • HTTP/1.1 协议名/版本号
  • 请求头
    • Host: localhost:3000 请求主机地址
    • Connection: keep-alive 保持长连接
    • Upgrade-Insecure-Requests: 1 允许使用https协议
    • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 用户代理:浏览器版本
    • Sec-Fetch-Mode: navigate
      Sec-Fetch-User: ?1
      Sec-Fetch-Site: none
      Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3 浏览器允许接受的数据格式
      - text/plain 纯文本
      - text/html html文件
      - application/xhtml+xml xhtml文件
      - application/xml xml数据格式
      - application/json json格式
      - application/x-www-form-urlencoded form表单提交格式
    • Accept-Encoding: gzip, deflate, br 浏览器允许压缩格式
    • Accept-Language: zh-CN,zh;q=0.9 浏览器允许语言
    • Cookie: Webstorm-ef037c84=6dd4cb30-4200-4430-b5a8-a4ca17524f5d
      If-None-Match: W/“25-SfBxcqQTxSsstDatHQMe/b3IUyc”
      缓存
  • 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头
  • 请求体:请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length

post请求报文

  POST http://localhost:3000/ HTTP/1.1Host: localhost:3000Connection: keep-aliveContent-Length: 26Cache-Control: max-age=0Origin: http://localhost:63342Upgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36Sec-Fetch-Mode: navigateSec-Fetch-User: ?1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3Sec-Fetch-Site: same-siteReferer: http://localhost:63342/class0708-git/nodejs/day04/form.html?_ijt=e83ln6s23qvq8beejkp1j4rn14Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cookie: Webstorm-ef037c84=6dd4cb30-4200-4430-b5a8-a4ca17524f5dusername=jack&password=123
  • 请求首行
    POST http://localhost:3000/ HTTP/1.1
  • 请求头
    • Host: localhost:3000
      Connection: keep-alive
      Content-Length: 26 长度
    • Cache-Control: max-age=0 缓存
    • Origin: http://localhost:63342 请求来源的地址
    • Upgrade-Insecure-Requests: 1
      Content-Type: application/x-www-form-urlencoded
      请求体类型表单数据
    • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
      AppleWebKit/537.36 (KHTML, like Gecko)
      Chrome/77.0.3865.90 Safari/537.36
      Sec-Fetch-Mode: navigate
      Sec-Fetch-User: ?1
      Sec-Fetch-Site: same-site
      Accept:
      text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3
      Referer: http://localhost:63342/class0708-git/nodejs/day04/form.html?_ijt=e83ln6s23qvq8beejkp1j4rn14
      请求来源的完整地址:防盗链、广告计费
    • Accept-Encoding: gzip, deflate, br
      Accept-Language: zh-CN,zh;q=0.9
      Cookie: Webstorm-ef037c84=6dd4cb30-4200-4430-b5a8-a4ca17524f5d
  • 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头
  • 请求体
    • POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;
    • username=jack&password=123
      • 请求体参数(地址栏不可见,相对安全,post请求)
    • ?username=jack&password=123
      • 查询字符串(地址栏可见,get请求)

3-响应报文

响应由服务器发出,其规范格式为:状态行、响应头、响应主体。

  HTTP/1.1 200 OKX-Powered-By: ExpressContent-Type: text/html; charset=utf-8Content-Length: 31ETag: W/"1f-90g2D083lUkGh0x222x0zJGkv/w"Date: Sat, 12 Oct 2019 06:36:56 GMTConnection: keep-alive这是处理get请求的响应~

响应首行(状态行)

  • HTTP/1.1 200 OK
  • 200 响应状态码

    • 1xx: 请求还未完成,还需进一步处理
    • 2xx: 请求成功 200
    • 3xx: 请求重定向(请求的资源这里没有,需要去其他地方找)
      302 请求资源在其他地方(请求重定向)
      304 请求资源重定向缓存中
    • 4xx:请求资源未找到 404
      403没有权限
    • 5xx:服务器内部错误 500

响应头

  • X-Powered-By: Express
  • Content-Type: text/html; charset=utf-8
    响应体类型(响应资源的MIME类型)
  • Content-Length: 31
    响应体长度
  • ETag: W/“1f-90g2D083lUkGh0x222x0zJGkv/w”
    缓存
  • Date: Sat, 12 Oct 2019 06:36:56 GMT
    日期
  • Connection: keep-alive
  • Server:服务器信息

MIME是标识文件类型的,文件后缀并不能正确无误的标识文件的类型。
客户端与服务器在进行数据传输的时候都是以字节形式进行的,咱们可以理解成是以“文本形式”传输,这时浏览器就需要明确知道该怎么样来解析这些文本形式的数据,MIME就是明确告知浏览器该如何来处理。

空行

  • 最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。

响应体

  • 这是处理get请求的响应(即服务端返回给客户端的内容)

HTTP 请求/响应的步骤:

  • 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;
  • 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;
  • 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;
  • 释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
  • 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;

举个栗子:经典面试题 『从地址栏输入url地址到页面最终渲染完成,经历了什么?』

4-get 请求与post 请求区别

  1. get 发送的数据都在地址栏当中,不安全
  2. get 发送的数据对数据大小由限制。
  3. get 没有请求体
  4. post 发送的数据在请求体当中,相对安全
  5. post 对请求的数据的大小没有限制
  6. post 有一个特殊的请求头 Content-Type:application/x-www-form-urlencoded
  7. get 的请求头相对较少,性能稍微要高一些

5-调试工具

利用HTTP抓包工具在开发中可以帮我们进行调试,常用抓包工具HttpWatchFiddlerCharlesFireBug等。

  • 浏览器插件

    • Firebug、HttpWatch、chrome dev tools
  • 代理软件
    • Charles、Fiddler

6-总结

  • 这篇文章主要讲了HTTP是什么、请求报文、响应报文以及一些附加的知识点,希望聪明的你可以理解HTTP协议了。
  • 愿你在这个代码繁杂、头发渐秃的编码世界里,可以温暖自己,坚持学习。

生而为人,怎敢不努力,愿你在编码的路上温暖自己,坚持学习。


『传送门』✈『HTTP知识点』从地址栏输入url地址到页面最终渲染完成,经历了什么?
『传送门』✈ 什么是TCP三次握手和四次挥手【一文详解】
『传送门』✈ HTTP缓存机制与原理详解

『HTTP知识点』什么是HTTP协议?(HTTP协议详解)相关推荐

  1. 『MTCNN』2万多字教科书式详解

    发现一篇关于MTCNN的博文,本来打算自己写一篇的,但看了这篇,我觉得不用我再写了,转载跟大家分享一下 尊重原创,转载自:https://blog.csdn.net/sinat_39783664/ar ...

  2. HTTP协议状态码详解(HTTP Status Code)

    HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 ...

  3. SSL / TLS 协议运行机制详解

    转载自  SSL / TLS 协议运行机制详解 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和运行过程,不涉及具体的实现细节.如果想 ...

  4. 虚拟路由器冗余协议VRRP原理详解!

    虚拟路由器冗余协议VRRP原理详解! https://virtual.51cto.com/art/201905/596666.htm?pc 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前 ...

  5. HTTP协议状态码详解(HTTP Status Code)(转)

    原文链接:HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为:  200 – 服务器 ...

  6. 流媒体协议之RTMP详解

    流媒体协议之RTMP详解 文章目录 流媒体协议之RTMP详解 1 RTMP概述 2 RTMP交互过程 2.1 握手协议 2.2 RTMP分块(chunk) 2.3 协议控制消息(Protocol Co ...

  7. 流媒体协议之RTSP详解

    1 流媒体协议之RTSP详解 文章目录 1 流媒体协议之RTSP详解 1.1 RTSP概述 1.2 RTSP协议交互过程 1.2.1 RTSP基于TCP交互过程 1.2.2 RTSP基于HTTP的交互 ...

  8. 传输协议之ICMP详解

    文章目录 TCP和UDP ICMP 简介 ICMP出现的原因 ICMP的用途 ICMP作为IP的上层协议在工作(报文) ICMP实现之MTU探索 ICMP实现之改变路由 ICMP实现之源点抑制 ICM ...

  9. STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解

    STM32 MQTT协议 连接中国移动OneNet服务器 上传接收数据(二)MQTT协议常用报文详解 上一次我们讲了OneNet平台的注册,这次我们来讲一下MQTT的常用报文用法 上一篇地址https ...

最新文章

  1. python知识思维导图
  2. 论文阅读——《Exposure Control using Bayesian Optimization based on Entropy Weighted Image Gradient》
  3. linux杀气所以进程,Linux使用kill命令的注意事项
  4. 微软Build 2019大会.NET课程视频汇总
  5. java 代码风格_Java代码风格:最终决定
  6. 【转载】作者苗晓平介绍的飞鸽传书
  7. linux的定制和发布(二)
  8. 【2021牛客暑期多校训练营9】E Eyjafjalla (倍增,dfs序,主席树)
  9. 使用python 启动一个web服务
  10. android音频框架
  11. 汇编指令---ROL与ROR
  12. 缺陷报告单写作准则(5C)
  13. sloth(标点工具)使用说明
  14. 「hdu6638」Snowy Smile【稀疏矩阵最大子矩阵和】
  15. 体系结构 记分牌实例
  16. 一键模拟登陆华师大公共数据库!ver2.0
  17. 转:宁愿在真实前颤抖,也不愿在催泪弹下哭泣(今何在)
  18. git使用 - 暂存更改
  19. Python数据可视化matplotlib(一)—— 图表的基本元素
  20. 小米集团2023校招芯片设计笔试

热门文章

  1. 从gitlab上下载项目
  2. 前端的Docker入门与实践
  3. 增大计算机字体大小,怎么设置字体大小-一键就能调文字大小?Word当中你所不知的快捷键...
  4. matlab面试问题,一道面试题的matlab模拟代码
  5. 憋瞎说,大数据不是你想的那样!
  6. 于博士Cadence视频教程60集全套百度网盘分享
  7. 【AI折腾录】stable web ui基础【sd安装、lora vae embedding hyperwork等基础概念】
  8. 哈工大计算机学院实验室的情况介绍
  9. 【A卡,Windows】stable diffusion webui下载安装避坑指南
  10. 基于c#的区块链编程_C#编程之C#区块链零基础入门,学习路线图