request.getHeader() 相关详细

在三种情况下,request.getHeader("REFERER")取值
1:通过链接跳过来 
2:在地址栏中输入URL,打回车
3:刷新 

当链接过来的时候,referer的值是链接过来的页面的URL,正常。我刷新的时候referer的值没有变,但当我在地址栏中打回车(URL没有改变,只是打回车),referer值却变成NULL了。 

1):链接过来和在地址栏中直接输入URL,有没有什么区别?如果有,有什么区别? 
2):刷新的时候URL为什么不变,为什么还是前一个URL地址,为什么不变成当前的URL? 
3):直接输入为什么得不到 <%=request.getHeader("REFERER")的值?

如果是直接在浏览器里输入有referer的页面,返回是null,也就是说referer只有从别的页面点击连接来到这页的才会有内容。为NULL就是手工,非null就是连接过来的。刷新的时候,会检查服务端是否会有更新,没有的话,则使用本机的缓存,也就是说,你刷新时得到的响应依然是
前一次得到的服务端的内容,因为你的jsp文件没有变化。
referer是从哪里来的,也就是前一个页面。回车,则没有以前的,等同于你新打开一个浏览器,再次输入一样 。刷新,就是重复上一次的操作。

 request.getHeader() 相关详细

@RequestMapping("getHeader")
public void getHeader(HttpServletRequest request, HttpSession session) {
    //获取客户端向服务器端传送数据的协议名称
    System.out.println("rotocol: " + request.getProtocol());
    //返回的协议名称.默认是http
    System.out.println("Scheme: " + request.getScheme());
    //可以返回当前页面所在的服务器的名字;如果你的应用部署在本机那么其就返回localhost或者127.0.0.1 ,这两个是等价的
    System.out.println("ServerName: " + request.getServerName());
    //可以返回当前页面所在的服务器使用的端口,就是8083
    System.out.println("ServerPort: " + request.getServerPort());
    //request.getRemoteAddr()是获得客户端的ip地址
    System.out.println("RemoteAddr: " + request.getRemoteAddr());
    //request.getRemoteHost()是获得客户端的主机名。
    System.out.println("RemoteHost: " + request.getRemoteHost());
    //返回字符编码
    System.out.println("CharacterEncoding: " + request.getCharacterEncoding());
    //描述HTTP消息实体的传输长度
    System.out.println("ContentLength: " + request.getContentLength());
    //定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,
    System.out.println("ContentType: " + request.getContentType());
    //如果servlet由一个鉴定方案所保护,如HTTP基本鉴定,则返回方案名称
    System.out.println("AuthType: " + request.getAuthType());
    //返回HTTP请求方法(例如GET、POST等等)
    System.out.println("HttpMethod: " + request.getMethod());
    //返回在URL中指定的任意附加路径信息。
    System.out.println("pathInfo: " + request.getPathInfo());
    //返回在URL中指定的任意附加路径信息,被子转换成一个实际路径
    System.out.println("pathTrans: " + request.getPathTranslated());
    //返回查询字符串,即URL中?后面的部份。
    System.out.println("QueryString: " + request.getQueryString());
    //如果用户通过鉴定,返回远程用户名,否则为null。
    System.out.println("RemoteUser: " + request.getRemoteUser());
    //返回客户端的会话ID
    System.out.println("SessionId: " + request.getRequestedSessionId());
    //返回URL中一部分,从“/”开始,包括上下文,但不包括任意查询字符串。
    System.out.println("RequestURI: " + request.getRequestURI());
    //返回请求URI上下文后的子串
    System.out.println("ServletPath: " + request.getServletPath());
    //返回指定的HTTP头标指。如果其由请求给出,则名字应为大小写不敏感。
    System.out.println("Accept: " + request.getHeader("Accept"));
    //获取请求的头部信息
    System.out.println("Host: " + request.getHeader("Host"));
    //获取来源页地址
    System.out.println("Referer : " + request.getHeader("Referer"));
    //获取请求方地址
    System.out.println("Origin : " + request.getHeader("Origin"));
    //获取请求方语言
    System.out.println("Accept-Language : " + request.getHeader("Accept-Language"));
    //浏览器支持的编码类型
    System.out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));
    //浏览器标识
    System.out.println("User-Agent : " + request.getHeader("User-Agent"));
    //在浏览器中不设置Connection,会默认是keep-alive(长连接)
    System.out.println("Connection : " + request.getHeader("Connection"));
    //获取请求方Cookie
    System.out.println("Cookie : " + request.getHeader("Cookie"));
    //获取请求方时间
    System.out.println("Created : " + session.getCreationTime());
    System.out.println("LastAccessed : " + session.getLastAccessedTime());


    System.out.println("------获取单个请求头name对应的value值--------");
    String headValue = request.getHeader("Accept-Encoding");
    System.out.println(headValue);

    System.out.println("------获取多个同名请求头对应的一组value值,因此返回枚举类型数据--------");
    /**
     * 获取多个同名请求头对应的一组value值,因此返回枚举类型数据
     */
    Enumeration enumeration = request.getHeaders("Accept-Encoding");
    /**
     * 将数据遍历出来
     */
    while (enumeration.hasMoreElements()) {
        //遍历枚举中存储的每一个元素
        String value = (String) enumeration.nextElement();
        //将值输出
        System.out.println(value);
    }

    System.out.println("-----获取请求头的所有name值,返回的数据也是一个枚举类型的数据,将枚举中的元素依次遍历出来,根据name获取对应的value值,即可得到Http请求头的所有信息-----------");

    Enumeration er = request.getHeaderNames();
    while (er.hasMoreElements()) {
        String name = (String) er.nextElement();
        String value = request.getHeader(name);
        System.out.println(name + "=" + value);
    }

}

