HTTP请求报头详解
HTTP协议中的请求头和响应头
HTTP协议中的请求头和响应头HTTP协议是互联网中最重要的协议之一,它是实现Web服务的基础。
在HTTP通信过程中,客户端与服务器之间需要交换大量的信息,而其中的请求头和响应头则是最重要的两个部分。
本文将针对HTTP协议中的请求头和响应头进行详细介绍,探究其基本原理、常见类型以及使用方法,帮助读者更好地理解HTTP 协议。
HTTP请求头HTTP请求头通常包含以下内容:1. 请求的方法: HTTP协议规定了几种请求方法,包括GET、POST、PUT、DELETE等。
客户端在发送请求时需要指定请求方法,服务器接收到请求后便根据不同的方法处理请求。
2. 请求的URL:请求的URL通常指明了客户端请求数据的地址,包括主机名、端口号、路径等。
客户端通常通过浏览器输入URL来发起HTTP请求。
3. 请求的HTTP版本: HTTP标准目前有1.0和1.1两个版本,通常请求头中会包含HTTP版本信息。
4. 请求头部字段:请求头中可以包含多个字段,用于提供额外的请求信息,例如用户代理、接受的编码方式等。
5. 请求正文:请求体中包含了客户端向服务器传递的数据,通常用于提交表单数据或上传文件等操作。
HTTP响应头HTTP响应头通常包含以下内容:1. HTTP版本:响应头中会包含HTTP版本信息,以便客户端与服务器进行协议匹配。
2. 状态码: HTTP响应中的状态码用于表明服务器对请求的处理结果。
常见的状态码包括200表示成功、404表示未找到资源、500表示服务器内部错误等。
3. 响应头部字段:响应头中可以包含多个字段,用于提供响应信息,例如数据内容类型、服务器软件等。
4. 响应体:响应体中包含了由服务器返回给客户端的数据,可以是HTML页面、图片、视频等内容。
常见的请求头与响应头1. User-Agent:请求头中的User-Agent字段用于标明客户端浏览器的代理信息,例如Chrome、Safari等。
服务器可以利用该字段进行浏览器兼容性检测、广告投放等操作。
HTTP请求组成
HTTP请求组成http请求由三部分组成,分别是:请求⾏、消息报头、请求正⽂。
请求⾏格式:Method Request-URI HTTP-Version CRLFMethod表⽰请求⽅法代码Request-URI是⼀个统⼀资源标识符HTTP-Version表⽰请求的HTTP协议版本CRLF表⽰回车和换⾏(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
常见的请求GET 请求获取Request-URI所标识的资源POST 在Request-URI所标识的资源后附加新的数据HEAD 请求获取由Request-URI所标识的资源的响应消息报头PUT 请求服务器存储⼀个资源,并⽤Request-URI作为其标识DELETE 请求服务器删除Request-URI所标识的资源OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求常见的请求报头User-Agent:包含发出请求的⽤户信息。
Accept:Accept请求报头域⽤于指定客户端接受哪些类型的信息。
eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html⽂本。
Referer:告诉服务器我是从哪个页⾯链接过来的Cookie:⾝份凭证HTTP响应包HTTP响应也是由三个部分组成,分别是:状态⾏、消息报头、响应正⽂。
状态⾏格式:HTTP-Version Status-Code Reason-Phrase CRLFHTTP-Version表⽰服务器HTTP协议的版本Status-Code表⽰服务器发回的响应状态代码Reason-Phrase表⽰状态代码的⽂本描述。
常见的状态码200 OK 客户端请求成功400 Bad Request 客户端请求有语法错误,不能被服务器所理解403 Forbidden 服务器收到请求,但是拒绝提供服务404 Not Found 请求资源不存在500 Internal Server Error 服务器发⽣不可预期的错误503 Server Unavailable 服务器当前不能处理客户端的请求,⼀段时间后可能恢复正常常见的响应头Server Web服务器名称Set-cookie 服务器向客户端发送的信息Location 服务器通过这个头告诉浏览器去访问哪个页⾯,浏览器接收到这个请求后,通常会⽴刻访问Location头所指向的页⾯,通过配合302状态码Refresh 服务器通过这个告诉浏览器定时刷新浏览器。
HTTP报文(首部字段)
HTTP报⽂(⾸部字段)HTTP报⽂请求报⽂/响应报⽂结构: 报⽂⾸部 + (可选)报⽂主体(两者通过空⾏CR + LF来划分)使⽤⾸部字段是为了给浏览器和服务器提供报⽂主体⼤⼩、所使⽤的语⾔、认证信息等内容HTTP⾸部字段重复,这种情况在规范内尚未明确,根据浏览器内部处理逻辑的⽽不同,结果可能并不⼀致。
报⽂⾸部请求⾏/状态⾏请求⾏: 请求⽅法 + 请求URI(资源/CGI通⽤⽹关接⼝) + HTTP版本状态⾏: HTTP版本 + 状态码 + 原因短语⾸部字段(请求/响应⾸部字段 + 通⽤⾸部字段 + 实体⾸部字段)其他(在HTTP协议通信交互中使⽤到的⾸部字段,不限于RFC2616中定义的47种⾸部字段。
包括Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的⾸部字段)报⽂主体HTTP传输数据可按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。
通常,报⽂主体等于实体主体。
只有当传输中进⾏编码操作时,实体主体的内容发⽣变化,才导致它和报⽂主体产⽣差异。
报⽂主体和实体主体的差异报⽂(message)是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输实体(entity)作为请求或响应的有效何在数据(补充项)被传输,其内容由实体⾸部和实体主体组成内容编码内容编码指明应⽤在实体内容上的编码格式,并保持实体信息原样压缩。
内容编码后的实体由客户端接收并负责解码内容编码的⽅式gzip(GNU zip)由⽂件压缩程序 gzip(GNU zip)⽣成的编码格式(RFC1952),采⽤ Lempel-Ziv 算法(LZ77)及 32 位循环冗余校验(CyclicRedundancy Check,通称 CRC)。
nodejs中var zlib = require('zlib')vra gunzip = zlib.createGunzip()compress(UNIX系统的标准压缩)由 UNIX ⽂件压缩程序 compress ⽣成的编码格式,采⽤ Lempel-Ziv-Welch 算法(LZW)。
HTTP中header头部信息详解
HTTP中header头部信息详解HTTP Request的Header信息1、HTTP请求⽅式如下表:GET向Web服务器请求⼀个⽂件POST向Web服务器发送数据让Web服务器进⾏处理PUT向Web服务器发送数据并存储在Web服务器内部HEAD检查⼀个对象是否存在DELETE从Web服务器上删除⼀个⽂件CONNECT对通道提供⽀持TRACE跟踪到服务器的路径OPTIONS查询Web服务器的性能说明:主要使⽤到“GET”和“POST”。
实例:POST /test/tupian/cm HTTP/1.1分成三部分:1. POST:HTTP请求⽅式2. /test/tupian/cm:请求Web服务器的⽬录地址(或者指令)3. HTTP/1.1: URI(Uniform Resource Identifier,统⼀资源标识符)及其版本备注:在Ajax中,对应method属性设置。
2、Host说明:请求的web服务器域名地址3、User-Agent说明:HTTP客户端运⾏的浏览器类型的详细信息。
通过该头部信息,web服务器可以判断到当前HTTP请求的客户端浏览器类别。
实例:User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.114、Accept说明:指定客户端能够接收的内容类型,内容类型中的先后次序表⽰客户端接收的先后次序。
例如:Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5备注:在Prototyp(1.5)的Ajax代码封装中,将Accept默认设置为“text/javascript, text/html, application/xml, text/xml, */*”。
HTTP请求与响应
HTTP请求与响应http请求由三部分组成,分别是:请求行、消息报头、请求正文请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:GET 请求获取Request-URI所标识的资源POST 在Request-URI所标识的资源后附加新的数据HEAD 请求获取由Request-URI所标识的资源的响应消息报头PUT 请求服务器存储一个资源,并用Request-URI作为其标识DELETE 请求服务器删除Request-URI所标识的资源TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT 保留将来使用OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求一.HTTP请求1.HTTP请求格式:<request line><headers><blank line>[<request-body>]在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。
紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。
在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。
2.GET与POST区别HTTP 定义了与服务器交互的不同方法如上所示,最基本的方法是GET 和POST。
GET与POST方法有以下区别:(1)在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
HTTP请求和MIME介绍
HTTP请求和MIME介绍HTTP请求和MIME介绍HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文。
请求行(格式):Method Request-URI HTTP-Version CRLFMethod:方法。
GET 请求获取由Request-URI所标识的资源。
POST 在Request-URI所标识的资源后附加新的数据。
HEAD 请求获取由Request-URI所标识的资源的响应消息报头。
PUT 请求服务器存储一个资源,并用Request-URI作为其标识。
DELETE 请求服务器删除由Request-URI所标识的资源。
TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。
CONNECT 保留将来使用。
OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。
Request-URI:统一资源标识。
HTTP-Version:HTTP的版本。
CRLF:回车换行。
(\r\n)例:GET /form.html HTTP/1.1 \r\nHTTP响应在接收和解释请求消息后,服务器会返回一个HTTP响应消息。
与HTTP请求类似,HTTP响应也是三个部分组成,分别是:状态行、消息报头、响应正文。
状态行:状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。
格式: HTTP-Version Status-Code Reason-Phrase CRLF例如: HTTP/1.1 200 OK \r\n状态代码:状态代码由3位数字组成,表示请求是否被理解或被满足。
状态描述:状态描述给出了关于状态代码的简短的文字描述。
状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。
第一个数字有五种可能的取值:- 1xx: 指示信息—表示请求已接收,继续处理。
- 2xx: 成功—表示请求已经被成功接收、理解、接受。
- 3xx: 重定向—要完成请求必须进行更进一步的操作。
HTTP请求方式中8种请求方法
HTTP请求⽅式中8种请求⽅法简单介绍HTTP请求的⽅法:HTTP/1.1协议中共定义了⼋种⽅法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作⽅式HTTP1.0定义了三种请求⽅法: GET, POST 和 HEAD⽅法。
HTTP1.1新增了五种请求⽅法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT ⽅法1、OPTIONS返回服务器针对特定资源所⽀持的HTTP请求⽅法,也可以利⽤向web服务器发送‘*’的请求来测试服务器的功能性2、HEAD向服务器索与GET请求相⼀致的响应,只不过响应体将不会被返回。
这⼀⽅法可以再不必传输整个响应内容的情况下,就可以获取包含在响应⼩消息头中的元信息。
3、GET向特定的资源发出请求。
注意:GET⽅法不应当被⽤于产⽣“副作⽤”的操作中,例如在Web Application中,其中⼀个原因是GET可能会被⽹络蜘蛛等随意访问。
Loadrunner中对应get请求函数:web_link和web_url4、POST向指定资源提交数据进⾏处理请求(例如提交表单或者上传⽂件)。
数据被包含在请求体中。
POST请求可能会导致新的资源的建⽴和/或已有资源的修改。
Loadrunner中对应POST请求函数:web_submit_data,web_submit_form5、PUT向指定资源位置上传其最新内容6、DELETE请求服务器删除Request-URL所标识的资源7、TRACE回显服务器收到的请求,主要⽤于测试或诊断8、CONNECTHTTP/1.1协议中预留给能够将连接改为管道⽅式的代理服务器。
注意:1)⽅法名称是区分⼤⼩写的,当某个请求所针对的资源不⽀持对应的请求⽅法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不⽀持对应的请求⽅法时,应返回状态码501(Not Implemented)。
HTTP 报头,Content-disposition
当然filename参数可以包含路径信息,但User-Agnet会忽略掉这些信息,只会把路径信息的最后一部分做为文件名。当你在响应类型为 application/octet- stream情况下使用了这个头信息的话,那就意味着你不想直接显示内容,而是弹出一个”文件下载”的对话框,接下来就是由你来决定“打开”还是“保存” 了。
////attachment --- 作为附件下载
////inline --- 在线打开
HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
byte[] fileBuffer = new byte[fileSize];
将上述需求进行归我给出如下例子代码:
public static void ToDownload(string serverfilpath,string filename)
{
FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
w3c的说明:/Protocols/rfc2616/rfc2616-sec19.html
Content-Disposition的使用和注意事项
2008年08月27日 星期三 下午 07:21Content-Disposition的使用和注意事项
最近不少Web技术圈内的朋友在讨论协议方面的事情,有的说web开发者应该熟悉web相关的协议,有的则说不用很了解。个人认为这要分层次来看待这个问 题,对于一个新手或者刚入门的web开发人员而言,研究协议方面的东西可能会使得web开发失去趣味性、抹煞学习积极性,这类人应该更多的了解基本的 Web技术使用。而对于在该行业工作多年的老鸟来说,协议相关的内容、标准相关内容应该尽量多些的了解,因为只有这样才能使得经手的web系统更加优秀 (安全、漂亮、快速、兼容性好、体验好……)。本文我们来说一下MIME 协议的一个扩展Content-disposition。
http报文常见的请求头、响应头
http报⽂常见的请求头、响应头http报⽂常见的请求头1.AcceptAccept: text/html 浏览器可以接受服务器回发的类型为 text/html。
Accept: /代表浏览器可以处理所有类型,(⼀般浏览器发给服务器都是发这个)。
2.Accept-EncodingAccept-Encoding: gzip, deflate 浏览器申明⾃⼰接收的编码⽅法,通常指定压缩⽅法,是否⽀持压缩,⽀持什么压缩⽅法(gzip,deflate),(注意:这不是只字符编码)。
3.Accept-LanguageAccept-Language:zh-CN,zh;q=0.9 浏览器申明⾃⼰接收的语⾔。
4.ConnectionConnection: keep-alive 当⼀个⽹页打开完成后,客户端和服务器之间⽤于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的⽹页,会继续使⽤这⼀条已经建⽴的连接。
Connection: close 代表⼀个Request完成后,客户端和服务器之间⽤于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建⽴TCP连接。
5.Host(发送请求时,该报头域是必需的)Host: 请求报头域主要⽤于指定被请求资源的Internet主机和端⼝号,它通常从HTTP URL中提取出来的。
6.Refererer-AgentUser-Agent:Mozilla/...,告诉HTTP服务器,客户端使⽤的操作系统和浏览器的名称和版本。
8.Cache-ControlCache-Control:private 默认为private 响应只能够作为私有的缓存,不能再⽤户间共享Cache-Control:public 响应会被缓存,并且在多⽤户间共享。
正常情况, 如果要求HTTP认证,响应会⾃动设置为 private.Cache-Control:must-revalidate 响应在特定条件下会被重⽤,以满⾜接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
HTTP请求格式:请求行、请求头详细介绍【爬虫工程师必会】
在网络传输中HTTP协议非常重要,该协议规定了客户端和器端请求和应答的标准HTTP协议能保证计算机正确快速地传输超文本文档,并确定了传输文档中的哪部分,以及哪部分内容首先显示(如文本先于图形)等。
根据HTTP协议的规定,客户端一个HTTP请求到器的请求消息,由请求行,求头部、空行以及请求数据四部分组成。
如下所示为请求消息的一般格式。
结合一个典型的HTTP请求示例,详细介绍HTTP请求信息的各个组成部分。
示例内容如下:GEThttps://www.baidu./content-search.xmlHTTP/1.1Host:www.baidu.Connection:keep-aliveSec-Fetch-Site:same-originSec-Fetch-Mode:no-corsUser-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,lik eGecko)Chrome/78.0.3904.108Safari/537.36Accept-Encoding:gzip,deflate,brAccept-Language:zh-CN,zh;q=0.9Cookie:BIDUPSID=12D4BD8584CA4E016E061A2A996EF369;PSTM=1620090350;BAIDUI D=12D4BD8584CA4E01C03BA560AACCF2CE:FG=1;BD_UPN=12314753;H_PS_PSSID=3398 4_31660_33848_33759_33676_33607_33987_26350;BDORZ=B490B5EBF6F3CD402E515 D22BCDA1598;__yjs_duid=1_1a965d65ab35181f7b7b98cce26990951620094330751; ab_sr=1.0.0_YjM2Y2YwOWI1MDU4ZDEzODMyZDZkNDBlODllOWEzZTdiMjk4YzgzYmUyM2Z jODA4MWM0MDExZTdiMDZlOTQwOWZhMWI0NGQ3NzNhODI2NTYzMWM1NzQ2ZDBmYjhkM2Q1;i speed_lsm=0;H_PS_645EC=b177fVn0%2Brl2KczNrCfwRaWGfk3JZzrl7ScjgHBcxVvOku bEWrAPvQ6AXa4;BD_HOME=1;__guid=136081015.3970791550720005000.1620116535 606.869;monitor_count=2;BA_HECTOR=8121a4848h8l0k0l6o1g9213e0r1.请求行上例中第1行为请求行,包含了请求方法、URL和协议版本,代码如下:GEThttps://www.baidu./content-search.xmlHTTP/1.1其中,GET请求方法,https://www.baidu/URL,HTTP/1.1指定了协议版本。
httphead详解
httphead详解Http普通报头: 少数报头域⽤于所有的请求和响应消息,但并不⽤于被传输的实体cache-Control: ⽤于指定缓存指令,缓存指令是单向的,且是独⽴的(⼀个消息的缓存指令不会影响另⼀个消息处理的缓存机制)请求的缓存指令包括:no-cache \no-store\max-age\max-stale\in-fresh\only-if-cached响应的缓存指令包括:public、 private、 no-cache、 no-store、 no-transform、must-revalidate、 proxy-revalidate、 max-age、 s-maxage )Date: ⽤于表⽰消息产⽣的时间和⽇期Connection:普通报头域允许发送指定连接的选项。
例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接;Http 常⽤请求头:Accept:浏览器能够处理的内容类型;Accept-charset:浏览器能够显⽰的字符集;Accept-Encoding:浏览器能够处理的压缩编码cookie:当前cookies页⾯社会的任何cookieHost:请求报头域主要⽤于指定被请求资源的 Internet主机和端⼝号,它通常从HTTPURL中提取;Refer:发出请求页⾯的urluser-Agent:浏览器的⽤户代理字符串HTTP响应头Location:响应报头域⽤于重定向接受者到⼀个新的位置。
Location响应报头域常⽤在更换域名的时候;Server:响应报头域包含了服务器⽤来处理请求的软件信息。
与User-Agent请求报头域是相对应的;实体报头:和响应消息都可以传送⼀个实体。
⼀个实体由实体报头域和实体正⽂组成,但并不是说实体报头域和实体正⽂要再⼀起发送,可以只发送实体报头域;content-Encoding:实体报头域被⽤作媒体类型的修饰符,它的值指⽰了已经被应⽤到实体正⽂的附加内容的编码,因⽽要获得Content-Type报头域中所引⽤的媒体类型,必须采⽤相应的解码机制。
Http请求详解(转)----请求+响应各字段详解
Http请求详解(转)----请求+响应各字段详解参考1. HTTP请求格式⾸先介绍HTTP协议:(HTTP,HyperText Transfer Protocol)是上应⽤最为⼴泛的⼀种。
所有的⽂件都必须遵守这个标准。
⼯作原理:1. 由HTTP客户端发起⼀个请求,建⽴⼀个到服务器指定端⼝(默认是)的TCP连接。
连接2. HTTP服务器则在那个端⼝监听客户端发送过来的请求。
⼀旦收到请求,请求3. 服务器(向客户端)发回⼀个状态⾏,⽐如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的⽂件、错误消息、或者其它⼀些信息。
响应4. 客户端接收服务器所返回的信息通过浏览器显⽰在⽤户的显⽰屏上,然后客户机与服务器断开连接显⽰内容HTTP使⽤TCP⽽不是UDP的原因在于(打开)⼀个⽹页必须传送很多数据,⽽TCP协议提供传输控制,按顺序组织数据,和错误纠正。
做过Socket编程的⼈都知道,当我们设计⼀个通信协议时,“消息头/消息体”的分割⽅式是很常⽤的,消息头告诉对⽅这个消息是⼲什么的,消息体告诉对⽅怎么⼲。
HTTP协议传输的消息也是这样规定的,每⼀个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,⽽消息头是必须的。
每当我们打开⼀个⽹页,在上⾯点击右键,选择“查看源⽂件”,这时看到的HTML代码就是HTTP的消息体,那么消息头可以通过浏览器的开发⼯具或者插件可以看到,如果⽕狐的Firebug,IE的Httpwatch。
HTTP请求是指:客户端通过发送 HTTP 请求向服务器请求对资源的访问。
它向服务器传递了⼀个数据块,也就是请求信息,HTTP 请求由三部分组成:请求⾏、请求头和请求正⽂。
请求⾏:请求⽅法 URI 协议/版本请求头(Request Header)请求正⽂下⾯是⼀个HTTP请求的数据:POST /index.html HTTP/1.1 请求⽅法 url 协议/版本号Host: localhost 主机地址User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-cn,zh;q=0.5Accept-Encoding: gzip, deflateConnection: keep-aliveReferer: <a target=_blank href="http://localhost/" style="color: rgb(51, 102, 153); text-decoration: none;">http://localhost/</a>Content-Length:25Content-Type:application/x-www-form-urlencoded请求空⾏标志着请求头结束,请求正⽂(请求体)的开始username=aa&password=12341、请求⾏:请求⽅法URI协议/版本请求的第⼀⾏是“⽅法 URL 协议/版本”,并以回车换⾏作为结尾。
HTTP请求行、请求头、请求体详解
HTTP请求⾏、请求头、请求体详解 HTTP请求⾏、请求头、请求体详解⽂本引⽤:HTTP请求报⽂解剖HTTP请求报⽂由3部分组成(请求⾏+请求头+请求体):下⾯是⼀个实例①是请求⽅法,GET和POST是最常见的HTTP⽅法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
不过,当前的⼤多数浏览器只⽀持GET和POST,Spring 3.0提供了⼀个HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的HTTP⽅法(实际上还是通过POST提交表单)。
服务端配置了HiddenHttpMethodFilter后,Spring会根据_method参数指定的值模拟出相应的HTTP⽅法,这样,就可以使⽤这些HTTP⽅法对处理⽅法进⾏映射了。
②为请求对应的URL地址,它和报⽂头的Host属性组成完整的请求URL,③是协议名称及版本号。
④是HTTP的报⽂头,报⽂头包含若⼲个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
⑤是报⽂体,它将⼀个页⾯表单中的组件值通过param1=value1¶m2=value2的键值对形式编码成⼀个格式化串,它承载多个请求参数的数据。
不但报⽂体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的⽅式传递请求参数。
对照上⾯的请求报⽂,我们把它进⼀步分解,你可以看到⼀幅更详细的结构图:HTTP响应报⽂解剖响应报⽂结构HTTP的响应报⽂也由三部分组成(响应⾏+响应头+响应体):以下是⼀个实际的HTTP响应报⽂:①报⽂协议及版本;②状态码及状态描述;③响应报⽂头,也是由多个属性组成;④响应报⽂体,即我们真正要的“⼲货”。
响应状态码和请求报⽂相⽐,响应报⽂多了⼀个“响应状态码”,它以“清晰明确”的语⾔告诉客户端本次请求的处理结果。
Http请求头响应体详解
Http请求头响应体详解Referrer Policy 是什么?我们知道,在页⾯引⼊图⽚、JS 等资源,或者从⼀个页⾯跳到另⼀个页⾯,都会产⽣新的 HTTP 请求,浏览器⼀般都会给这些请求头加上表⽰来源的 Referrer 字段。
Referrer 在分析⽤户来源时很有⽤,有着⼴泛的使⽤。
属性介绍:新的 Referrer Policy 规定了五种 Referrer 策略:No Referrer、No Referrer When Downgrade、Origin Only、Origin When Cross-origin、和 Unsafe URL。
之前就存在的三种策略:never、default 和 always,在新标准⾥换了个名称。
他们的对应关系如下:策略名称属性值(新)属性值(旧)No Referrer no-referrer neverNo Referrer When Downgrade no-referrer-when-downgrade defaultOrigin Only origin-Origin When Cross-origin origin-when-crossorigin-Unsafe URL unsafe-url alwaysNo Referrer :任何情况下都不发送 Referrer 信息;No Referrer When Downgrade :仅当发⽣协议降级(如 HTTPS 页⾯引⼊ HTTP 资源,从 HTTPS 页⾯跳到 HTTP 等)时不发送 Referrer 信息。
这个规则是现在⼤部分浏览器默认所采⽤的;Origin Only:发送只包含 host 部分的 Referrer。
启⽤这个规则,⽆论是否发⽣协议降级,⽆论是本站链接还是站外链接,都会发送 Referrer 信息,但是只包含协议 + host 部分(不包含具体的路径及参数等信息);Origin When Cross-origin:仅在发⽣跨域访问时发送只包含 host 的 Referrer,同域下还是完整的。
http请求报文包含三个部分(请求行+请求头+请求体)
http请求报⽂包含三个部分(请求⾏+请求头+请求体)http请求报⽂包含三个部分(请求⾏ + 请求头 + 请求体)⼀、请求⾏请求⾏包含三个内容: method + request-URI + http-version请求⾏例如:GET /icwork/? Search = product HTTP/1.11.1 请求⽅法method 包含有: post , get, head,delete, put, connect, options, patch, propfind, propatch, mkcol, copy, move, lock, unlock, trace, head,具体介绍如下:请求⽅法作⽤get通过请求URI获得资源post⽤于添加新的资源,⽤于表单提交put⽤于修改某个内容delete删除某个内容connect⽤于代理进⾏传输例如SSLoptions询问可以执⾏那些⽅法patch部分⽂档更该propfind查看属性proppatch设置属性mkcol创建集合copy拷贝move移动lock加锁unlock解锁trace⽤于远程诊断服务器head类似于get,⽤于检查对象是否存在⽤于得到元数据1.2 get⽅法和post⽅法get⽅法: 是在url中说明情请求的资源,⽐如https:///con?from=self?_t=1466609839126 其中?后的数据就是请求的数据,并且连接⽤&,get⽅法也可以提交表单数据,但是提交的数据在url中,其他⼈可以通过查看历史记录中的url来获取你提交的数据,这样很不安全post⽅法 传输数据不在url中,⽽在数据段中出现,并且请求头多了Content-Type 和 Content-Length,post提交表单数据的时候⽐get⽅法更安全1.3 post⽅法提交表单和get⽅法提交表单相⽐较1. get明⽂传输,信息附加在url上⾯,get明⽂传输,post更加安全2. get传输有⼤⼩限制,应该是3k,post需要制定传输类型3. get多⽤于获取数据,根据get变量的不同调⽤不同的数据,post多⽤于提交数据,提交⽤户输⼊的数据1.4 get⽅法和post⽅法的区别:1. Get是向服务器发索取数据的⼀种请求,⽽Post是向服务器提交数据的⼀种请求2. Get是获取信息,⽽不是修改信息,类似数据库查询功能⼀样,数据不会被修改3. Get请求的参数会跟在url后进⾏传递,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,%XX中的XX为该符号以16进制表⽰的ASCII,如果数据是英⽂字母/数字,原样发送,如果是空格,转换为+,如果是中⽂/其他字符,则直接把字符串⽤BASE64加密。
http中请求报文requestheaders和响应报文responseheaders
http中请求报⽂requestheaders和响应报⽂responseheaders ⼀、构成HTTP请求的简单流程图(图摘录的),如下:Web Client可以是浏览器、搜索引擎、机器⼈等等⼀切基于HTTP协议发起http请求的⼯具。
Web Server可以是任何的能解析HTTP请求,并返回给Web Client可识别的响应的服务,常见的有apache、nginx、IIS等等web服务器⼆、客户端跟服务的交互 要看图还不明⽩中过程的话,那就更通俗的理解为:在浏览器中输⼊URL,并按下回车键浏览器向DNS服务器请求解析该URL中的域名对应的IP地址(如果是IP请求,则不需要该步骤)解析出IP后,根据IP和端⼝号,和服务器建⽴连接浏览器向服务器发送请求,该请求报⽂作为TCP三次握⼿的第三个报⽂发送给服务器服务器做出响应,把数据发送给浏览器通信完成,断开TCP连接浏览器解析收到的数据并显⽰ 从中就可以延伸出以下要说的内容了。
也就是交互直接的报⽂,这⾥就简单说说其中请求报⽂跟响应报⽂,主要也是⽅便新⼿简单了解下,具体的底层还是得⾃⼰去查阅资料response headers响应报⽂当收到get或post等⽅法发来的请求后,服务器就要对报⽂进⾏响应。
⽤于在http请求中服务器向浏览器传递附加信息,主要包括服务器传递的数据类型,使⽤的压缩⽅法,语⾔,以及服务器的信息和响应该请求的时间等.以下为response 属性属性名称意义⽰例Accept-Ranges Web服务器表⽰⾃⼰是否接受获取某个实体的⼀部分(⽐如⽂件的⼀部分)的请求bytes:接受 none:不接受Accept-Ranges:bytesAccess-Control-Allow-Origin指定哪些⽹站可以跨域源资源共享Access-Control-Allow-Origin:* age响应对象在代理缓存中存在的时间,以秒为单位Age:234585576Access-Control-Allow-Methods允许的http请求⽅法Access-Control-Allow-Methods: POST, GET, OPTIONSAllow Allow⽀持标题列出资源集合的⽅法。
http请求包含哪几个部分(请求行、请求头、请求体)
http请求包含哪⼏个部分(请求⾏、请求头、请求体)http协议报⽂1.请求报⽂(请求⾏/请求头/请求数据/空⾏)请求⾏求⽅法字段、URL字段和HTTP协议版本例如:GET /index.html HTTP/1.1get⽅法将数据拼接在url后⾯,传递参数受限请求⽅法:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT请求头(key value形式)User-Agent:产⽣请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:主机地址请求数据post⽅法中,会把数据以key value形式发送请求空⾏发送回车符和换⾏符,通知服务器以下不再有请求头2.响应报⽂(状态⾏、消息报头、响应正⽂)状态⾏消息报头响应正⽂例如请求数据:1 GET/sample.jspHTTP/1.12 Accept:image/gif.image/jpeg,*/*3 Accept-Language:zh-cn4 Connection:Keep-Alive5 Host:localhost6 User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)7 Accept-Encoding:gzip,deflate89 username=jinqiao&password=1234第⼀⾏为http请求⾏,包含⽅法,URI 和http版本2-7为请求头,包含浏览器,主机,接受的编码⽅式和压缩⽅式第8⾏表⽰⼀个空⾏表⽰请求头结束这个空⾏是必须的第9⾏是数据体,⽐如是需要查询的信息。
http响应体由三部分组成:http响应由三个部分组成分别是状态⾏,响应头,响应正⽂。
状态⾏是由:HTTP-Version+Status-Code+Reason-Phrase⽐如:HTTP/1.1 200 ok分别表⽰http版本 + 状态码 + 状态代码的⽂本描述状态码:1xx指⽰信息–表⽰请求已接收,继续处理2xx成功–表⽰请求已被成功接收、理解、接受3xx重定向–要完成请求必须进⾏更进⼀步的操作。
Http请求报头
结果比较 不使用压缩: 不使用压缩:28.8K的modem,IE\Netscape 的 >50s 使用压缩: 使用压缩:28.8K的modem,IE\Netscape 的 <5s
14
根据不同的浏览器显示不同的结果
String title; String userAgent=request.getHeader("User-Agent"); if((userAgent!=null)&&(userAgent.indexOf("MSIE")!=1)) { title="IE"; } 结论: 用的NetScape 结论:JBuilder用的 用的 else IE用IE。 用 。 { title="Netscape"; } out.println(title);
请求消息 请求 标题信息 响应
方法 GET/POST 浏览器类型 资源名称 bar01.jpg 内容类型 版本 HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 4.0: Windows 95 Accept: image/gif, image/jpeg, text/*, */*
10
Host:标识最初的 标识最初的URL中给出的主机 标识最初的 中给出的主机 If-modified-since:标识仅在指定日期后,被改动时用户 标识仅在指定日期后, 标识仅在指定日期后 才希望重新获取此页面 Referer:引用页面的 引用页面的URL,可以由用户来设置相应参数, 引用页面的 ,可以由用户来设置相应参数, 很容易哄骗, 很容易哄骗,不要用来流量统计等 User-Agent:用来鉴定客户的类型,如浏览器或I-mode 用来鉴定客户的类型,如浏览器或 用来鉴定客户的类型 移动电话等。对于WEB应用,尽量用其它的 应用, 移动电话等。对于 应用 报头,同样,很容易哄骗。 报头,同样,很容易哄骗。 下例通过压缩方法输出文档
Http请求头和响应头(Get和Post)
Http请求头和响应头(Get和Post)HTTP简介HTTP协议是Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议。
HTTP是⼀个基于TCP/IP通信协议来传递数据(HTML ⽂件, 图⽚⽂件, 查询结果等)。
HTTP⼯作原理HTTP三点注意事项:HTTP是⽆连接:⽆连接的含义是限制每次连接只处理⼀个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
采⽤这种⽅式可以节省传输时间。
HTTP是媒体独⽴的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
客户端以及服务器指定使⽤适合的MIME-type内容类型。
HTTP是⽆状态:HTTP协议是⽆状态协议。
⽆状态是指协议对于事务处理没有记忆能⼒。
缺少状态意味着如果后续处理需要前⾯的信息,则它必须重传,这样可能导致每次连接传送的数据量增⼤。
另⼀⽅⾯,在服务器不需要先前信息时它的应答就较快。
HTTP消息结构HTTP请求消息⼀个HTTP请求报⽂由请求⾏(request line)、请求头(header)、空⾏和请求数据4个部分组成,下图给出了请求报⽂的⼀般格式。
1.请求⾏请求⾏由请求⽅法字段、URL字段和HTTP协议版本字段3个字段组成,它们⽤空格分隔。
例如,GET /index.html HTTP/1.1。
根据HTTP标准,HTTP请求可以使⽤多种请求⽅法。
HTTP1.0定义了三种请求⽅法: GET, POST 和 HEAD⽅法。
HTTP1.1新增了五种请求⽅法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT ⽅法。
⽽常见的有如下⼏种:1).GET最常见的⼀种请求⽅式,当客户端要从服务器中读取⽂档时,当点击⽹页上的链接或者通过在浏览器的地址栏输⼊⽹址来浏览⽹页的,使⽤的都是GET⽅式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HTTP头字段包括4类:general-header ;request-header ;response-header ;entity-header .********************************************************************* **********General Header Fields=============================general header是request、response都可用的, 但是不能用于entity.--Cache-Control--Connection--Date--Pragma--Trailer--Transfer-Encoding--Upgrade--Via--Warning********************************************************************* **********Request Header Fields======================request-header fields 允许客户端传递关于request和客户端的附加信息到服务端,--Accept--Accept-Charset--Accept-Encoding--Accept-Language--Authorization--Expect--From--Host--If-Match--If-Modified-Since--If-None-Match--If-Range--If-Unmodified-Since--Proxy-Authorization--Range--Referer--TE--User-Agent********************************************************************* **********Response Header Fields===============================response-header fields 允许服务端传递关于response的、不能放到Status-Line 的附加信息。
这些头给出关于服务端的信息。
--Accept-Ranges--Age--ETag--Location--Proxy-Authenticate--Retry-After--Server--Vary--WWW-Authenticate********************************************************************* **********Entity Header Fields========================Entity-header fields 定义关于entity-body的metainformation(标题字段数据), 如果当前没有body, 则定义被request确定的资源信息.一些metainformation是可选的; 一些是必须的。
--Allow--Content-Encoding--Content-Language--Content-Length--Content-Location--Content-MD5--Content-Range--Content-Type--Expires--extension-header一、基础篇HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW 方式的数据,关于HTTP协议的详细内容请参考RFC2616。
HTTP协议采用了请求/响应模型。
客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。
服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。
这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。
HTTP的头域包括通用头,请求头,响应头和实体头四个部分。
每个头域由一个域名,冒号(:)和域值三部分组成。
域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
1、通用头域通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。
对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。
下面简单介绍几个在UPnP 消息中使用的通用头域。
Cache-Control头域Cache-Control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no- store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
各个消息中的指令含义如下:Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。
这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存no-store用于防止重要的信息被无意的发布。
在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。
如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date头域Date头域表示消息发送的时间,时间的描述格式由rfc822定义。
例如,Date:Mon,31Dec200104:25:57GMT。
Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma头域Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。
在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
2、请求消息请求消息的第一行为下面的格式:Method SP Request-URI SP HTTP-Version CRLFMethod表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。
方法GET和HEAD 应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。
GET方法取回由Request-URI标识的信息。
HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。
POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。
Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。
CRLF表示换行回车符。
请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。
请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。
对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
典型的请求消息:GEThttp://class/download.microtool.de:80/somedata.exeHost:download.microtool.deAccept:*/*Pragma:no-cacheCache-Control:no-cacheReferer:http://class/download.microtool.de/User-Agent:Mozilla/4.04[en](Win95;I;Nav)Range:bytes=554554-上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。
棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
Host头域Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。
HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Referer头域Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。
他也允许废除的或错误的连接由于维护的目的被追踪。
如果请求的uri没有自己的uri地址,Referer不能被发送。
如果指定的是部分uri地址,则此地址应该是一个相对地址。
Range头域Range头域可以请求实体的一个或者多个子范围。
例如,表示头500个字节:bytes=0-499表示第二个500字节:bytes=500-999表示最后500个字节:bytes=-500表示500字节以后的范围:bytes=500-第一个和最后一个字节:bytes=0-0,-1同时指定几个范围:bytes=500-600,601-999但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
User-Agent头域User-Agent头域的内容包含发出请求的用户信息。
3、响应消息响应消息的第一行为下面的格式:HTTP-Version SP Status-Code SP Reason-Phrase CRLFHTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。