用Java和Nodejs获取http30X跳转后的url
用Java和Nodejs获取http30X跳转后的url
301永久重定向
定义
301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
301比较常用的场景是使用域名跳转。
比如,我们访问 http://www.baidu.com 会跳转到 https://www.baidu.com,发送请求之后,就会返回301状态码,然后返回一个location,提示新的地址,浏览器就会拿着这个新的地址去访问。
注意: 301请求是可以缓存的, 即通过看status code,可以发现后面写着from cache。
或者你把你的网页的名称从php修改为了html,这个过程中,也会发生永久重定向。
Nginx配置
rewrite后面接上permenent就代表301跳
1 |
//把来自veryyoung.me的请求301跳到 www.veryyoung.me |
302临时重定向
定义
302 Found 请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
比如未登陆的用户访问用户中心重定向到登录页面。
访问404页面会重新定向到首页。
Nginx配置
rewrite后面接上redirect就代表302跳
1 |
//把来自veryyoung.me的请求302跳到 www.veryyoung.me |
301与302的区别
302重定向只是暂时的重定向,搜索引擎会抓取新的内容而保留旧的地址,因为服务器返回302,所以,搜索搜索引擎认为新的网址是暂时的。
而301重定向是永久的重定向,搜索引擎在抓取新的内容的同时也将旧的网址替换为了重定向之后的网址。
Java实现获取301或302跳转后的URL
1 |
public String findLink(String url) {
|
用NodeJs实现获取301或302跳转后的URL
1 |
var request = require('request');
var find_link = function (link, collback) {
var f = function (link) {
|
Node.js实现301、302重定向服务
转 https://itbilu.com/nodejs/core/4yMyt38M.html
在Web应用中,有时会遇到页面需要Url重定向的情况。Url重定向分为301、302两种。301、302都是HTTP状态的编码,都代表着某个Url发生了转移。不同的是301重定向是永久的重定向(Moved Permanently),表示本网页永久性转移到另一个地址,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。302重定向是临时的重定向(Moved Temporarily),表示本网页暂时性转移到另一个地址,搜索引擎会抓取新的内容而保留旧的网址。
可以用Nodejs的http模块,实现一个301或302重定服务,实现代码如下:
实现301重定向服务:
var http = require('http');
var server = http.createServer(function (req, res) {
res.writeHead(301, {'Location': 'http://itbilu.com/'});
console.log(res._header);
res.end();
});
server.listen(3100)
Log打印结果为:
HTTP/1.1 301 Moved Permanently
Location: http://itbilu.com/
Date: Mon, 27 Apr 2015 05:39:47 GMT
Connection: keep-alive
Transfer-Encoding: chunked
实现302重定向服务:
var http = require('http');
var server = http.createServer(function (req, res) {
res.writeHead(302, {'Location': 'http://itbilu.com/'});
console.log(res._header);
res.end();
});
server.listen(3100)
Log打印结果为:
HTTP/1.1 302 Moved Temporarily
Location: http://itbilu.com/
Date: Mon, 27 Apr 2015 05:40:51 GMT
Connection: keep-alive
Transfer-Encoding: chunked
由上可见,浏览器会跟根据301和302状态码,跳转到Location对应的网址中。Node.js在设置301和302状态时,还自动加入了Moved Permanently或Moved Temporarily状态描述。
用Java和Nodejs获取http30X跳转后的url的更多相关文章
- 获取经过跳转后的url地址
粗略一算,不写code已经好几个月了. 昨日受兄弟所托,为他写了一个小小的程序. 程序功能: 自动获取跳转后的Url地址 如下图所示: (newUrl.txt为转换后的地址信息...) 实现过程: 每 ...
- PHP 取302跳转后真实 URL 的两种方法
1 . 第一种,CURL形式[感觉处理略慢,代码偏多] $url = '将跳转的URL'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url) ...
- PHP获取跳转后的URL,存到数据库,设置缓存时间
<?php error_reporting(0); header("Content-Type: text/html; charset=utf-8"); $fid=$_GET[ ...
- PHP使用CURL获取302跳转后的地址实例
/*返回一个302地址*/ function curl_post_302($url, $vars) { $ch = curl_init(); curl_setopt($ch ...
- C#抓取页面时候,获取页面跳转后的地址
static string fanhuiurl(string cahxunurl) { string url = ""; HttpWebRequest req = (HttpWeb ...
- 关于使用struts2跳转后css和js失效的解决方式
根据观察,主要是由于通过action跳转后的url会根据命名空间,自动跳转到命名空间子目录,使得当前引用的css和js查找不到,从而失效,根据这个原因,可使用四种办法解决: 1.使用struts2.x ...
- gRPC中Any类型的使用(Java和NodeJs端)
工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...
- Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL
Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...
- Java编程中获取键盘输入实现方法及注意事项
Java编程中获取键盘输入实现方法及注意事项 1. 键盘输入一个数组 package com.wen201807.sort; import java.util.Scanner; public clas ...
随机推荐
- MySQL Others--约束(Constraint)示例
ENUM约束 --使用ENUM来限制用户输入 CREATE TABLE Student ( StudentID INT AUTO_INCREMENT PRIMARY KEY, ClassID INT, ...
- 02-CSS常用样式
本篇主要介绍css的常用样式,以及网页布局相关知识.绝对定位和相对定位,盒子模型.css权重.以及css选择器: 绪论:CSS基本介绍 为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开, ...
- filter-mutate过滤插件
之前的nginx日志使用grok匹配,但是后来发现nginx的日志中每个值之间都使用了分隔符"|",这下就可以使用mutate来分隔出每个字段的含义,同时还减少了运算. 描述 mu ...
- python笔记--------一
作用域: 每个变量或函数都有自己的作用域. 每个函数都定义了一个命名空间,也称为作用域. 在最顶层有一个符号表会跟踪这一层所有的名称定义和和他们当前的绑定. 调用函数时,会建立一个新的符号表(常称为栈 ...
- thymeleaf教程-springboot项目中实现thymeleaf自定义标签
转载: http://www.9191boke.com/466119140.html 91博客网 开始: 在使用thymeleaf的过程中有时候需要公共部分渲染页面,这个时候使用自定义标签实现自 ...
- 剖析和解决Python中网络粘包的正确姿势
目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...
- webpack-dev-server 本地代理proxy
proxy: [ { context: ['/user', '/rights', '/resource/getAdNotice'], target: 'https://plus.m.jd.com', ...
- jvm 堆栈概念
关于JVM的工作原理以及调优是一个向往已久的模块,终于有幸接触到:http://pengjiaheng.iteye.com/blog/518623 那就顺着这个思路,来梳理一下自己看到后的结论和感想. ...
- django-发送文件
客户端授权密码”,勾选“开启”,弹出新窗口填写手机验证码. settings.py配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBac ...
- 学习:c++指向指针的指针(多级间接寻址)
指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.通常,一个指针包含一个变量的地址.当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置. 当一个 ...