展示信息:
rotocol: HTTP/1.1
Scheme: http
ServerName: 127.0.0.1
ServerPort: 21005
RemoteAddr: 127.0.0.1
RemoteHost: 127.0.0.1
CharacterEncoding: UTF-8
ContentLength: 13
ContentType: application/json
AuthType: null
HttpMethod: POST
pathInfo: null
pathTrans: null
QueryString: null
RemoteUser: null
SessionId: -c3tT2XlWyanLCSCSX7WkCgRFMqwlQ2NPQoOgKFr
RequestURI: /tools/header/getHeader
ServletPath: /header/getHeader
Accept: */*
Host: 127.0.0.1:21005
Referer : null
Origin : null
Accept-Language : null
Accept-Encoding : gzip, deflate
User-Agent : Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/1.02.1904090 MicroMessenger/6.7.3 Language/zh_CN webview/15570193175195294 webdebugger port/41273
Connection : keep-alive
Cookie : JSESSIONID=-c3tT2XlWyanLCSCSX7WkCgRFMqwlQ2NPQoOgKFr; C_S_D__=85D47E17BAC24E8E98D7806F22E381483A7243EE4DC242D19C9DC2EE9A07C455_1
Created : 1564973599552
LastAccessed : 1564973599552
------获取单个请求头name对应的value值--------
gzip, deflate
------获取多个同名请求头对应的一组value值,因此返回枚举类型数据--------
gzip, deflate
-----获取请求头的所有name值,返回的数据也是一个枚举类型的数据,将枚举中的元素依次遍历出来,根据name获取对应的value值,即可得到Http请求头的所有信息-----------
content-length=13
Accept=*/*
Cache-Control=no-cache
cookie=JSESSIONID=-c3tT2XlWyanLCSCSX7WkCgRFMqwlQ2NPQoOgKFr; C_S_D__=85D47E17BAC24E8E98D7806F22E381483A7243EE4DC242D19C9DC2EE9A07C455_1
User-Agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/1.02.1904090 MicroMessenger/6.7.3 Language/zh_CN webview/15570193175195294 webdebugger port/41273
Connection=keep-alive
Postman-Token=36305f48-fafd-4665-89b6-0ed328bec4f2
Host=127.0.0.1:21005
accept-encoding=gzip, deflate
Content-Type=application/json

 

