質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1625閲覧

301リダイレクトをしたい時、RackのcallメソッドのContent-lengthは何を返すべきか

hanzoo

総合スコア28

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2017/04/21 07:39

編集2017/04/25 12:58

Rails5でRackのmiddleware.useを使用して新しいドメインにリダイレクトさせたい場合、Content-Lengthは何を返すべきでしょうか。
現在request_redirector.rbをいうファイルを作成して、herokuにアップしているプロジェクトを301リダイレクトさせようとしています。

config/environments/production.rb

1Rails.application.configure do 2(中略) 3 config.middleware.use 'RequestRedirector' 4end 5

lib/request_redirector.rb

1Class RequestRedirector 2 OLD_DOMAIN = 'OLD_DOMAIN' 3 NEW_DOMAIN = 'NEW_DOMAIN' 4 5 def initialize(app) 6 @app = app 7 end 8 9 def call(env) 10 request = Rack::Request.new(env) 11 12 if request.host.starts_with?(OLD_DOMAIN) 13 location = request.url.sub(OLD_DOMAIN + ".herokuapp.com", NEW_DOMAIN) 14 [301, { "Location" => location, "Content-Type" => 'text/html', "Content-Length" => '0'}, []] 15 else 16 @app.call(env) 17 end 18 end 19end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RFC2616 10.3.2 301 Moved Permanently には以下のように書かれています.

Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

(意訳)HEAD メソッドによるリクエストでない限り, レスポンスエンティティには新規(リダイレクト先)URLのリンクを含むちょっとしたハイパーテキストを含む必要がある.

実際にハイパーテキストをレスポンスに含めるかどうかは, SHOULD と書かれているので設計次第な部分はあると思いますが, とりあえず Content-Length にはレスポンスエンティティを実際に書いたと想定したときのファイルバイトサイズを割り当てておく, というのはいかがでしょうか.

Rack の話からは外れてしまっているので, 的を外していたらすみません.

投稿2017/05/30 09:17

zeroyonichikyu

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanzoo

2017/05/31 11:51

いえ、インターネットプロトコルの知識不足だったみたいですね。URL参考にさせてもらって勉強します。 回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問