• 简述

它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。
HTTP报文的流动方向
一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到“服务器”,在服务器工作完成之后,报文又会从“服务器”流到“代理”再流到“客户端”
报文的语法
所有的HTTP报文都可以分为两类,请求报文和响应报文。请求和响应报文的基本报文结构大致是相同的,只有起始行的语法有所不同。

请求报文:它会向Web服务器请求一个动作

请求报文的格式:

起始行: <method> <request-URL> <version>

头部: <headers>

主体: <entity-body>


响应报文:它会将请求的结果返回给客户端。

响应报文的格式

起始行: <version> <status> <reason-phrase>

头部: <headers>

主体: <entity-body>


拓展:
HTTP报文的组成部分
对报文进行描述的起始行、包含属性的头部块、可选的,包含数据的主体部分
1、起始行:所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明了要做些什么。响应报文的起始行说明发生了什么。

请求报文的起始行:该行包含了一个方法和一个请求的URL,还包含HTTP 的版本。

响应报文的起始行:该行包含了响应报文使用的HTTP版本、数字状态码、原因短语。

2、头部:HTTP首部字段向请求和响应报文中添加了一些附加信息。本质上来说,它们只是一些名/值对的列表。头部和协议配合工作,共同决定了客户端和服务器能做什么事情。

头部的分类:

通用头部:既可以出现在请求报文中,也可以出现在响应报文中,它提供了与报文相关的最基本的信息

Connection:允许客户端和服务器指定与请求/响应连接有关的选项

Date:提供日期和时间标志,说明报文是什么时间创建的

MIME-Version:给出了发送端使用的MIME版本

Trailer:如果报文采用了分块传输编码方式,就可以用这个首部列出位于报文拖挂部分的首部集合

Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式

Update:给出了发送端可能想要“升级”使用的新版本或协议

Via:显示了报文经过的中间节点(代理、网关)

Cache-Control:用于随报文传送缓存指示

请求头部:请求头部是只在请求报文中有意义的头部。用于说明是谁或什么在发送请求、请求源自何处,或者客户端的喜好及能力

Client-IP:提供了运行客户端的机器的IP地址

From:提供了客户端用户的E-mail地址

Host:给出了接收请求的服务器的主机名和端口号

Referer:提供了包含当前请求URI的文档的URL

UA-Color:提供了与客户端显示器的显示颜色有关的信息

UA-CPU:给出了客户端CPU的类型或制造商

UA-OS:给出了运行在客户端机器上的操作系统名称及版本

UA-Pixels:提供了客户端显示器的像素信息

User-Agent:将发起请求的应用程序名称告知服务器

Accept:告诉服务器能够发送哪些媒体类型

Accept-Charset:告诉服务器能够发送哪些字符集

Accept-Encoding:告诉服务器能够发送哪些编码方式

Accept-Language:告诉服务器能够发送哪些语言

TE:告诉服务器可以使用那些扩展传输编码

Expect:允许客户端列出某请求所要求的服务器行为

Range:如果服务器支持范围请求,就请求资源的指定范围

If-Match:如果实体标记与文档当前的实体标记相匹配,就获取这份文档

If-Modified-Sinec:除非在某个指定的日期之后资源被修改过,否则就限制这个请求

If-None-Match:如果提供的实体标记与当前文档的实体标记不相符,就获取文档

If-Range:允许对文档的某个范围进行条件请求

If-Unmodified-Since:除非在某个指定日期之后资源没有被修改过,否则就限制这个请求

Authorization:包含了客户端提供给服务器,以便对其自身进行认证的数据

Cookie:客户端用它向服务器传送数据

Cookie2:用来说明请求端支持的cookie版本

Max-Forward:在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数

Proxy-Authorization:这个首部在与代理进行认证时使用的

Proxy-Connection:这个首部是在与代理建立连接时使用的

响应头部:响应头部为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令

Age:(从最初创建开始)响应持续时间

Public:服务器为其资源支持的请求方法列表

Retry-After:如果资源不可用的话,在此日期或时间重试

Server:服务器应用程序软件的名称和版本

Title:对HTML文档来说,就是HTML文档的源端给出的标题

Warning:比原因短语更详细一些的警告报文

