重温Http协议--请求报文和响应报文

简介:   http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过http协议做一个类似于解码的工作,这样浏览器才能理解这个数据,然后为我们展示出来百度首页.

  http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过http协议做一个类似于解码的工作,这样浏览器才能理解这个数据,然后为我们展示出来百度首页.

  这相当于是一种规范,网络中数据的传输在位于应用之下的各层(传输层,应用层)来完成的,在tcp/ip协议接收到数据时,我们是不能直接使用和浏览的,需要先通过一种规范来进行梳理,也就是解码,得到浏览器支持的一种格式,才能被我们使用.

  在web开发中,熟悉http协议中的报文结构是很重要的,比如,如果对http报文不熟悉,在使用httpServletRequest很多方法的时候,就会陷入懵逼.

  http报文分为请求报文和响应报文.

请求报文(request message)

  请求报文分为三部分:首行,请求头,请求体.

  首行包括:请求类型,URL,HTTP版本.

  请求头部保存一些键值对的属性.

  请求体保存具体内容,一般为POST类型的参数.

  

常见的HTTP请求头属性

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept:告诉服务端,该请求所能支持的响应数据类型,专业术语称为MIME 类型,上图中表示支持text/html的响应格式.

  扩展:text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型,斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型)

Cookie:seraph.confluence=6389808%3A04c906749aac37bbfe595ff3149ac5c17bfcd298;Hm_lvt_4a7d8ec50cfd6af753c4f8aee3425070=1477401172,1479201037,1479895114; _ga=GA1.2.1021401543.1477401172; JSESSIONID=6C331887C562AF7839384C41D590CA9A;

  Cookie:将客户端的cookie放在请求头里一并发送给服务器端.

  这里就出了一个问题,网站A怎么保证自己请求体中保存的cookie就是网站A的cookie而不是网站B的cookie呢,这就和cookie里面的jsessionid有关系了,关于cookie,session,sessionid,jsessionid的区别联系,可以参考这个博文http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html

referer:https://www.baidu.com/linkurl=fjKPqTaoZV2a2g2H2kbBwdz0mgBgI06WLrVLrQhiKgu&wd=&eqid=841d77d20000a7ae00000004586b7070

  Referer:表示这个请求是从哪个url跳过来的,通过百度来搜索淘宝网,那么在进入淘宝网的请求报文中,Referer的值就是:www.baidu.com

  Cache-Control:max-age=0

  Cache-control:对服务端返回的相应内容进行缓存控制,即是否需要在客户端保存下来,如上表示不缓存.

  User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36

  User-Agent:用户代理,简称 UA,是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等信息

  Connection:keep-alive

  Connection:表示客户端与服务连接类型;Keep-Alive表示持久连接

  更多请求头属性可以参考这篇文章:HTTP响应头和请求头信息对照表

响应报文(response message)

  响应报文也由三部分组成,首行,响应头,响应体.

  首行分为报文协议及版本,响应码及状态描述

  

  状态码

1XX:信息性状态码

2XX:成功状态码,200 表示成功

3XX:重定向状态码

4XX:客户端错误状态码,404表示没有找到请求的资源

5XX:服务器端错误状态码,500表示内部错误

  关于响应报文的响应头属性,可以详见上面那个对照表链接.

  需要提一下的是,我们可以通过HttpServletResponse的setHeader()方法来自行添加响应头属性.

相关文章
|
13天前
|
缓存 安全 Java
深入解析HTTP请求方法:Spring Boot实战与最佳实践
这篇博客结合了HTTP规范、Spring Boot实现和实际工程经验,通过代码示例、对比表格和架构图等方式,系统性地讲解了不同HTTP方法的应用场景和最佳实践。
74 5
|
16天前
|
人工智能 网络协议 API
开发效率翻倍!Apipost这些协议调试秘籍,从HTTP到金融报文全搞定
Apipost是一款强大的API研发管理工具,支持多种协议与数据格式,包括HTTP(s)、WebSocket、SSE、gRPC、TCP及金融协议(如ISO 8583、FIX)。它内置国密算法库,提供HTTP文件秒传、全局参数配置等实用功能。在SSE调试中,可轻松处理AI模型流式响应;WebSocket与Socket.IO实现高效实时通信;GraphQL支持可视化Query编写;TCP模块解决金融报文编码难题;gRPC则具备服务反射与流式调试能力。Apipost不仅简化了多协议切换的复杂性,还自动生成文档,显著提升开发效率,让开发者专注于核心业务逻辑。
|
1月前
|
API Kotlin
动态URL构建与HTTP请求的Kotlin实现
动态URL构建与HTTP请求的Kotlin实现
|
1月前
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
323 83
|
1月前
|
缓存 安全 数据处理
Objective-C开发:从HTTP请求到文件存储的实战
Objective-C开发:从HTTP请求到文件存储的实战
|
1月前
|
API
掌握 HTTP 请求的艺术:理解 cURL GET 语法
掌握 cURL GET 请求的语法和使用方法是 Web 开发和测试中的基本技能。通过灵活运用 cURL 提供的各种选项,可以高效地与 API 进行交互、调试网络请求,并自动化日常任务。希望本文能帮助读者更好地理解和使用 cURL,提高工作效率和代码质量。
49 7
HTTP请求报文和响应报文
请求报文:从客户端发往服务器的报文叫请求报文。 响应报文:服务器收到请求报文后,作为响应发往客户端的报文称为响应报文。
89 0
|
存储 缓存 自然语言处理
【Node.js】HTTP协议、HTTP的请求报文和响应报文
HTTP 全称为超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传送协议,基于TCP的连接方式,它可以使浏览器更加高效,使网络传输减少。
|
缓存 安全 网络协议
HTTP请求报文和响应报文的格式
HTTP请求报文和响应报文的格式
267 0
|
域名解析 存储 网络协议
【计算机网络】应用层 : 万维网 和 HTTP 协议 ( 万维网概述 | HTTP 协议特点 | HTTP 协议连接方式 | HTTP 协议报文结构 | HTTP 请求报文 | HTTP 响应报文 )
【计算机网络】应用层 : 万维网 和 HTTP 协议 ( 万维网概述 | HTTP 协议特点 | HTTP 协议连接方式 | HTTP 协议报文结构 | HTTP 请求报文 | HTTP 响应报文 )
378 0
【计算机网络】应用层 : 万维网 和 HTTP 协议 ( 万维网概述 | HTTP 协议特点 | HTTP 协议连接方式 | HTTP 协议报文结构 | HTTP 请求报文 | HTTP 响应报文 )