标签: http

在 Apache 中对 HTTP OPTIONS 请求返回“200 OK”

我正在尝试在不涉及任何代码的情况下实现跨域HTTP 访问控制

我的 Apache(2) 服务器使用此块返回正确的访问控制标头:

Header set Access-Control-Allow-Origin "*"                   
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" 
Run Code Online (Sandbox Code Playgroud)

我现在需要阻止 Apache 在浏览器发送HTTP OPTIONS请求(它存储在REQUEST_METHOD环境变量中)时执行我的代码,返回200 OK.

当请求方法为 OPTIONS 时,如何配置 Apache 以响应“200 OK”?

我试过这个mod_rewrite块,但访问控制头丢失了。

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]       
Run Code Online (Sandbox Code Playgroud)

security mod-rewrite http apache-2.2

17
推荐指数
3
解决办法
5万
查看次数

statsd 和 Graphite 的高可用、Web 可访问和可扩展部署

我想设置 statsd/graphite,以便我可以记录在 HTML 设备上运行的 JS 应用程序(即不在包含的 LAN 环境中,并且可能有大量我无法直接控制的传入数据)。

我的限制:

  • 入口点必须说 HTTP:这是通过一个简单的 HTTP-to-UDP-statsd 代理解决的(例如 github 上的 httpstatsd)
  • 必须抵抗单个服务器的故障(与墨菲定律作斗争:)
  • 必须是水平可扩展的:webscale,宝贝!:)
  • 架构应该尽可能简单(和便宜)
  • 我的服务器是虚拟机
  • 数据文件将存储在文件管理器设备上(使用 NFS)
  • 我可以使用 tcp/udp 硬件负载平衡器

总之,数据路径:[client] -(http)-> [http2statsd] -(udp)-> [statsd] -(tcp)-> [graphite] -(nfs)-> [filer]

到目前为止我的发现:

  • 扩展 http2statsd 部分很容易(无状态守护进程)
  • 缩放 statsd 部分似乎并不简单(我想我最终会在石墨中得到不连贯的值,例如 sum、avg、min、max ...)。除非 HTTP 守护进程进行一致的散列以对密钥进行分片。也许是一个想法......(但接下来是 HA 问题)
  • 缩放石墨部分可以通过分片(使用碳继电器)来完成(但这也不能解决 HA 问题)。显然,多个耳语实例不应写入相同的 NFS 文件。
  • 缩放文件管理器部分不是问题的一部分(但 IO 越少越好:)
  • 扩展 webapp 似乎很明显(虽然我没有测试过),因为它们只读取共享的 NFS 数据

所以我想知道是否有人有经验和最佳实践可以分享一个可靠的 statsd/graphite 部署?

http scalability high-availability graphite statsd

17
推荐指数
1
解决办法
1034
查看次数

Google SPDY - 有没有人在 Apache 上使用过它?

只是想知道是否有人在 Apache 上使用过 Google SPDY?http://code.google.com/p/mod-spdy/

我运行了几个 Web 服务器,并且很想知道 mod_spdy Apache 模块是否存在任何问题,以及是否有人看到 SPDY 支持的浏览器的速度明显提高?

http google apache-2.2 spdy

16
推荐指数
1
解决办法
5981
查看次数

如何在 Apache HTTP Server 中启用所有 HTTP 方法

如何在 Apache Web 服务器上启用对 RFC 2616 中定义的所有 HTTP 方法的处理?这些将是:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT
Run Code Online (Sandbox Code Playgroud)

我使用的是 Apache HTTP Server,版本 2.2.22 (Ubuntu)
这是我的.htaccess文件:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>
Run Code Online (Sandbox Code Playgroud)

这是我从运行 Telnet 得到的输出——没有 PUT 方法:

Escape character is '^]'.
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign host. …
Run Code Online (Sandbox Code Playgroud)

http apache-2.2

16
推荐指数
1
解决办法
12万
查看次数

mod_security 通过 http-host 头阻止请求

最近几天,我注意到一些服务器受到未知请求的影响。

他们中的大多数是这样的:

60.246.*.* - - [03/Jan/2015:20:59:16 +0200] "GET /announce.php?info_hash=%80%85%8e%9bu%cfJ.%85%82%e9%25%bf%8e%9e%d7%bf%c5%b0%12&peer_id=-UT3420-v%8bN%aa%60%60%fd%5d%d1%b0Ux&port=15411&uploaded=48588531&downloaded=0&left=0&corrupt=0&key=9E124668&numwant=200&compact=1&no_peer_id=1 HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

经过一些记录和搜索,我发现一些中国 ISP(根据 whatsmydns.net 的结果可能是 CERNET)和一些土耳其 ISP(可能是 TTNET)响应 dns 查询,例如a.tracker.thepiratebay.org使用与piratebay 无关的各种 IP或种子。换句话说,他们似乎出于某种奇怪的原因进行了某种 DNS 缓存中毒。

因此,这些国家/地区的数百个(如果不是数千个)bittorrent 客户端向我的网络服务器发出大量“通知”,这几乎导致 DDoS 攻击填满了 Apache 的所有连接。