Accept-Ranges:对此资源来说,服务器可接受的范围类型

Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端

Proxy-Authenticate:来自代理的对客户端的质询列表

Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识

Set-Cookie2:与Set-Cookie类似

WWW-Authenticate:来自服务器的对客户端的质询列表

实体首部:描述主体的长度和内容,或者资源自身

Allow:列出了可以对此实体执行的请求方法

Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的位置(URL)上去

Content-Base:解析主体中的相对URL时使用的基础URL

Content-Encoding:对主体执行的任意编码方式

Content-Language:理解主体时最适宜使用的自然语言

Content-Length:主体的长度

Content-Location:资源实际所处的位置

Content-MD5:主体的MD5校验和

Content-Range:在整个资源中此实体表示的字节范围

Content-Type:这个主体的对象类型

ETag:与此实体相关的实体标记

Expires:实体不再有效,要从原始的源端再次获取实体的日期和时间

Last-Modified:这个实体最后一次被修改的日期和时间

扩展首部:规范中没有定义的新首部,开发者可以自定义一个首部的值/对

3、实体的主体部分:该部分其实就是HTTP要传输的内容,是可选的。HTTP报文可以承载很多类型的数字数据,比如,图片、视频、HTML文档电子邮件、软件应用程序等等。


HTTP方法:并不是每个服务器都实现了所有的方法。即使服务器实现了所有这些方法,这些方法的使用很可能也是受限的。例如,支持DELETE方法或PUT方法的服务器可能并不希望任何人都能够删除或存储资源,这些限制通常都是在服务器的配置中进行设置的。

常用的HTTP方法:

GET方法:通常用于请求服务器发送某个资源。不包含主体

HEAD方法:与GET方法类似,但服务器在响应中只返回首部,使用HEAD方法可以,在不获取资源的情况下了解资源的情况(比如,判断其类型);通过查看响应中的状态码,看看某个对象是否存在;通过查看首部,测试资源是否被修改了;不包含主体

POST方法:该方法是用来向服务器发送数据的,常用于HTML表单,包含主体

PUT方法:该方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,如果那个URL已经存在的话,就用这个主体来替代它。包含主体

TRACE方法:主要用于验证请求是否如愿穿过了请求/响应链,不包含主体

OPTIONS方法:决定可以在服务器上执行那些方法,不包含主体

DELETE方法:该方法就是请服务器删除请求URL所指定的资源,但是客户端应用程序无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求,不包含主体

扩展方法:指的是没有在HTTP/1.1规范中定义的方法,这些方法为开发者提供了一种扩展这些HTTP服务能力的手段。


状态码:HTTP状态码被分成了五大类。状态码为客户端提供了一种理解事务处理结果的便捷方式。

1、100~199(信息性状态码):HTTP/1.1向协议中引入了信息性状态码

2、200~299(成功状态码):客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求

3、300~399(重定向状态码):重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容

4、400~499(客户端错误状态码):有时客户端会发送一些服务器无法处理的东西。浏览网页时,我们都看到过臭名昭著的404 Not Found错误码,这只是服务器在告诉我们,它对我们请求的资源一无所知

5、500~599(服务器错误状态码):有时客户端发送了一条有效请求,服务器自身却出错了,这些会返回5xx状态码
Request与Response常用方法总结

Request和Response的常用方法:

Request类:

1. setAttribute()在Request域中存储数据

2. setCharacterEncoding()设置请求参数的编码方式,只对post请求有效

3. getMethod()获取请求类型

4. getParameter()获取指定请求参数值

5. getParameterNames()获取所有请求参数,返回一个Enumeration枚举类

6. getAttribute()获取域中存储的数据

7. getAttributeNames()获取域中所有数据,返回一个Enumeration枚举类

8. getContextPath()返回当前WEB项目相对路径

9. getCookies()获取所有Cookie,返回一个Cookie数组

10. getRequestDispatcher()获取转发器,参数路径以/打头,代表WebRoot(当前WEB项目根目录)

11. getSession()获取Session对象

Response类:

1. setContentType()告知浏览器数据类型

2. setCharacterEncoding设置Response的编码方式

3. setHeader()设置消息头

4. setStatus()设置状态吗

