옵션 요청에 대해 httpd가 200으로 응답하도록 만드는 방법은 무엇입니까?

옵션 요청에 대해 httpd가 200으로 응답하도록 만드는 방법은 무엇입니까?

클라이언트가 옵션 요청을 할 때 httpd 서버가 200 응답을 보내도록 centos+apache에서 일부 구성을 수행하고 싶습니다.

여기에 아주 오래된 게시물이 있습니다(2011).

Apache에서 HTTP OPTIONS 요청에 대해 "200 OK"를 반환합니다.

이 구성은 현재 운영 체제 및 Apache에 적합하지 않을 수 있습니다.

구성 상태가 양호하면 curl -X OPTIONS -i http://remote_ip/remote.html200 반환 코드를 받을 수 있습니다.

내 시도는 다음과 같습니다.

1.cat.htaccess

AuthName "login"  
AuthType Basic  
AuthUserFile /var/www/html/passwd  
require user usernam
Options -Indexes
<LimitExcept OPTIONS>
  Require valid-user
</LimitExcept>

systemctl restart httpd다음 명령의 오류 메시지와 함께 다시 시작하세요.curl -X OPTIONS -i http://remote_ip/remote.html

<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>

.htaccess에서 위 구성을 삭제합니다.

2.cat /etc/httpd/conf/httpd.conf.

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride AuthConfig
    Require all granted
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
    Header always set Access-Control-Allow-Credentials "true"
    Header always set Access-Control-Allow-Headers "Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With"
    RewriteEngine On                  
    RewriteCond %{REQUEST_METHOD} OPTIONS 
    RewriteRule ^(.*)$ blank.html [QSA,L]
</Directory>

systemctl restart httpd다음 명령의 오류 메시지와 함께 다시 시작하세요.curl -X OPTIONS -i http://remote_ip/remote.html

HTTP/1.1 401 Unauthorized
Date: Sat, 08 Sep 2018 00:34:36 GMT
Server: Apache/2.4.6 (CentOS)
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With
WWW-Authenticate: Basic realm="login"
Content-Length: 381
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Unauthorized</title>
</head><body>
<h1>Unauthorized</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>

답변1

첫째, 파일에 문제가 있습니다 .htaccess.

  • 6-8행: 사용자 인증을 요구하지만 이는 요청이 아닌 경우에만 해당됩니다 OPTIONS. 괜찮아요.
  • usernam하지만 4번째 줄에서는 요청 방식(GET, POST, OPTIONS 등)에 관계없이 사용자를 사용자로 인증해야 합니다.

LimitExcept따라서 4행을 제거하거나 구성 섹션 으로 이동하면 제대로 작동합니다.

자세한 내용은 다음을 참조하세요.mod_authz_core 문서


둘째, 게시한 첫 번째 솔루션의 오류 메시지("서버에 내부 오류 또는 구성 오류가 발생했습니다...")는 파일이 유효하지 않음을 의미합니다 httpd.conf. 다른 잘못된 구성이 있을 수 있습니다. 구성을 확인하고아파치 문서.


참고로 테스트에 사용한 구성 파일은 다음에서 찾을 수 있습니다.https://github.com/mhutter/stackexchange/tree/master/467654

답변2

이 오류는 401 UnauthorizedHTTP 서버에 자격 증명(일반적으로 사용자 이름과 비밀번호)이 필요함을 의미합니다. 질문에 따르면 .htacccess인증을 요청하는 파일을 삭제했으므로 인증을 요청하는 콘텐츠가 활성 구성에 계속 존재해야 합니다.

자격 증명을 제공하려면 옵션 (짧은 형식 또는 긴 형식) curl을 사용할 수 있습니다 .-u, --user <user:password>


오류가 발생하면 500발생한 오류를 설명하는 항목이 Apache 로그에 있어야 합니다.


문제가 작동하지 않으면 일반적으로 문제를 찾는 데 필요한 최소한으로 구성을 줄이는 것이 가장 좋습니다. 이렇게 하려면 문제를 일으키지 않는다고 생각되는 행을 주석 처리하고 다시 시도하십시오. 작동이 시작되고 어디를 더 자세히 살펴봐야 할지 알거나 구성이 단순화됩니다.

구성에 따라 헤더 행이 문제를 일으키지 않을 수도 있지만 먼저 리디렉션 없이 작동하도록 시도해 보았습니다. 유효한 구성이 있으면 다시 중단되거나 원하는 구성이 될 때까지 줄을 추가할 수 있습니다.

관련 정보