boourns-unicorn 4.4.3 → 4.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/unicorn/const.rb +4 -4
- data/lib/unicorn/http_request.rb +5 -0
- data/lib/unicorn/http_response.rb +2 -5
- data/lib/unicorn/http_server.rb +4 -2
- data/unicorn.gemspec +1 -1
- metadata +12 -12
data/lib/unicorn/const.rb
CHANGED
|
@@ -29,10 +29,10 @@ module Unicorn::Const
|
|
|
29
29
|
|
|
30
30
|
# :stopdoc:
|
|
31
31
|
# common errors we'll send back
|
|
32
|
-
ERROR_400_RESPONSE = "
|
|
33
|
-
ERROR_414_RESPONSE = "
|
|
34
|
-
ERROR_413_RESPONSE = "
|
|
35
|
-
ERROR_500_RESPONSE = "
|
|
32
|
+
ERROR_400_RESPONSE = "400 Bad Request\r\n\r\n"
|
|
33
|
+
ERROR_414_RESPONSE = "414 Request-URI Too Long\r\n\r\n"
|
|
34
|
+
ERROR_413_RESPONSE = "413 Request Entity Too Large\r\n\r\n"
|
|
35
|
+
ERROR_500_RESPONSE = "500 Internal Server Error\r\n\r\n"
|
|
36
36
|
|
|
37
37
|
EXPECT_100_RESPONSE = "HTTP/1.1 100 Continue\r\n\r\n"
|
|
38
38
|
EXPECT_100_RESPONSE_SUFFIXED = "100 Continue\r\n\r\nHTTP/1.1 "
|
data/lib/unicorn/http_request.rb
CHANGED
|
@@ -22,6 +22,8 @@ class Unicorn::HttpParser
|
|
|
22
22
|
|
|
23
23
|
NULL_IO = StringIO.new("")
|
|
24
24
|
|
|
25
|
+
attr_accessor :response_start_sent
|
|
26
|
+
|
|
25
27
|
# :stopdoc:
|
|
26
28
|
# A frozen format for this is about 15% faster
|
|
27
29
|
REMOTE_ADDR = 'REMOTE_ADDR'.freeze
|
|
@@ -83,7 +85,10 @@ class Unicorn::HttpParser
|
|
|
83
85
|
|
|
84
86
|
# detect if the socket is valid by writing a partial response:
|
|
85
87
|
if @@check_client_connection && headers?
|
|
88
|
+
@response_start_sent = true
|
|
86
89
|
Unicorn::Const::HTTP_RESPONSE_START.each { |c| socket.write(c) }
|
|
90
|
+
else
|
|
91
|
+
@response_start_sent = false
|
|
87
92
|
end
|
|
88
93
|
|
|
89
94
|
e[RACK_INPUT] = 0 == content_length ?
|
|
@@ -17,14 +17,11 @@ module Unicorn::HttpResponse
|
|
|
17
17
|
}
|
|
18
18
|
CRLF = "\r\n"
|
|
19
19
|
|
|
20
|
-
def http_response_start
|
|
21
|
-
Unicorn::HttpParser.check_client_connection ? '' : 'HTTP/1.1 '
|
|
22
|
-
end
|
|
23
|
-
|
|
24
20
|
# writes the rack_response to socket as an HTTP response
|
|
25
|
-
def http_response_write(socket, status, headers, body)
|
|
21
|
+
def http_response_write(socket, status, headers, body, response_start_sent=false)
|
|
26
22
|
status = CODES[status.to_i] || status
|
|
27
23
|
|
|
24
|
+
http_response_start = response_start_sent ? '' : 'HTTP/1.1 '
|
|
28
25
|
if headers
|
|
29
26
|
buf = "#{http_response_start}#{status}\r\n" \
|
|
30
27
|
"Date: #{httpdate}\r\n" \
|
data/lib/unicorn/http_server.rb
CHANGED
|
@@ -533,13 +533,14 @@ class Unicorn::HttpServer
|
|
|
533
533
|
Unicorn.log_error(@logger, "app error", e)
|
|
534
534
|
Unicorn::Const::ERROR_500_RESPONSE
|
|
535
535
|
end
|
|
536
|
+
msg = 'HTTP/1.1 ' + msg unless @request.response_start_sent
|
|
536
537
|
client.kgio_trywrite(msg)
|
|
537
538
|
client.close
|
|
538
539
|
rescue
|
|
539
540
|
end
|
|
540
541
|
|
|
541
542
|
def expect_100_response
|
|
542
|
-
if
|
|
543
|
+
if @request.response_start_sent
|
|
543
544
|
Unicorn::Const::EXPECT_100_RESPONSE_SUFFIXED
|
|
544
545
|
else
|
|
545
546
|
Unicorn::Const::EXPECT_100_RESPONSE
|
|
@@ -549,6 +550,7 @@ class Unicorn::HttpServer
|
|
|
549
550
|
# once a client is accepted, it is processed in its entirety here
|
|
550
551
|
# in 3 easy steps: read request, call app, write app response
|
|
551
552
|
def process_client(client)
|
|
553
|
+
@request.response_start_sent = false
|
|
552
554
|
status, headers, body = @app.call(env = @request.read(client))
|
|
553
555
|
|
|
554
556
|
if 100 == status.to_i
|
|
@@ -557,7 +559,7 @@ class Unicorn::HttpServer
|
|
|
557
559
|
status, headers, body = @app.call(env)
|
|
558
560
|
end
|
|
559
561
|
@request.headers? or headers = nil
|
|
560
|
-
http_response_write(client, status, headers, body)
|
|
562
|
+
http_response_write(client, status, headers, body, @request.response_start_sent)
|
|
561
563
|
client.shutdown # in case of fork() in Rack app
|
|
562
564
|
client.close # flush and uncork socket immediately, no keepalive
|
|
563
565
|
rescue => e
|
data/unicorn.gemspec
CHANGED
metadata
CHANGED
|
@@ -3,7 +3,7 @@ name: !binary |-
|
|
|
3
3
|
Ym9vdXJucy11bmljb3Ju
|
|
4
4
|
version: !ruby/object:Gem::Version
|
|
5
5
|
version: !binary |-
|
|
6
|
-
|
|
6
|
+
NC40LjQ=
|
|
7
7
|
prerelease:
|
|
8
8
|
platform: ruby
|
|
9
9
|
authors:
|
|
@@ -11,12 +11,12 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2012-11-
|
|
14
|
+
date: 2012-11-03 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: !binary |-
|
|
18
18
|
cmFjaw==
|
|
19
|
-
requirement: &
|
|
19
|
+
requirement: &70186187391540 !ruby/object:Gem::Requirement
|
|
20
20
|
none: false
|
|
21
21
|
requirements:
|
|
22
22
|
- - ! '>='
|
|
@@ -24,11 +24,11 @@ dependencies:
|
|
|
24
24
|
version: '0'
|
|
25
25
|
type: :runtime
|
|
26
26
|
prerelease: false
|
|
27
|
-
version_requirements: *
|
|
27
|
+
version_requirements: *70186187391540
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: !binary |-
|
|
30
30
|
a2dpbw==
|
|
31
|
-
requirement: &
|
|
31
|
+
requirement: &70186187391020 !ruby/object:Gem::Requirement
|
|
32
32
|
none: false
|
|
33
33
|
requirements:
|
|
34
34
|
- - !binary |-
|
|
@@ -38,11 +38,11 @@ dependencies:
|
|
|
38
38
|
Mi42
|
|
39
39
|
type: :runtime
|
|
40
40
|
prerelease: false
|
|
41
|
-
version_requirements: *
|
|
41
|
+
version_requirements: *70186187391020
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: !binary |-
|
|
44
44
|
cmFpbmRyb3Bz
|
|
45
|
-
requirement: &
|
|
45
|
+
requirement: &70186187439620 !ruby/object:Gem::Requirement
|
|
46
46
|
none: false
|
|
47
47
|
requirements:
|
|
48
48
|
- - !binary |-
|
|
@@ -52,11 +52,11 @@ dependencies:
|
|
|
52
52
|
MC43
|
|
53
53
|
type: :runtime
|
|
54
54
|
prerelease: false
|
|
55
|
-
version_requirements: *
|
|
55
|
+
version_requirements: *70186187439620
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
57
57
|
name: !binary |-
|
|
58
58
|
aXNvbGF0ZQ==
|
|
59
|
-
requirement: &
|
|
59
|
+
requirement: &70186187439160 !ruby/object:Gem::Requirement
|
|
60
60
|
none: false
|
|
61
61
|
requirements:
|
|
62
62
|
- - !binary |-
|
|
@@ -66,11 +66,11 @@ dependencies:
|
|
|
66
66
|
My4y
|
|
67
67
|
type: :development
|
|
68
68
|
prerelease: false
|
|
69
|
-
version_requirements: *
|
|
69
|
+
version_requirements: *70186187439160
|
|
70
70
|
- !ruby/object:Gem::Dependency
|
|
71
71
|
name: !binary |-
|
|
72
72
|
d3Jvbmdkb2M=
|
|
73
|
-
requirement: &
|
|
73
|
+
requirement: &70186187438700 !ruby/object:Gem::Requirement
|
|
74
74
|
none: false
|
|
75
75
|
requirements:
|
|
76
76
|
- - !binary |-
|
|
@@ -80,7 +80,7 @@ dependencies:
|
|
|
80
80
|
MS42LjE=
|
|
81
81
|
type: :development
|
|
82
82
|
prerelease: false
|
|
83
|
-
version_requirements: *
|
|
83
|
+
version_requirements: *70186187438700
|
|
84
84
|
description: ! '\Unicorn is an HTTP server for Rack applications designed to only
|
|
85
85
|
serve
|
|
86
86
|
|