精华内容
下载资源
问答
  • 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头信息泄露-隐藏web服务器banner信息 一些黑客会通过该软件暴露出来的信息针对性的入侵,为了服务器的安全这些信息一定要及时关闭。Tomcat在404,405,403等错误的时候,会有默认的错误信息输出到页面上。这个...

    Tomacat错误信息(服务器版本号)泄露(低危险) 

    HTTP头信息泄露-隐藏web服务器banner信息

    一些黑客会通过该软件暴露出来的信息针对性的入侵,为了服务器的安全这些信息一定要及时关闭。Tomcat在404,405,403等错误的时候,会有默认的错误信息输出到页面上。这个时候,黑客们,根据服务器的版本信息,可以了解到该版本服务器的已知漏洞,发起攻击,造成javaWeb应用的信息安全问题。

    Tomcat报错页面泄漏Apache Tomcat/6.0.45相关版本号信息,是攻击者攻击的途径之一。因此实际当中建议去掉版本号信息。

    方式1. 去掉默认的版本和引擎信息
         参考:http://blog.51cto.com/chicozy/1878453

    方式 2. 为每个应用提供统一的自定义404,403,405,500等错误信息跳转页面
        参考:https://blog.csdn.net/qq_35661171/article/details/78854754

                   https://blog.csdn.net/JuncaiLiao/article/details/84540263 

                   https://blog.csdn.net/u011313218/article/details/78175411 

     方式3.去掉ServerInfo.properties文件的版本信息

    1、进入到tomcat/lib目录下,用电脑自带解压软件打开catalina.jar  进入到\org\apache\catalina\util目录下
    2、编辑ServerInfo.properties文件,编辑最后三行,去掉版本号等信息
    3、改完后自动跳出提示,点击“是”自动更新catalina.jar重新打包。

     

    http://blog.51cto.com/chicozy/1878453

     

    展开全文
  • PHP获取HTTP头信息

    千次阅读 2017-04-25 17:31:31
    获取HTTP请求头信息
    • 获取全部(客户端)HTTP请求头信息
        #1
        array apache_request_headers(void)
    
        #2:通过$_SERVER获取,每个http请求头信息都以"HTTP_"开头在$_SERVER键中
        # 获取if_modified_since的请求信息
        $_SERVER['HTTP_IF_MODIFIED_SINCE']
    • 获取服务器响应一个HTTP请求所发送的所有标头
        # url 请求的服务器的URL地址
        # format 0:返回的头部信息以索引数字形式,1:返回头部信息以关联数组形式
        array get_headers(string $url [, int $format = 0 ] )
    
        #示例
        $head_arr = get_headers("https://www.baidu.com");
        $head_arr_index = get_headers("https://www.baidu.com",1);
        echo "<pre>";
            print_r($head_arr);
            print_r($head_arr_index);
        echo "</pre>";
        #输出结果分别为:
        #head_arr
        Array
        (
            [0] => HTTP/1.1 200 OK
            [1] => Server: bfe/1.0.8.18
            [2] => Date: Tue, 25 Apr 2017 02:50:57 GMT
            [3] => Content-Type: text/html
            [4] => Content-Length: 14720
            [5] => Connection: close
            [6] => Last-Modified: Tue, 18 Apr 2017 01:09:00 GMT
            [7] => Vary: Accept-Encoding
            [8] => Set-Cookie: BAIDUID=B4D4AA198C8E598CF3980583DA807FA1:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
            [9] => Set-Cookie: BIDUPSID=B4D4AA198C8E598CF3980583DA807FA1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
            [10] => Set-Cookie: PSTM=1493088657; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
            [11] => P3P: CP=" OTI DSP COR IVA OUR IND COM "
            [12] => X-UA-Compatible: IE=Edge,chrome=1
            [13] => Pragma: no-cache
            [14] => Cache-control: no-cache
            [15] => Accept-Ranges: bytes
            [16] => Set-Cookie: __bsi=12770957019260228058_00_10_N_N_15_0303_C02F_N_N_N_0; expires=Tue, 25-Apr-17 02:51:02 GMT; domain=www.baidu.com; path=/
        )
    
    
        #head_arr_index
        Array
        (
            [0] => HTTP/1.1 200 OK
            [Server] => bfe/1.0.8.18
            [Date] => Tue, 25 Apr 2017 02:47:11 GMT
            [Content-Type] => text/html
            [Content-Length] => 14720
            [Connection] => close
            [Last-Modified] => Tue, 18 Apr 2017 01:09:00 GMT
            [Vary] => Accept-Encoding
            [Set-Cookie] => Array
                (
                    [0] => BAIDUID=D0D69F175CC2E4C205E8EA6D1DEAA1BB:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
                    [1] => BIDUPSID=D0D69F175CC2E4C205E8EA6D1DEAA1BB; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
                    [2] => PSTM=1493088431; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
                    [3] => __bsi=11987508469614704611_00_22_N_N_16_0303_C02F_N_N_N_0; expires=Tue, 25-Apr-17 02:47:16 GMT; domain=www.baidu.com; path=/
                )
    
            [P3P] => CP=" OTI DSP COR IVA OUR IND COM "
            [X-UA-Compatible] => IE=Edge,chrome=1
            [Pragma] => no-cache
            [Cache-control] => no-cache
            [Accept-Ranges] => bytes
        )
    展开全文
  • 最全的HTTP头部信息分析

    千次阅读 2016-08-23 11:40:56
    http 头信息详解XMLHttpRequest 备注 XMLHttpRequest成员 属性方法 onreadystatechange 语法备注 readyState 语法备注 responseBody 语法备注 responseStream 语法备注 responseText 语法备注 responseXML ...
    1.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相同。 

    请求消息 

    请求消息的第一行为下面的格式: 

    MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示对于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。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。 

    典型的请求消息: 

    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头域 

    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头域的内容包含发出请求的用户信息。 

    响应消息 

    响应消息的第一行为下面的格式: 

    HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF 

    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.0200OK 

    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 

    上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。 

    Location响应头 

    Location响应头用于重定向接收者到一个新URI地址。 

    Server响应头 

    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-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。 

    Content-Type实体头 

    Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型 Content-Range实体头 

    Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式: 

    Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth 

    例如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。 

    Last-modified实体头 

    Last-modified实体头指定服务器上保存内容的最后修订时间。 

    应答头说明
    Allow服务器支持哪些请求方法(如GET、POST等)。
    Content-Encoding文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
    Content-Length表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。
    Content-Type表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。
    Date当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
    Expires应该在什么时候认为文档已经过期,从而不再缓存它?
    Last-Modified文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。
    Location表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    Refresh表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 
    注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。 

    注意Refresh的意义是“N秒之后刷新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 

    注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。
    Server服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
    Set-Cookie设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。
    WWW-Authenticate客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 
    注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

     

     

    2.HTTP请求头概述 

    HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。 

    下面是一些最常见的请求头: 

    Accept:浏览器可接受的MIME类型。 
    Accept-Charset:浏览器可接受的字符集。 
    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。 
    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 
    Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。 
    Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。 
    Content-Length:表示请求消息正文的长度。 
    Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。 
    From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 
    Host:初始URL中的主机和端口。 
    If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。 
    Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。 
    Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。 
    User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。 
    UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。 
    有关HTTP头完整、详细的说明,请参见http://www.w3.org/Protocols/的HTTP规范。 

    在Servlet 中读取请求头 

    在Servlet中读取HTTP头是非常方便的,只需要调用一下HttpServletRequest的getHeader方法即可。如果客户请求中提供了指定的头信息,getHeader返回对应的字符串;否则,返回null。部分头信息经常要用到,它们有专用的访问方法:getCookies方法返回Cookie头的内容,经解析后存放在Cookie对象的数组中,请参见后面有关Cookie章节的讨论;getAuthType和getRemoteUser方法分别读取Authorization头中的一部分内容;getDateHeader和getIntHeader方法读取指定的头,然后返回日期值或整数值。 

    除了读取指定的头之外,利用getHeaderNames还可以得到请求中所有头名字的一个Enumeration对象。 

    最后,除了查看请求头信息之外,我们还可以从请求主命令行获得一些信息。getMethod方法返回请求方法,请求方法通常是GET或者POST,但也有可能是HEAD、PUT或者DELETE。getRequestURI方法返回URI(URI是URL的从主机和端口之后到表单数据之前的那一部分)。getRequestProtocol返回请求命令的第三部分,一般是“HTTP/1.0”或者“HTTP/1.1”。 

    实例:输出所有的请求头 

    下面的Servlet实例把所有接收到的请求头和它的值以表格的形式输出。另外,该Servlet还会输出主请求命令的三个部分:请求方法,URI,协议/版本。 

    ShowRequestHeaders.java 

    package hall;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;

    public class ShowRequestHeaders extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "显示所有请求头";
    out.println(ServletUtilities.headWithTitle(title) +
    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
    "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
    "<B>Request Method: </B>" +
    request.getMethod() + "<BR>\n" +
    "<B>Request URI: </B>" +
    request.getRequestURI() + "<BR>\n" +
    "<B>Request Protocol: </B>" +
    request.getProtocol() + "<BR><BR>\n" +
    "<TABLE BORDER=1 ALIGN=CENTER>\n" +
    "<TR BGCOLOR=\"#FFAD00\">\n" +
    "<TH>Header Name<TH>Header Value");
    Enumeration headerNames = request.getHeaderNames();
    while(headerNames.hasMoreElements()) {
    String headerName = (String)headerNames.nextElement();
    out.println("<TR><TD>" + headerName);
    out.println(" <TD>" + request.getHeader(headerName));
    }
    out.println("</TABLE>\n</BODY></HTML>");
    }

    public void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    doGet(request, response);
    }

    3.

    HTTP请求模型和头信息

     

     

     


    HTTP请求模型 

    一、连接至Web服务器

    一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80)。

    例如:http://www.myweb.com:8080/index.html
    在Java中,这将等同于代码:
    Soceet socket=new Socket("www.myweb.com",8080);
    InputStream in=socket.getInputStream();
    OutputStream out=socket.getOutputStream();

    二、发送HTTP请求
         通过连接,客户端写一个ASCII文本请求行,后跟0或多个HTTP头标,一个空行和实现请求的任意数据。

    一个请求由四个部分组成:请求行、请求头标、空行和请求数据

    1.请求行:请求行由三个标记组成:请求方法、请求URI和HTTP版本,它们用空格分隔。
    例如:GET /index.html HTTP/1.1

    HTTP规范定义了8种可能的请求方法:
    GET                 检索URI中标识资源的一个简单请求
    HEAD               与GET方法相同,服务器只返回状态行和头标,并不返回请求文档
    POST                服务器接受被写入客户端输出流中的数据的请求
    PUT                 服务器保存请求数据作为指定URI新内容的请求
    DELETE            服务器删除URI中命名的资源的请求
    OPTIONS          关于服务器支持的请求方法信息的请求
    TRACE             Web服务器反馈Http请求和其头标的请求
    CONNECT        已文档化但当前未实现的一个方法,预留做隧道处理

    2.请求头标:由关键字/值对组成,每行一对,关键字和值用冒号(:)分隔。请求头标通知服务器有关于客户端的功能和标识,典型的请求头标有:

    User-Agent        客户端厂家和版本
    Accept            客户端可识别的内容类型列表
    Content-Length    附加到请求的数据字节数

    3.空行:最后一个请求头标之后是一个空行,发送回车符和退行,通知服务器以下不再有头标。
    4.请求数据:使用POST传送数据,最常使用的是Content-Type和Content-Length头标。

    三、服务端接受请求并返回HTTP响应

    Web服务器解析请求,定位指定资源。服务器将资源副本写至套接字,在此处由客户端读取。

    一个响应由四个部分组成;状态行、响应头标、空行、响应数据

    1.状态行:状态行由三个标记组成:HTTP版本、响应代码和响应描述。
    HTTP版本:向客户端指明其可理解的最高版本。
    响应代码:3位的数字代码,指出请求的成功或失败,如果失败则指出原因。
    响应描述:为响应代码的可读性解释。
    例如:HTTP/1.1 200 OK

    HTTP响应码:
    1xx:信息,请求收到,继续处理
    2xx:成功,行为被成功地接受、理解和采纳
    3xx:重定向,为了完成请求,必须进一步执行的动作
    4xx:客户端错误:
    2.响应头标:像请求头标一样,它们指出服务器的功能,标识出响应数据的细节。
    3.空行:最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标。
    4.响应数据:HTML文档和图像等,也就是HTML本身。

    四、服务器关闭连接,浏览器解析响应
    1.浏览器首先解析状态行,查看表明请求是否成功的状态代码。
    2.然后解析每一个响应头标,头标告知以下为若干字节的HTML。
    3.读取响应数据HTML,根据HTML的语法和语义对其进行格式化,并在浏览器窗口中显示它。
    4.一个HTML文档可能包含其它需要被载入的资源引用,浏览器识别这些引用,对其它的资源再进行额外的请求,此过程循环多次。

    五、无状态连接
    HTTP模型是无状态的,表明在处理一个请求时,Web服务器并不记住来自同一客户端的请求。

    六、实例
    1.浏览器发出请求
    GET /index.html HTTP/1.1

    服务器返回响应:
    HTTP /1.1 200 OK
    Date: Apr 11 2006 15:32:08 GMT
    Server: Apache/2.0.46(win32)
    Content-Length: 119
    Content-Type: text/html

    <HTML>
    <HEAD>
    <LINK REL="stylesheet" HREF="index.css">
    </HEAD>
    <BODY>
    <IMG SRC="image/logo.png">
    </BODY>
    </HTML>

    2.浏览器发出请求
    GET /index.css HTTP/1.1

    服务器返回响应:
    HTTP /1.1 200 OK
    Date: Apr 11 2006 15:32:08 GMT
    Server: Apache/2.0.46(win32)
    Connection: Keep-alive, close
    Content-Length: 70
    Content-Type: text/plane

    h3{
        font-size:20px;
        font-weight:bold;
        color:#005A9C;
    }

    3.浏览器发出请求
    GET image/logo.png HTTP/1.1

    服务器返回响应:
    HTTP /1.1 200 OK
    Date: Apr 11 2006 15:32:08 GMT
    Server: Apache/2.0.46(win32)
    Connection: Keep-alive, close
    Content-Length: 1280
    Content-Type: text/plane

    {Binary image data follows}


    (附录)
    1.HTTP规范:Internet工程制定组织(IETF)发布的RFC指定Internet标准,这些RFC被Internet研究发展机构广泛接受。因为它们是标准文档,故一般用正规语言编写,如立法文标一样。

    2.RFC:RFC一旦被提出,就被编号且不会再改变,当一个标准被修改时,则给出一个新的RFC。作为标准,RFC在Internet上被广泛采用。

    3.HTTP的几个重要RFC:
        RFC1945    HTTP 1.0 描述
        RFC2068    HTTP 1.1 初步描述
        RFC2616    HTTP 1.1 标准
    4.资源标识符URI(Uniform Resource Identifter,URI)

    HTTP参考

    一、HTTP码应码
    响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。

    响应码分五种类型,由它们的第一位数字表示:
    1.1xx:信息,请求收到,继续处理
    2.2xx:成功,行为被成功地接受、理解和采纳
    3.3xx:重定向,为了完成请求,必须进一步执行的动作
    4.4xx:客户端错误,请求包含语法错误或者请求无法实现
    5.5xx:服务器错误,服务器不能实现一种明显无效的请求

    下表显示每个响应码及其含义:
    100            继续
    101            分组交换协
    200            OK
    201            被创建
    202            被采纳
    203            非授权信息
    204            无内容
    205            重置内容
    206            部分内容
    300            多选项
    301            永久地传送
    302            找到
    303            参见其他
    304            未改动
    305            使用代理
    307            暂时重定向
    400            错误请求
    401            未授权
    402            要求付费
    403            禁止
    404            未找到
    405            不允许的方法
    406            不被采纳
    407            要求代理授权
    408            请求超时
    409            冲突
    410            过期的
    411            要求的长度
    412            前提不成立
    413            请求实例太大
    414            请求URI太大
    415            不支持的媒体类型
    416            无法满足的请求范围
    417            失败的预期
    500            内部服务器错误
    501            未被使用
    502            网关错误
    503            不可用的服务
    504            网关超时
    505            HTTP版本未被支持

    二、HTTP头标
    头标由主键/值对组成。它们描述客户端或者服务器的属性、被传输的资源以及应该实现连接。

    四种不同类型的头标:
    1.通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。
    2.请求头标:允许客户端传递关于自身的信息和希望的响应形式。
    3.响应头标:服务器和于传递自身信息的响应。
    4.实体头标:定义被传送资源的信息。即可用于请求,也可用于响应。

    头标格式:<name>:<value><CRLF>

    下表描述在HTTP/1.1中用到的头标
    Accept       定义客户端可以处理的媒体类型,按优先级排序;
                     在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept: image/jpeg,image/png,*/*
    Accept-Charset 
                     定义客户端可以处理的字符集,按优先级排序;
                     在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8

    Accept-Encoding        定义客户端可以理解的编码机制。例如:Accept-Encoding:gzip,compress
    Accept-Language       定义客户端乐于接受的自然语言列表。例如:Accept-Language: en,de

    Accept-Ranges 
                 一个响应头标,它允许服务器指明:将在给定的偏移和长度处,为资源组成部分的接受请求。
                该头标的值被理解为请求范围的度量单位。例如Accept-Ranges: bytes或Accept-Ranges: nonea

    Age       允许服务器规定自服务器生成该响应以来所经过的时间长度,以秒为单位。
                该头标主要用于缓存响应。例如:Age: 30

    Allow            一个响应头标,它定义一个由位于请求URI中的次源所支持的HTTP方法列表。例如:Allow: GET,PUT

    aUTHORIZATION 
                一个响应头标,用于定义访问一种资源所必需的授权(域和被编码的用户ID与口令)。
                例如:Authorization: Basic YXV0aG9yOnBoaWw=

    Cache-Control        一个用于定义缓存指令的通用头标。例如:Cache-Control: max-age=30
    Connection           一个用于表明是否保存socket连接为开放的通用头标。例如:Connection: close或Connection: keep-alive

    Content-Base  
                一种定义基本URI的实体头标,为了在实体范围内解析相对URLs。
                如果没有定义Content-Base头标解析相对URLs,使用Content-Location URI(存在且绝对)或使用URI请求。
                例如:Content-Base: Http://www.myweb.com

    Content-Encoding    一种介质类型修饰符,标明一个实体是如何编码的。例如:Content-Encoding: zip
    Content-Language    用于指定在输入流中数据的自然语言类型。例如:Content-Language: en
    Content-Length        指定包含于请求或响应中数据的字节长度。例如:Content-Length:382

    Content-Location
                指定包含于请求或响应中的资源定位(URI)。
                如果是一绝。对URL它也作为被解析实体的相对URL的出发点。
                例如:Content-Location: http://www.myweb.com/news

    Content-MD5
                实体的一种MD5摘要,用作校验和。
                发送方和接受方都计算MD5摘要,接受方将其计算的值与此头标中传递的值进行比较。
                例如:Content-MD5: <base64 of 128 MD5 digest>

    Content-Range 
                随部分实体一同发送;标明被插入字节的低位与高位字节偏移,也标明此实体的总长度。
                例如:Content-Range: 1001-2000/5000

    Contern-Type        标明发送或者接收的实体的MIME类型。例如:Content-Type: text/html
    Date                    发送HTTP消息的日期。例如:Date: Mon,10PR 18:42:51 GMT

    ETag      一种实体头标,它向被发送的资源分派一个唯一的标识符。
                对于可以使用多种URL请求的资源,ETag可以用于确定实际被发送的资源是否为同一资源。
                例如:ETag: "208f-419e-30f8dc99"

    Expires          指定实体的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
    Form            一种请求头标,给定控制用户代理的人工用户的电子邮件地址。例如:From: webmaster@myweb.com
    Host            被请求资源的主机名。对于使用HTTP/1.1的请求而言,此域是强制性的。例如:Host: www.myweb.com

    If-Modified-Since   
                如果包含了GET请求,导致该请求条件性地依赖于资源上次修改日期。
                如果出现了此头标,并且自指定日期以来,此资源已被修改,应该反回一个304响应代码。
                例如:If-Modified-Since: Mon,10PR 18:42:51 GMT

    If-Match            如果包含于一个请求,指定一个或者多个实体标记。只发送其ETag与列表中标记区配的资源。
                           例如:If-Match: "208f-419e-308dc99"

    If-None-Match 
               如果包含一个请求,指定一个或者多个实体标记。资源的ETag不与列表中的任何一个条件匹配,操作才执行。
               例如:If-None-Match: "208f-419e-308dc99"

    If-Range
                指定资源的一个实体标记,客户端已经拥有此资源的一个拷贝。必须与Range头标一同使用。
                如果此实体自上次被客户端检索以来,还不曾修改过,那么服务器只发送指定的范围,否则它将发送整个资源。
                例如:Range: byte=0-499<CRLF>If-Range:"208f-419e-30f8dc99"

    If-Unmodified-Since
                只有自指定的日期以来,被请求的实体还不曾被修改过,才会返回此实体。
                例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT

    Last-Modified        指定被请求资源上次被修改的日期和时间。例如:Last-Modified: Mon,10PR 18:42:51 GMT
    Location 
                对于一个已经移动的资源,用于重定向请求者至另一个位置。
                与状态编码302(暂时移动)或者301(永久性移动)配合使用。
                例如:Location: http://www2.myweb.com/index.jsp

    Max-Forwards 
                一个用于TRACE方法的请求头标,以指定代理或网关的最大数目,该请求通过网关才得以路由。
                在通过请求传递之前,代理或网关应该减少此数目。例如:Max-Forwards: 3

    Pragma            一个通用头标,它发送实现相关的信息。例如:Pragma: no-cache
    Proxy-Authenticate
               类似于WWW-Authenticate,便是有意请求只来自请求链(代理)的下一个服务器的认证。
               例如:Proxy-Authenticate: Basic realm-admin

    Proxy-Proxy-Authorization
                类似于授权,但并非有意传递任何比在即时服务器链中更进一步的内容。
                例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=

    Public            列表显示服务器所支持的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
    Range            指定一种度量单位和一个部分被请求资源的偏移范围。例如:Range: bytes=206-5513

    Refener
                一种请求头标域,标明产生请求的初始资源。对于HTML表单,它包含此表单的Web页面的地址。
                例如:Refener: http://www.myweb.com/news/search.html

    Retry-After 
               一种响应头标域,由服务器与状态编码503(无法提供服务)配合发送,以标明再次请求之前应该等待多长时间。
               此时间即可以是一种日期,也可以是一种秒单位。例如:Retry-After: 18

    Server                     一种标明Web服务器软件及其版本号的头标。例如:Server: Apache/2.0.46(Win32)
    Transfer-Encoding     一种通用头标,标明对应被接受方反向的消息体实施变换的类型。例如:Transfer-Encoding: chunked

    Upgrade 
                允许服务器指定一种新的协议或者新的协议版本,与响应编码101(切换协议)配合使用。
                例如:Upgrade: HTTP/2.0

    User-Agent
                定义用于产生请求的软件类型(典型的如Web浏览器)。
                例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)

    Vary          一个响应头标,用于表示使用服务器驱动的协商从可用的响应表示中选择响应实体。例如:Vary: *
    Via            一个包含所有中间主机和协议的通用头标,用于满足请求。例如:Via: 1.0 fred.com, 1.1 wilma.com
    Warning    用于提供关于响应状态补充信息的响应头标。例如:Warning: 99 www.myweb.com Piano needs tuning

    www-Authenticate
                一个提示用户代理提供用户名和口令的响应头标,与状态编码401(未授权)配合使用。响应一个授权头标。
                例如:www-Authenticate: Basic realm=zxm.mgmt

    4. 获取http头信息
       |   |     
    [ 不指定 Submitted by  herbwang on 2006, May 26, 9:32 PM.  PHP ]
    本文为原创文章,如需转载请注明出处 www.ikown.com.

    最近做的项目总是和http协议打交道,又学到不少。模拟http报头,获取server的http头等等。可能以前圈子真的很小,这方面总是很模糊,现在看来把浏览器的原理搞清楚是很重要的。

    下面是获取头信息,做个备忘。
    PHP代码:
    $fp fsockopen("www.example.com"80$errno$errstr30);
    if (!
    $fp) {
         echo 
    "$errstr ($errno)<br />/n";
    } else {

    $out     "GET / HTTP/1.1";
    $out .= "Host: www.example.com";
    $out .= "Accept: */*";

    fwrite($fp$out);
    while (!
    feof($fp)) {
         
    $content.=fgets($fp128);
    }
    fclose($fp);
    echo 
    $content;
    }
     



    引用:
    在Web开发的过程中,人们常常忽视了这样的一个事实:很多工作都是在底层完成的——是底层协议使得客户端浏览器与Web服务器之间的通信成为可能。学习通信的过程是值得的,因为你可以从中得到数量令人吃惊的有用信息。例如,你可以建立自适应的Web应用程序,它可以根据用户浏览器的性能得到最好的效果,而且你可以改变报头信息来把自定义页面传递到各种平台上,包括无线电话和PDA。

    HTTP 请求头概述 

    HTTP 客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。 

    下面是一些最常见的请求头: 

    Accept:浏览器可接受的MIME类型。 
    Accept-Charset:浏览器可接受的字符集。 
    Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。 
    Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 
    Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。 
    Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。 
    Content-Length:表示请求消息正文的长度。 
    Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。 
    From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 
    Host:初始URL中的主机和端口。 
    If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。 
    Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。 
    Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。 
    User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。 
    UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。 
    有关HTTP头完整、详细的说明,请参见 http://www.w3.org/Protocols/的HTTP规范。

    5.XMLHttpRequest

    提供客户端同http服务器通讯的协议

    Dim HttpReq As New MSXML2.XMLHTTP30 
    HttpReq.open "GET", "http://localhost/books.xml", False 
    HttpReq.send 
    MsgBox HttpReq.responseText 
    

    备注

    客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft® XML Document Object Model (DOM)处理回应。

    XMLHttpRequest成员

    属性

     

    onreadystatechange指定当readyState属性改变时的事件处理句柄。只写
    readyState返回当前请求的状态,只读.
    responseBody将回应信息正文以unsigned byte数组形式返回.只读
    responseStream以Ado Stream对象的形式返回响应信息。只读
    responseText将响应信息作为字符串返回.只读
    responseXML将响应信息格式化为Xml Document对象并返回,只读
    status返回当前请求的http状态码.只读
    statusText返回当前请求的响应行状态,只读

     

    * 表示此属性是W3C文档对象模型的扩展.

    方法

     

    abort取消当前请求
    getAllResponseHeaders获取响应的所有http头
    getResponseHeader从响应信息中获取指定的http头
    open创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)
    send发送请求到http服务器并接收回应
    setRequestHeader单独指定请求的某个http头

     

    onreadystatechange

    指定当readyState属性改变时的事件处理句柄

    语法

    oXMLHttpRequest.onreadystatechange = funcMyHandler; 
    

    如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活

    var xmlhttp=null; 
    function PostOrder(xmldoc) 
    { 
      var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.5.0"); 
      xmlhttp.Open("POST", "http://myserver/orders/processorder.asp", false);  
      xmlhttp.onreadystatechange= HandleStateChange; 
      xmlhttp.Send(xmldoc); 
      myButton.disabled = true; 
    } 
    function HandleStateChange() 
    { 
      if (xmlhttp.readyState == 4) 
      { 
        myButton.disabled = false; 
        alert("Result = " + xmlhttp.responseXML.xml); 
      } 
    } 
    

    备注

    此属性只写,为W3C文档对象模型的扩展.

    readyState

    返回XMLHTTP请求的当前状态

    语法

    lValue = oXMLHttpRequest.readyState; 
    
    var XmlHttp; 
    XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    
    function send() { 
       XmlHttp.onreadystatechange = doHttpReadyStateChange; 
       XmlHttp.open("GET", "http://localhost/sample.xml", true); 
       XmlHttp.send(); 
    } 
    
    function doHttpReadyStateChange() { 
       if (XmlHttp.readyState == 4) { 
          alert("Done"); 
       } 
    } 
    

    备注

    变量,此属性只读,状态用长度为4的整型表示.定义如下:

     

    0 (未初始化)对象已建立,但是尚未初始化(尚未调用open方法)
    1 (初始化)对象已建立,尚未调用send方法
    2 (发送数据)send方法已调用,但是当前的状态及http头未知
    3 (数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
    4 (完成)数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

     

    responseBody

    返回某一格式的服务器响应数据

    语法

    strValue = oXMLHttpRequest.responseBody; 
    
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/books.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.responseBody); 
    

    备注

    变量,此属性只读,以unsigned array格式表示直接从服务器返回的未经解码的二进制数据。

    responseStream

    以Ado Stream对象的形式返回响应信息

    语法

    strValue = oXMLHttpRequest.responseStream; 
    

    备注

    变量,此属性只读,以Ado Stream对象的形式返回响应信息。

    responseText

    将响应信息作为字符串返回

    语法

    strValue = oXMLHttpRequest.responseText; 
    
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/books.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.responseText); 
    

    备注

    变量,此属性只读,将响应信息作为字符串返回。
    XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带BOM(byte-order mark),XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。

    responseXML

    将响应信息格式化为Xml Document对象并返回

    语法

    var objDispatch = oXMLHttpRequest.responseXML; 
    
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/books.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.responseXML.xml); 
    

    备注

    变量,此属性只读,将响应信息格式化为Xml Document对象并返回。如果响应数据不是有效的XML文档,此属性本身不返回XMLDOMParseError,可以通过处理过的DOMDocument对象获取错误信息。

    status

    返回当前请求的http状态码

    语法

    lValue = oXMLHttpRequest.status; 
    
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/books.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.status); 
    

    返回值

    长整形标准http状态码,定义如下:

    NumberDescription

    100

    Continue

    101

    Switching protocols

    200

    OK

    201

    Created

    202

    Accepted

    203

    Non-Authoritative Information

    204

    No Content

    205

    Reset Content

    206

    Partial Content

    300

    Multiple Choices

    301

    Moved Permanently

    302

    Found

    303

    See Other

    304

    Not Modified

    305

    Use Proxy

    307

    Temporary Redirect

    400

    Bad Request

    401

    Unauthorized

    402

    Payment Required

    403

    Forbidden

    404

    Not Found

    405

    Method Not Allowed

    406

    Not Acceptable

    407

    Proxy Authentication Required

    408

    Request Timeout

    409

    Conflict

    410

    Gone

    411

    Length Required

    412

    Precondition Failed

    413

    Request Entity Too Large

    414

    Request-URI Too Long

    415

    Unsupported Media Type

    416

    Requested Range Not Suitable

    417

    Expectation Failed

    500

    Internal Server Error

    501

    Not Implemented

    502

    Bad Gateway

    503

    Service Unavailable

    504

    Gateway Timeout

    505

    HTTP Version Not Supported

     

    备注

    长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。

    statusText

    返回当前请求的响应行状态

    语法

    strValue = oXMLHttpRequest.statusText; 
    
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/books.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.statusText); 
    

    备注

    字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取。

    abort

    取消当前请求

    语法

    oXMLHttpRequest.abort(); 
    

    备注

    调用此方法后,当前请求返回UNINITIALIZED 状态。

    getAllResponseHeaders

    获取响应的所有http头

    语法

    strValue = oXMLHttpRequest.getAllResponseHeaders(); 
    
    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/sample.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.getAllResponseHeaders()); 
    

    输出由web服务器返回的http头信息:

    Server:Microsoft-IIS/5.1 
    X-Powered-By:ASP.NET 
    Date:Sat, 07 Jun 2003 23:23:06 GMT 
    Content-Type:text/xml 
    Accept-Ranges:bytes 
    Last Modified:Sat, 06 Jun 2003 17:19:04 GMT 
    ETag:"a0e2eeba4f2cc31:97f" 
    Content-Length:9 
    

    备注

    每个http头名称和值用冒号分割,并以/r/n结束。当send方法完成后才可调用该方法。

    getResponseHeader

    从响应信息中获取指定的http头

    语法

    strValue = oXMLHttpRequest.getResponseHeader(bstrHeader); 
    
    var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/sample.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.getResponseHeader("Server")); 
    

    输出http头中的server列:当前web服务器的版本及名称。

    备注

    当send方法成功后才可调用该方法。如果服务器返回的文档类型为"text/xml", 则这句话xmlhttp.getResponseHeader("Content-Type");将返回字符串"text/xml"。可以使用getAllResponseHeaders方法获取完整的http头信息。

    open

    创建一个新的http请求,并指定此请求的方法、URL以及验证信息

    语法

    oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword); 
    

    参数

    bstrMethod
    http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

    bstrUrl
    请求的URL地址,可以为绝对地址也可以为相对地址。

    varAsync[可选]
    布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。

    bstrUser[可选]
    如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

    bstrPassword[可选]
    验证信息中的密码部分,如果用户名为空,则此值将被忽略。

    下面的例子演示从服务器请求book.xml,并显示其中的book字段。

    var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET","http://localhost/books.xml", false); 
    xmlhttp.send(); 
    var book = xmlhttp.responseXML.selectSingleNode("//book[@id='bk101']"); 
    alert(book.xml); 
    

    备注

    调用此方法后,可以调用send方法向服务器发送数据。

    send

    发送请求到http服务器并接收回应

    语法

    oXMLHttpRequest.send(varBody); 
    

    参数

    varBody 
    欲通过此请求发送的数据。

    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); 
    xmlhttp.open("GET", "http://localhost/sample.xml", false); 
    xmlhttp.send(); 
    alert(xmlhttp.responseXML.xml); 
    

    备注

    此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync == False,此方法将会等待请求完成或者超时时才会返回,如果bAsync == True,此方法将立即返回。

    This method takes one optional parameter, which is the requestBody to use. The acceptable VARIANT input types are BSTR, SAFEARRAY of UI1 (unsigned bytes), IDispatch to an XML Document Object Model (DOM) object, and IStream *. You can use only chunked encoding (for sending) when sending IStream * input types. The component automatically sets the Content-Length header for all but IStream * input types.

    如果发送的数据为BSTR,则回应被编码为utf-8, 必须在适当位置设置一个包含charset的文档类型头。

    If the input type is a SAFEARRAY of UI1, the response is sent as is without additional encoding. The caller must set a Content-Type header with the appropriate content type.

    如果发送的数据为XML DOM object,则回应将被编码为在xml文档中声明的编码,如果在xml文档中没有声明编码,则使用默认的UTF-8。

    If the input type is an IStream *, the response is sent as is without additional encoding. The caller must set a Content-Type header with the appropriate content type.

    setRequestHeader

    单独指定请求的某个http头

    语法

    oXMLHttpRequest.setRequestHeader(bstrHeader, bstrValue); 
    

    参数

    bstrHeader
    字符串,头名称。

    bstrValue
    字符串,值。

    展开全文
  • http 头信息精讲

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

    万次阅读 2017-11-28 23:15:50
    获取头部信息 $.ajax({ success: function(data, status, xhr) { console.log(xhr.getResponseHeader("Content-Type")); } }); 设置头部信息 一、setting参数 headers $.ajax({  headers: {  
  • http 头信息详解

    千次阅读 2016-05-11 21:36:53
    客户端向服务器发送一个请求,请求包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码
  • 1.1、安全漏洞:Web服务器HTTP头信息公开 风险级别:中风险 漏洞个数:4 漏洞详情: 端口 协议 服务 443 TCP WWW 80 TCP WWW 8000 TCP WWW 8080 TCP WWW 1.2、安全漏洞:Web服务器错误页面信息泄露 ...
  • 最近在调试 前后端分离的请求测试,遇到了一个406错误, 无法接受,于是开始了人肉搜索406最后 还是HTTP头部信息里的Accept:application/json 这个Accept 导致的, 后端设置了只允许application/json 这种形式,so...
  • Web服务器HTTP头信息公开 漏洞

    千次阅读 2020-07-16 19:41:05
    修改Web服务器的HTTP头以不公开关于底层Web服务器的详细信息。 服务器 Windows2008 r2 方法转载自:https://blog.51cto.com/chenchunjia/1958167 一、漏洞名称 漏洞名称 漏洞摘要 ...
  • Android Webview加载网页时发送HTTP头信息 JUL 12TH, 2014 原文链接:http://droidyue.com/blog/2014/07/12/load-url-with-extra-header-in-android-webview-chinese-edition/ 当你点击一个超链接进行...
  • Android如何在http头信息里设置参数

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

    千次阅读 2017-04-27 12:09:30
    使用request获取头信息 Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String headerName = (String) e.nextElement(); Enumeration headerValues = request .get...
  • PHP获取http头信息

    万次阅读 2012-06-13 17:33:42
    获取http请求的头信息。 PHP手册提供了现成的函数: getallheaders (PHP 4, PHP 5) getallheaders — Fetch all HTTP request headers 说明 array getallheaders ( void ) Fetches all HTTP ...
  • java 查看 HTTP 头信息

    千次阅读 2011-09-15 11:23:55
    Java 其实很强大。可以获取HTTP头的详细信息,做出更为细致的处理,如获得文件最后修改时间等。 代码: void doPost(HttpServletRequest req, HttpServletResponse resp) throw
  • 踩坑来源:做地址智能解析接口的时候,按照快递官方提供的demo需要给curl指定头信息,发送后返回的却不是单纯的json字符串,而是包含了header和body两部分,饶了好久才处理掉,做笔记以备忘 未处理前的数据返回: ...
  • Request Header(请求) Accept:告诉服务器,浏览器能够处理的数据类型。(P575) Accept-Charset:浏览器能显示的字符集。 Accept-Encoding:告诉服务器,客户机支持的数据压缩格式。 Aceept-Language:浏览器当前设置的...
  • 获取http头部信息三种方法

    千次阅读 2015-05-06 10:32:00
    第一种:php自带函数 get_headers($url); ...[0] => HTTP/1.1 200 OK   [1] => Date: Wed, 06 May 2015 02:34:12 GMT   [2] => Content-Type: text/html   [3] => Conte
  • HTTP头信息中的参数Etag

    千次阅读 2011-07-14 09:53:42
    服务器如果是集群,不同服务器返回的 Http Header 中的 Etag 参数不一样。如果是图片是程序生成的,我们可以用 no-cache 这些 header 来控制,但如果这些图片是 apache 或 nginx 等呢? 下面开始介绍 Etag: ...
  • 关键是看http请求头(header)信息中的 x-requested-with 信息项是否有无,如果无该头信息项,取出的是未定义的值,即null,则说明是传统请求;如果存在该头信息项,值是XMLHttpRequest 则说明是Ajax请求; 在...
  • 删除X-Powered-By HTTP头IIS7中移除X-Powered-By HTTP头的方法是: 1 启动IIS Manager 2 点击计算机名 3 选择你需要修改的站点并 双击 HTTP响应头部分...Remove 按钮删除X-AspNet-Version HTTP头修改web.config配置文...
  • 之前说个数据抓取遇到的一个坎就是验证码,这次来说另外两个。...其实针对上述两个问题,解决方法已经很成熟了,无非就是买代理和在http请求中加入头信息伪装为浏览器请求。本文说下具体操作 使用代理 首先购买代
  • SchemeRegistry schemeRegistry = new SchemeRegistry();... schemeRegistry.register(new Scheme("http", PlainSocketFactory .getSocketFactory(), 80)); SSLSocketFactory sf = SSLSoc
  • 如何以Get方式获取Http服务器 上的数据,获取数据时,附加http头等验证信息,请看下面的代码: public void HttpGetData() { try { HttpClient httpclient = new DefaultHttpClient();
  • 如何 post json格式的数据,并附加http头,接受返回数据,请看下面的代码: private void HttpPostData() { try { HttpClient httpclient = new DefaultHttpClient(); String
  • nginx 如何修改http Server 头部信息

    千次阅读 2019-09-10 14:36:34
    http 头部信息中明确返回了nginx 版本号信息,确实不太好 修改Server 头部信息 在nging.conf配置文件的server 区域,添加一句话即可 server_tokens off; 重启nginx 返回浏览器访问验证 发现修改已经生....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 697,925
精华内容 279,170
关键字:

http头信息