目前,我完全阻止了中国和土耳其,它可以完成工作,但我想找到一种更好的方法来阻止这些请求。

我正在考虑使用基于 HTTP 主机标头的 mod_security 阻止这些请求。

所有这些请求都包含一个 HTTP Host 标头a.tracker.thepiratebay.org(或 thepiratebay.org 域的许多其他子域)。

这是通过 PHP$_SERVER变量的请求标头转储。

DOCUMENT_ROOT: /usr/local/apache/htdocs
GATEWAY_INTERFACE: CGI/1.1
HTTP_ACCEPT_ENCODING: gzip
HTTP_CONNECTION: Close
HTTP_HOST: a.tracker.thepiratebay.org
HTTP_USER_AGENT: uTorrent/342(109415286)(35702)
PATH: /bin:/usr/bin
QUERY_STRING: info_hash=%80%85%8e%9bu%cfJ.%85%82%e9%25%bf%8e%9e%d7%bf%c5%b0%12&peer_id=-UT3420-v%8bN%aa%60%60%fd%5d%d1%b0Ux&port=15411&uploaded=48588531&downloaded=0&left=0&corrupt=0&key=9E124668&numwant=200&compact=1&no_peer_id=1
REDIRECT_STATUS: 200
REMOTE_ADDR: 60.246.*.*
REMOTE_PORT: 3445
REQUEST_METHOD: GET
REQUEST_URI: /announce.php?info_hash=%80%85%8e%9bu%cfJ.%85%82%e9%25%bf%8e%9e%d7%bf%c5%b0%12&peer_id=-UT3420-v%8bN%aa%60%60%fd%5d%d1%b0Ux&port=15411&uploaded=48588531&downloaded=0&left=0&corrupt=0&key=9E124668&numwant=200&compact=1&no_peer_id=1
SCRIPT_FILENAME: /usr/local/apache/htdocs/announce.php
SCRIPT_NAME: …
Run Code Online (Sandbox Code Playgroud)

http bittorrent mod-security apache-2.2

16
推荐指数
4
解决办法
2万
查看次数

IIS 6.0 (Windows Server 2003) 上的 HTTP 压缩

当您想要在 IIS 6.0 (Windows Server 2003) 上启用 HTTP 压缩时,您需要做/考虑很多事情。

有人可以提供一个完整的列表,列出您必须采取的措施才能正确启用 HTTP 压缩吗?

iis windows-server-2003 performance http compression

15
推荐指数
1
解决办法
1311
查看次数

HAProxy - 根据 URI 转发到不同的 Web 服务器

我有一个具有以下配置的 HTTP 场:

listen webfarm 10.254.23.225:80
       mode http
       balance roundrobin
       cookie SERVERID insert
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA 10.254.23.4:80 cookie A check
       server webB 10.248.23.128:80 cookie B check
Run Code Online (Sandbox Code Playgroud)

我想添加一些选项,将特定 URI(即 /special)的所有请求转发到第三个 Web 服务器。我该怎么做?

http load-balancing haproxy

15
推荐指数
1
解决办法
4万
查看次数

如何通过命令行将 $_GET 变量传递给 PHP 脚本?

我正在尝试创建一个为 PHP 脚本提供服务的网络服务器。目前,它的工作原理如下:

  1. 客户端请求 /index.php?test=value
  2. 服务器调用 php index.php
  3. 服务器将 HTTP 请求标头作为 STDIN 提供给 PHP 进程
  4. 服务器php从 STDOUT读取输出并将其返回给客户端

除了参数没有传递给 PHP 脚本之外,所有这些都有效,因为:

var_dump($_GET);
Run Code Online (Sandbox Code Playgroud)

返回:

数组(0){}

$_GET调用时如何将参数传递给 PHP 二进制文件?

php http cgi

15
推荐指数
1
解决办法
3万
查看次数

nginx请求行太大

我收到错误:

Bad Request
Request Line is too large (6060 > 4094)
Run Code Online (Sandbox Code Playgroud)

当我像这样访问服务器上的特定 url 时:

/api/categorize?packages=package1,package2,...packageN
Run Code Online (Sandbox Code Playgroud)

在 nginx.conf 我有:

large_client_header_buffers 8 16k;

client_header_buffer_size 8k;
Run Code Online (Sandbox Code Playgroud)

我找不到有关该特定问题的文档, large_client_header_buffers 的文档提到 400 Bad request,但将“large_client_header_buffers”从 4 8k 更改为;或 8 8k;或 8 16;没有解决问题。

http nginx web 400

15
推荐指数
1
解决办法
2万
查看次数

在 HTTP2 下,新的 TCP 连接多久发起一次?

我知道 HTTP2 旨在将所有内容保持在单个 TCP 连接下,我想知道 TCP 连接多久会被断开。

例如,如果我访问 youtube,进行一些浏览,离开站点,然后返回,我会重新使用相同的 HTTPS 连接(就 TCP 4 元组而言,不是会话),还是不同的连接?

其中很多可能是特定于应用程序的,取决于浏览器如何实现它,但它是否在标准中的任何地方指定?

http https tcp

15
推荐指数
1
解决办法
685
查看次数