5. addCookie()添加Cookie

6. sendRedirect()重定向

7. getOutputStream()获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)

8. getWriter()获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能

Http报文和Request和Response的常用方法的更多相关文章

  1. request和response的常用方法

    一.request   1.setAttribute()在Request域中存储数据  2.setCharacterEncoding()设置请求参数的编码方式,只对post请求有效  3.getMet ...

  2. HTTP协议中request和response常用方法

    一.request的常用方法:1.获取请求的方式 getMethod()2.目录的路径 getContextPath()3.获取servlet路径 getServletString()4.获得get请 ...

  3. 【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w

    镜像拉取一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cancel ...

  4. Request和response的用法总结

    Request 个我总结:只要记住 只要是有关于客户端请求的信息,都可以藉由它来取得,例如请求标头.请求方法.请求参数.使用者IP等等信息. 3.什么情况下为响应?什么情况下为请求? 简单一句话,请求 ...

  5. springMVC获取request和response

    转载:http://blog.sina.com.cn/s/blog_7085382f0102v9jg.html 1.参数 例如: @RequestMapping("/test") ...

  6. ASP.NET中的Request、Response、Server对象

    Request对象 Response.Write(Request.ApplicationPath) //应用根路径 Request.AppRelativeCurrentExecutionFilePat ...

  7. JavaWeb(一)Servlet中的request与response

    一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...

  8. Request和Response

    1 简介 web服务器收到客户端的http请求,会针对每一个请求,分别创建一个用于代表请求的request对象和代表响应的response对象. request和response对象既然代表请求和响应 ...

  9. 第十五节:HttpContext五大核心对象的使用(Request、Response、Application、Server、Session)

    一. 基本认识 1. 简介:HttpContext用于保持单个用户.单个请求的数据,并且数据只在该请求期间保持: 也可以用于保持需要在不同的HttpModules和HttpHandlers之间传递的值 ...

随机推荐

  1. WEB前端资源集(二)

    在上一篇为大家整理出了一些资源网站,接下来给大家整理了一些开发中常用的工具. 开发工具篇 开发工具集 Sublime Text 3:SublimeText 3是一个代码编辑器,也是HTML和散文先进的 ...

  2. 原创:CentOS 环境中 Zabbix 3.4 的安装部署实践

    IT管理工作中,如果没有对服务器.网络设备.服务.进程.应用等的监控,往往是用户发送问题报告后才知道出了问题.事后救火显得被动,不能从容面对问题. 才有了部署一套网络监控系统的想法,机缘巧合下结识了Z ...

  3. 缓存系统——redis数据库

    缓存系统有:mongodb.redis(速度更快).memcache 学习memcached 参考:http://www.cnblogs.com/wupeiqi/articles/5132791.ht ...

  4. lsync+rsync 实时同步(ubuntu16.04系统)

    1.同步端需要安装 lsync/rsyncapt-get install lsyncd rsync2.生成ssh公钥,粘贴到目标机器里面3.创建配置文件mkdir /etc/lsyncdcat /et ...

  5. Autotestplat.com 更新了!

    1 提供测试发帖留言功能 2 自动化平台体验功能 3 提供招聘资讯功能       4 提供推荐书籍功能

  6. Simpo

    Time: 2017-01-16 - Download Github: https://github.com/KeliCheng/Simpo一款快速发布文字和图片到社交网站的macOS菜单栏App,目 ...

  7. charles添加https支持

  8. uploadifive如何动态传参

    直接上代码 关键:$('#file_upload').data('uploadifive').settings.formData = { 'ID': 'ceshi'}; //动态更改formData的 ...

  9. iPhone6爆炸真是小概率事件吗?

    前不久,央视新闻报道,根据上海市消费者权益保护委员会统计,2016年9月到11月,共接到8名消费者投诉,反映其苹果手机在正常使用或者正常充电的情况下突然爆炸.此外,苹果手机还被投诉存在自动关机等问题, ...

  10. C#面向对象--属性

    一.属性(Property)作为类和结构的成员,是对字段的一种封装方式,实际上是一种特殊的方法,被称为访问器(Accessor),从而隐藏实现和验证代码,有助于提高字段读取和赋值的安全性和灵活性: 1 ...