文章参考:https://blog.csdn.net/yyz_suhua/article/details/74722193

  • 16
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: request.getheader()是Python中用于获取HTTP请求头信息的方法。它接受一个字符串参数,表示请求头的名称,并返回对应的值。如果请求头不存在,则返回None。 示例: ``` from flask import Flask, request app = Flask(__name__) @app.route("/") def index(): user_agent = request.headers.get("User-Agent") return f"Your User-Agent is {user_agent}" ``` 这段代码中,通过调用request.headers.get("User-Agent")获取请求头中"User-Agent"的值并赋值给变量user_agent。 注意,在Flask中,也可以使用 request.headers['User-Agent'] 来获取请求头的值,但是使用get方法会更安全,因为当请求头不存在时,get方法不会抛出KeyError异常。 ### 回答2: request.getheader()是Python中的一个内置函数,用于获取HTTP请求头信息中的某个字段的值。在Web开发中,我们经常需要获取HTTP请求头中的信息来作为判断、验证或者处理的依据,例如获取User-Agent、Accept-Language、Referer等等字段的值。 使用request.getheader()可以轻松地获取HTTP请求头中的任意一个字段的值。其基本语法如下: request.getheader(name[, default=None]) 其中,name为HTTP请求头中的一个字段名称,default为如果该字段不存在时返回的默认值。如果不指定默认值,则默认返回None。 在使用时,我们通常会先通过request.headers来获取HTTP请求头的字典对象,再通过request.getheader方法获取对应字段的值。例如下面的代码可以获取User-Agent字段的值: ``` from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): headers = request.headers user_agent = headers.get('User-Agent') return 'Your browser is %s' % user_agent ``` 上面的代码在Flask框架中使用,当用户访问根路径时,获取HTTP请求头中的User-Agent字段,并将其作为响应返回。 需要注意的是,HTTP请求头中的字段名称通常是大小写不敏感的,即不区分大小写。因此,在使用request.getheader()获取字段值时,字段名称可以大小写不一致。例如,下面的代码也可以获取到User-Agent字段的值: ``` user_agent = headers.get('user-agent') ``` 在使用request.getheader()时,还需要注意一些常见的问题。例如,如果指定的字段不存在,则会返回默认值,而不是抛出异常。因此,在获取HTTP请求头字段值时,通常需要进行判断字段值是否存在的操作,以避免出现意外情况。 另外,还需要注意一些HTTP请求头字段可能不存在,或者存在但为空字符串的情况。这时,如果不指定默认值,request.getheader()方法会返回None,可能会导致后续程序出错。因此,在使用request.getheader()时,需要根据具体业务情况,灵活决定是否指定默认值,以及默认值的取值。 综上所述,request.getheader()是Python中获取HTTP请求头字段值的常用方法,通过它可以轻松地获取HTTP请求头中的任意一个字段的值,并根据具体业务需求进行处理和判断。 ### 回答3: Python中的request.getheader()方法用于获取HTTP请求头。 HTTP请求头是HTTP协议中的一部分,包含了客户端(浏览器等)发送给服务器的信息。因为HTTP请求头传输信息是非常重要的,所以我们要能够访问和获取HTTP请求头的信息,以方便其他的操作。 使用request.getheader()方法可以获取HTTP请求头中的特定信息,比如: - User-Agent:客户端的浏览器类型等信息 - Accept:客户端能够接受的数据类型 - Host:客户端请求的主机名 - Referer:客户端请求的源地址 - Cookie:客户端的Cookie信息 语法: ```Python request.getheader(name[, default]) ``` 参数说明: - name:请求头中的字段名,比如'User-Agent'等。 - default:可选参数,如果请求头中没有该字段,则使用该默认值。 返回值: - 返回请求头中指定字段名的值。 示例: ```Python import urllib.request url = 'https://www.baidu.com' response = urllib.request.urlopen(url) # 获取User-Agent信息 user_agent = response.getheader('User-Agent') print(user_agent) # 获取Accept信息 accept_info = response.getheader('Accept') print(accept_info) ``` 以上示例演示了如何获取HTTP请求头中的User-Agent和Accept信息。 可以看到,通过request.getheader()方法,我们可以方便地获取HTTP请求头中的信息。这对于加强爬虫程序的伪装性、判断客户端信息等操作都是非常有帮助的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值